0


用Python+ChatGPT批量生成论文概述

用Python+ChatGPT批量生成论文概述

做算法研究离不开阅读大量论文。从海量论文中找到需要的论文往往耗费算法团队不少的精力。

ChatGPT官方例子中有一个“TL;DR”摘要生成,非常适合生成论文摘要。

在这里插入图片描述

于是我用python+GPT-3 API开发了一个工具,可以直接从arxiv地址生成论文概述。实现步骤如下:

文章目录

下载论文

第一步,我们要先拿到论文正文。

从arxiv上下载论文非常简单,如果你知道论文编号(比如2302.08996),那么论文的pdf下载地址为:

  1. https://arxiv.org/pdf/[论文编号].pdf

。我们只需要发起网络请求即可将论文下载到本地。

我这里使用

  1. requests

库发起网络请求,你可以使用任何你喜欢库完成论文下载。

  1. defdownload_paper(paper_id:str, file_name: Optional[str]=None)-> Optional[str]:""" 根据论文id将论文下载到本地
  2. Parameters
  3. -----------
  4. paper_id: str
  5. 论文id
  6. file_name: Optional[str]
  7. 本地文件名,如果为空则用论文id做文件名
  8. Returns
  9. -------
  10. result: Optional[str]
  11. 论文下载结果。成功则返回本地文件路径,失败则返回None
  12. """
  13. paper_url =f"https://arxiv.org/pdf/{paper_id}.pdf"ifnot file_name:
  14. file_name =f"{paper_id}.pdf"
  15. res = requests.get(url=paper_url)if res.status_code ==200:withopen(file_name,"wb")as f:
  16. f.write(res.content)return file_name
  17. returnNone

pdf转文本

ChatGPT只接受文本输入,所以拿到论文后,我们需要将pdf格式的论文转换为纯文本。这里给大家推荐一个好用的pdf转文本库——

  1. pdfplumber

  1. pdfplumber

使用非常简单,只要打开文件,即可通过

  1. pdfplumber.pages

获取到每一页pdf内容。然后调用

  1. pdfplumber.Page

类的

  1. extract_text()

方法就能提取页面的文本。示例代码如下:

  1. defpdf2txt(file_name:str| pdfplumber.PDF, page_start:int, page_end:int)->str:"""
  2. Parameters
  3. -----------
  4. file_name: str | pdfplumber.PDF
  5. pdf文件路径或pdfplumber.PDF实例
  6. page_start: int
  7. 要转换的起始页页码
  8. page_end: int
  9. 要转换的结束页页码
  10. Returns
  11. -------
  12. content: str
  13. 转换后的文本
  14. """
  15. content =""ifisinstance(file_name,str):
  16. pages = pdfplumber.open(file_name).pages
  17. elifisinstance(file_name, pdfplumber.PDF):
  18. pages = file_name.pages
  19. else:raise AttributeError("需要传入pdf路径或PDF对象")for page in pages[page_start:page_end]:
  20. content += page.extract_text()return content

上面的代码会逐页提取给定pdf文档指定页码范围内的内容并返回。

用GPT-3生成概述

有了文本,我们就可以用ChatGPT来生成概述了。

首先我们导入

  1. openai

库,并配置好参数:

  1. import openai
  2. openai.api_key ="YOUR_API_KEY"
  3. TLDRParameter ={"model":"text-davinci-003","max_tokens":2048,"temperature":0.3,"top_p":1.0,"frequency_penalty":0.0,"presence_penalty":0.0,"stop":["\n\n"]}
  4. tldr_tag ="\n\n tl;dr:"# 给ChatGPT明确的文本补全意图

这里的

  1. tldr_tag

需要稍微解释一下,这段字符串会添加在我们论文文本的末尾,用于提示ChatGPT我们要做的是上面文本的摘要。为了让ChatGPT能够将论文内容和我们给出的提示区分开来,在参数中我们设置了

  1. stop

,用于告诉ChatGPT输入到哪里结束。

输出概述

ChatGPT对输入长度是有限制的,因此我们不能一次性将整个论文内容输入进去,需要一页一页得输入并生成每一页的概述。

  1. pages = pdfplumber.open(file_name).pages
  2. for p in pages:
  3. content = p.extract_text()+ tldr_tag
  4. response = openai.Completion.create(prompt=content,**TLDRParameter)print(f"Page1 {index +1}:\n")print(response["choices"][0]["text"])print("\n\n")

集成测试

将上面的代码集成到一起,我们就可以得到一个完整可用的论文概述工具

  1. import requests
  2. import pdfplumber
  3. import openai
  4. from typing import Optional
  5. openai.api_key ="YOUR_API_KEY"
  6. TLDRParameter ={"model":"text-davinci-003","max_tokens":2048,"temperature":0.3,"top_p":1.0,"frequency_penalty":0.0,"presence_penalty":0.0,"stop":["\n"]}
  7. tldr_tag ="\ntl;dr:"defdownload_paper(paper_id:str, file_name: Optional[str]=None)-> Optional[str]:""" 根据论文id将论文下载到本地
  8. Parameters
  9. -----------
  10. paper_id: str
  11. 论文id
  12. file_name: Optional[str]
  13. 本地文件名,如果为空则用论文id做文件名
  14. Returns
  15. -------
  16. result: Optional[str]
  17. 论文下载结果。成功则返回本地文件路径,失败则返回None
  18. """
  19. paper_url =f"https://arxiv.org/pdf/{paper_id}.pdf"ifnot file_name:
  20. file_name =f"{paper_id}.pdf"
  21. res = requests.get(url=paper_url)if res.status_code ==200:withopen(file_name,"wb")as f:
  22. f.write(res.content)return file_name
  23. returnNoneif __name__ =='__main__':
  24. file_name = download_paper('2302.08996')
  25. pages = pdfplumber.open(file_name).pages
  26. for index, page inenumerate(pages):
  27. content = page.extract_text()+ tldr_tag
  28. response = openai.Completion.create(prompt=content,**TLDRParameter)print(f"Page {index +1}:\n")print(response["choices"][0]["text"])print("\n\n")

我用最新发出的2302.08996做测试,输出如下:

  1. Page 1:
  2. We employ meta reinforcement learning to model short-duration trading in nancial markets as a sequential decision-making problem. We incorporate symbolic features based on frequently occurring patterns in price series to improve the performance of our meta-RL algorithm. Preliminary results on real data indicate that meta-RL and logical features are more effective than vanilla RL or primary price features alone.
  3. Page 2:
  4. Meta-learning techniques, such as Inductive Logic Programming (ILP) and RL2, can be used to train a trading agent on a new task with limited data.
  5. Page 3:
  6. We propose a meta-RL agent that can rapidly adapt to new reward patterns. We use PPO to train the agent and an LSTM agent. We also use hand-crafted features and learned logical features to augment the agent's neural network model. Results show that the agent outperforms vanilla reinforcement learning.
  7. Page 4:

上面每一页的输出都很好地概括了该页的核心内容,其中第四页为空是因为这一页绝大部分内容是参考文献,ChatGPT也很聪明的没有返回概述。

总结

试用了一天,我认为模型对论文总结得很棒,用这个工具读起论文来效率大增。尽管它永远可能取代实际阅读整篇论文的重要过程,但却可以作为探索发现更广泛有趣科学的工具。

这篇文章更多的是一个概念的证明,如果想大规模用于生产还有很多细节要处理,比如pdf转换的文本的格式,按页转换文本带来得章节错位等问题。然而,我觉得这些问题都可以解决。在ChatGPT的加持下,我认为我们比以往任何时候都更高效地处理更多科学信息。


本文转载自: https://blog.csdn.net/jarodyv/article/details/129220264
版权归原作者 JarodYv 所有, 如有侵权,请联系我们删除。

“用Python+ChatGPT批量生成论文概述”的评论:

还没有评论