目錄

用+批量生成論文概述

做算法研究離不開閱讀大量論文。從海量論文中找到需要的論文往往耗費算法團(tuán)隊不少的精力。

官方例子中有一個“TL;DR”摘要生成,非常適合生成論文摘要。

在這里插入圖片描述

于是我用+GPT-3 API開發(fā)了一個工具,可以直接從地址生成論文概述。實現(xiàn)步驟如下:

下載論文

第一步,我們要先拿到論文正文。

從上下載論文非常簡單,如果你知道論文編號(比如2302.),那么論文的pdf下載地址為:[論文編號].pdf。我們只需要發(fā)起網(wǎng)絡(luò)請求即可將論文下載到本地。

我這里使用庫發(fā)起網(wǎng)絡(luò)請求,你可以使用任何你喜歡庫完成論文下載。

def download_paper(paper_id: str, file_name: Optional[str] = None) -> Optional[str]:
    """ 根據(jù)論文id將論文下載到本地
    Parameters
    -----------
    paper_id: str
        論文id
    file_name: Optional[str]
        本地文件名,如果為空則用論文id做文件名
    Returns
    -------
    result: Optional[str]
        論文下載結(jié)果。成功則返回本地文件路徑,失敗則返回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轉(zhuǎn)文本

只接受文本輸入,所以拿到論文后,我們需要將pdf格式的論文轉(zhuǎn)換為純文本。這里給大家推薦一個好用的pdf轉(zhuǎn)文本庫——。

使用非常簡單,只要打開文件,即可通過.獲取到每一頁pdf內(nèi)容。然后調(diào)用.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
        要轉(zhuǎn)換的起始頁頁碼
    page_end: int
        要轉(zhuǎn)換的結(jié)束頁頁碼
    Returns
    -------
    content: str
        轉(zhuǎn)換后的文本
    """
    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文檔指定頁碼范圍內(nèi)的內(nèi)容并返回。

用GPT-3生成概述

有了文本,我們就可以用來生成概述了。

首先我們導(dǎo)入庫,并配置好參數(shù):

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": ["
"]
}
tldr_tag = "
 tl;dr:" # 給ChatGPT明確的文本補(bǔ)全意圖

這里的需要稍微解釋一下,這段字符串會添加在我們論文文本的末尾,用于提示我們要做的是上面文本的摘要。為了讓能夠?qū)⒄撐膬?nèi)容和我們給出的提示區(qū)分開來,在參數(shù)中我們設(shè)置了stopchatgpt能修改論文嗎,用于告訴輸入到哪里結(jié)束。

輸出概述

對輸入長度是有限制的,因此我們不能一次性將整個論文內(nèi)容輸入進(jìn)去,需要一頁一頁得輸入并生成每一頁的概述。

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}:
")
    print(response["choices"][0]["text"])
    print("
")

集成測試

將上面的代碼集成到一起chatgpt能修改論文嗎,我們就可以得到一個完整可用的論文概述工具

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": ["
"]
}
tldr_tag = "
tl;dr:"
def download_paper(paper_id: str, file_name: Optional[str] = None) -> Optional[str]:
    """ 根據(jù)論文id將論文下載到本地
    Parameters
    -----------
    paper_id: str
        論文id
    file_name: Optional[str]
        本地文件名,如果為空則用論文id做文件名
    Returns
    -------
    result: Optional[str]
        論文下載結(jié)果。成功則返回本地文件路徑,失敗則返回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}:
")
        print(response["choices"][0]["text"])
        print("
")

我用最新發(fā)出的2302.做測試,輸出如下:

Page 1:

We meta to - in ? as a - . We on in to the of our meta-RL . on real data that meta-RL and are more than RL or .

Page 2:

Meta- , such as (ILP) and RL2, can be used to a on a new task with data.

Page 3:

We a meta-RL that can to new . We use PPO to the and an LSTM . We also use hand- and to the 's . show that the .

Page 4:

上面每一頁的輸出都很好地概括了該頁的核心內(nèi)容,其中第四頁為空是因為這一頁絕大部分內(nèi)容是參考文獻(xiàn),也很聰明的沒有返回概述。

總結(jié)

試用了一天,我認(rèn)為模型對論文總結(jié)得很棒,用這個工具讀起論文來效率大增。盡管它永遠(yuǎn)可能取代實際閱讀整篇論文的重要過程,但卻可以作為探索發(fā)現(xiàn)更廣泛有趣科學(xué)的工具。

這篇文章更多的是一個概念的證明,如果想大規(guī)模用于生產(chǎn)還有很多細(xì)節(jié)要處理,比如pdf轉(zhuǎn)換的文本的格式chatgpt能修改論文嗎,按頁轉(zhuǎn)換文本帶來得章節(jié)錯位等問題。然而,我覺得這些問題都可以解決。在的加持下,我認(rèn)為我們比以往任何時候都更高效地處理更多科學(xué)信息。

到此這篇關(guān)于用+批量生成論文的文章就介紹到這了,更多相關(guān)+批量生成論文內(nèi)容請搜索云海天教程以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持云海天教程!

免責(zé)聲明:本文系轉(zhuǎn)載,版權(quán)歸原作者所有;旨在傳遞信息,不代表本站的觀點和立場和對其真實性負(fù)責(zé)。如需轉(zhuǎn)載,請聯(lián)系原作者。如果來源標(biāo)注有誤或侵犯了您的合法權(quán)益或者其他問題不想在本站發(fā)布,來信即刪。