这篇文章主要介绍了怎么使用+批量生成论文的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用+批量生成论文文章都会有所收获,下面我们一起来看看吧。
用+批量生成论文概述
做算法研究离不开阅读大量论文。从海量论文中找到需要的论文往往耗费算法团队不少的精力。
官方例子中有一个“TL;DR”摘要生成,非常适合生成论文摘要。
于是我用+GPT-3 API开发了一个工具,可以直接从arxiv地址生成论文概述。实现步骤如下:
下载论文
第一步,我们要先拿到论文正文。
从arxiv上下载论文非常简单,如果你知道论文编号(比如2302.08996),那么论文的pdf下载地址为:[论文编号].pdf。我们只需要发起网络请求即可将论文下载到本地。
我这里使用库发起网络请求,你可以使用任何你喜欢库完成论文下载。
def download_paper(paper_id: str, file_name: Optional[str] = None) -> Optional[str]: """ 根据论文id将论文下载到本地 Parameters ----------- paper_id: str 论文id file_name: Optional[str] 本地文件名,如果为空则用论文id做文件名 Returns ------- result: Optional[str] 论文下载结果。成功则返回本地文件路径,失败则返回None """ paper_url = f"https://arxiv.org/pdf/{paper_id}.pdf" if not file_name: file_name = f"{paper_id}.pdf" res = requests.get(url=paper_url) if res.status_code == 200: with open(file_name, "wb") as f: f.write(res.content) return file_name return None
pdf转文本
只接受文本输入,所以拿到论文后,我们需要将pdf格式的论文转换为纯文本。这里给大家推荐一个好用的pdf转文本库——。
使用非常简单,只要打开文件,即可通过.pages获取到每一页pdf内容。然后调用.Page类的()方法就能提取页面的文本。示例代码如下:
def pdf2txt(file_name: str | pdfplumber.PDF, page_start: int, page_end: int) -> str: """ Parameters ----------- file_name: str | pdfplumber.PDF pdf文件路径或pdfplumber.PDF实例 page_start: int 要转换的起始页页码 page_end: int 要转换的结束页页码 Returns ------- content: str 转换后的文本 """ content = "" if isinstance(file_name, str): pages = pdfplumber.open(file_name).pages elif isinstance(file_name, pdfplumber.PDF): pages = file_name.pages else: raise AttributeError("需要传入pdf路径或PDF对象") for page in pages[page_start:page_end]: content += page.extract_text() return content
上面的代码会逐页提取给定pdf文档指定页码范围内的内容并返回。
用GPT-3生成概述
有了文本,我们就可以用来生成概述了。
首先我们导入库,并配置好参数:
import openai openai.api_key = "YOUR_API_KEY" TLDRParameter = { "model": "text-davinci-003", "max_tokens": 2048, "temperature": 0.3, "top_p": 1.0, "frequency_penalty": 0.0, "presence_penalty": 0.0, "stop": ["nn"] } tldr_tag = "nn tl;dr:" # 给ChatGPT明确的文本补全意图
这里的需要稍微解释一下,这段字符串会添加在我们论文文本的末尾,用于提示我们要做的是上面文本的摘要。为了让能够将论文内容和我们给出的提示区分开来,在参数中我们设置了stop,用于告诉输入到哪里结束。
输出概述
对输入长度是有限制的,因此我们不能一次性将整个论文内容输入进去,需要一页一页得输入并生成每一页的概述。
pages = pdfplumber.open(file_name).pages for p in pages: content = p.extract_text() + tldr_tag response = openai.Completion.create(prompt=content, **TLDRParameter) print(f"Page1 {index + 1}:n") print(response["choices"][0]["text"]) print("nn")
集成测试
将上面的代码集成到一起,我们就可以得到一个完整可用的论文概述工具
import requests import pdfplumber import openai from typing import Optional openai.api_key = "YOUR_API_KEY" 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"] } tldr_tag = "ntl;dr:" def download_paper(paper_id: str, file_name: Optional[str] = None) -> Optional[str]: """ 根据论文id将论文下载到本地 Parameters ----------- paper_id: str 论文id file_name: Optional[str] 本地文件名,如果为空则用论文id做文件名 Returns ------- result: Optional[str] 论文下载结果。成功则返回本地文件路径,失败则返回None """ paper_url = f"https://arxiv.org/pdf/{paper_id}.pdf" if not file_name: file_name = f"{paper_id}.pdf" res = requests.get(url=paper_url) if res.status_code == 200: with open(file_name, "wb") as f: f.write(res.content) return file_name return None if __name__ == '__main__': file_name = download_paper('2302.08996') pages = pdfplumber.open(file_name).pages for index, page in enumerate(pages): content = page.extract_text() + tldr_tag response = openai.Completion.create(prompt=content, **TLDRParameter) print(f"Page {index + 1}:n") print(response["choices"][0]["text"]) print("nn")
我用最新发出的2302.08996做测试,输出如下:
Page 1:
We meta to model short- in fi as a – . We based on in price to the of our meta-RL . on real data that meta-RL and are more than RL or price alone.
Page 2:
Meta- , such as Logic (ILP) and RL2, can be used to train a agent on a new task with data.
Page 3:
We a meta-RL agent that can adapt to new . We use PPO to train the agent and an LSTM agent. We also use hand- and to the agent’s model. show that the agent .
Page 4:
上面每一页的输出都很好地概括了该页的核心内容,其中第四页为空是因为这一页绝大部分内容是参考文献,也很聪明的没有返回概述。
关于“怎么使用+批量生成论文”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“怎么使用+批量生成论文”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。