ChatPaper 全流程加速科研:论文阅读 + 润色 + 优缺点分析与改进建议 + 审稿回复
ChatPaper 全流程加速科研:论文阅读+润色+优缺点分析与改进建议+审稿回复
1.解决问题
面对每天海量的 arxiv 论文,以及 AI 极速的进化,我们人类必须也要一起进化才能不被淘汰。ChatPaper 是一款论文总结工具。AI 用一分钟总结论文,用户用一分钟阅读 AI 总结的论文。
它可以根据用户输入的关键词,自动在 arxiv 上下载最新的论文,再利用 ChatGPT3.5 的 API 接口强大的总结能力,将论文总结为固定的格式,以最少的文本,最低的阅读门槛,为大家提供最大信息量,以决定该精读哪些文章。也可以提供本地的 PDF 文档地址,直接处理。一般一个晚上就可以速通一个小领域的最新文章。我自己测试了两天了。这段代码虽然不多,但整个流程走通也花了我近一周的时间,今天分享给大家。
2.技术原理:
论文总结遵循下面四个问题:
研究背景
过去的方案是什么?他们有什么问题?
本文方案是什么?具体步骤是什么?
本文在哪些任务中,取得了什么效果?
基本上是大家做论文汇报的主要内容了。
实现细节:
提取摘要和 introduction 的内容,因为 abstract 很少会告诉你过去的方案是什么,存在什么问题。
然后提取 method 章节,总结方法的具体步骤
最后提取 conclusion 章节,总结全文。
分三次总结和喂入,如果每个部分超过了长度,则截断(目前这个方案太粗暴了,但也没有更好的更优雅的方案)
3.使用步骤
3.1 以脚本方式运行
Windows, Mac 和 Linux 系统应该都可以
python 版本最好是 3.9,其他版本应该也没啥问题
在 apikey.ini 中填入你的 openai key。小白用户比较多,我直接给截图示意下可能会更好:
使用过程要保证全局代理!如果客户端时 clash 的话,可以参考这个进行配置:
安装依赖:最好翻墙,或者用国内源。
4.1. Arxiv 在线批量搜索+下载+总结: 运行 chat_paper.py, 比如:
更准确的脚本是 chat_arxiv.py,使用方案,命令行更加简洁:
其中 query 仍然是关键词,page_num 是搜索的页面,每页和官网一样,最大是 50 篇,max_results 是最终总结前 N 篇的文章,days 是选最近几天的论文,严格筛选!
注意:搜索词无法识别-
,只能识别空格!所以原标题的连字符最好不要用! 感谢网友提供的信息
4.2. Arxiv 在线批量搜索+下载+总结+高级搜索: 运行 chat_paper.py, 比如:
4.3. Arxiv 在线批量搜索+下载+总结+高级搜索+指定作者: 运行 chat_paper.py, 比如:
4.4. 本地 pdf 总结: 运行 chat_paper.py, 比如:
4.5. 本地文件夹批量总结: 运行 chat_paper.py, 比如:
4.6. 谷歌学术论文整理: 运行 google_scholar_spider.py, 比如:
此命令在 Google Scholar 上搜索与“deep learning”相关的文章,检索 30 个结果,将结果保存到“./data”文件夹中的 CSV 文件中,按每年引用次数排序数据,并绘制结果。
具体使用和参数请参考https://github.com/JessyTsu1/google_scholar_spider
另外注意,目前这个不支持综述类文章。
注意:key_word 不重要,但是 filter_keys 非常重要!一定要修改成你的关键词。
另外关于 arxiv 的搜索关键词可以参考下图:
参数介绍:
3.2 以 Flask 服务运行
下载项目并进入项目目录
在项目根目录下的
apikey.ini
文件中填入您的 OpenAI 密钥。配置虚拟环境并下载依赖
启动服务
访问 http://127.0.0.1:5000/ 后,您将看到主页。在主页上,您可以点击不同的链接来调用各种服务。您可以通过修改链接中的参数值来实现不同的效果。有关参数详细信息,请参阅上一步骤中的详细介绍
特别的,这四个接口实际是封装了根目录下四个脚本的 web 界面。参数可以通过链接来修改。例如要运行“arxiv?query=GPT-4&key_word=GPT+robot&page_num=1&max_results=1&days=1&sort=web&save_image=False&file_format=md&language=zh”的话,相当于在根目录下调用 chat_arxiv.py 并返回结果。这个显示的结果和在命令行中调用的结果是一样的(即:python chat_arxiv.py --query "GPT-4" --key_word "GPT robot" --page_num 1 --max_results 1 --days 1 --sort "web" --save_image False --file_format "md" --language "zh")。您可以通过修改参数来获得其他搜索结果。
如果以这种方式部署的话,结果会保存在同级目录下新生成的 export、pdf_files 和 response_file 三个文件夹里
3.3 以 docker 形式运行
安装 docker 和 docker-compose,可以参考以下链接
https://yeasy.gitbook.io/docker_practice/install
https://yeasy.gitbook.io/docker_practice/compose/install
找地方放项目根目录下的“docker-compose.yaml”文件,将 21 行的
YOUR_KEY_HERE
替换为自己的 openai_key在同级目录下在命令行运行
这样的界面代表一些正常,随后访问 https://127.0.0.1:28460/ 就可以从网页上打开了! !
特别的,如果有改进项目的想法,您可以查看 build.sh、dev.sh、tagpush.sh 这三个脚本以及根目录 docker 目录下文件的作用,相信它们会对你容器化封装项目的思想有进一步提升
所有的运行结果都被保存在 Docker 的 volumes 中,如果想以服务的形式长期部署,您可以将这些目录映射出来。默认情况下,它们位于 /var/lib/docker/volumes/ 下。您可以进入该目录并查看 chatpaper_log、chatpaper_export、chatpaper_pdf_files 和 chatpaper_response_file 四个相关文件夹中的结果。有关 Docker volumes 的详细解释,请参考此链接:http://docker.baoshu.red/data_management/volume.html。
4.在线部署
在Hugging Face 创建自己的个人账号并登录;
进入 ChatPaper 主仓库:https://huggingface.co/spaces/wangrongsheng/ChatPaper ,您可以在Files and Version 看到所有的最新部署代码;
[可选]私有化部署使用:点击Duplicate this space ,在弹出的页面中将
Visibility
选择为Private
,最后点击Duplicate Space
,Space 的代码就会部署到你自己的 Space 中,为了方便自己每次调用可以不用填写 API-key,您可以将app.py#L845 修改为您的密钥:default="sk-abcdxxxxxxxx"
,点击保存文件就会立即重新部署了;[可选]公有化部署使用:点击Duplicate this space ,在弹出的页面中将
Visibility
选择为Public
,最后点击Duplicate Space
,Space 的代码就会部署到你自己的 Space 中,这样就可以完成一个公有化的部署。
注:公有化部署和私有化部署根据你的需求二选一即可!
5. 使用技巧
快速刷特定关键词的论文,不插图的话,每张篇文章需要花一分钟,阅读时间差不多一分钟。
本项目可以用于跟踪领域最新论文,或者关注其他领域的论文,可以批量生成总结,最大可生成 1000(如果你能等得及的话)。虽然 Chat 可能有瞎编的成分,但是在我的规范化提问的框架下,它的主要信息是保熟的。
数字部分需要大家重新去原文检查!
找到好的文章之后,可以精读这篇文章。
推荐另外两个精读论文的 AI 辅助网站:https://typeset.io/ 和 chatpdf。
和上面这两个工具的主要优势在于,ChatPaper 可以批量自动总结最新论文,可以极大的降低阅读门槛,尤其是我们国人。缺点也很明显,ChatPaper 没有交互功能,不能连续提问,但我觉得这个重要性不大~
6.常见报错
pip 安装错误:
推荐关掉梯子,使用国内源下载:
调用 openai 的 chatgpt api 时出现 APIConnectionError, 如何解决?参考知乎回答:https://www.zhihu.com/question/587322263/answer/2919916984
直接在 chat_paper.py 里加上
os.environ["http_proxy"] = "http://<代理 ip>:<代理端口>"os.environ["https_proxy"] = "http://<代理 ip>:<代理端口>"
代理 ip 和端口需要你在 Windows 系统里面查找。
API 被 OpenAI 禁了的报错:
这种情况只能用新号了。另外一定要注意一个号尽量不要多刷,节点一定要靠谱,千万不能用大陆和香港的节点,用了就寄。
Https 通信错误:
这个报错大概率是节点不够干净。如果有大佬知道具体原因,欢迎挂 issues
issue174提供的方案是:
7.chatgpt 分析报告
[0/13] 程序概述: get_paper.py
该文件是一个 Python 脚本,文件名为 get_paper.py,属于 ChatPaper 工程中的一个组成部分。它实现了一个 Paper 类和一个 main 函数。Paper 类代表了一篇论文,它可以从 PDF 文件中解析出论文的元信息和内容,并提供了一些函数用于获取论文信息,如获取文章标题,获取章节名称及内容等。主函数 main() 演示了如何使用 Paper 类处理 PDF 文件,根据 PDF 文件路径初始化 Paper 对象,并调用 parse_pdf() 函数解析 PDF 文件并获取相应的信息。
[1/13] 程序概述: chat_arxiv_maomao.py
该程序文件名为 chat_arxiv_maomao.py
,猫娘版 chat_arxiv.py,其功能为使用 OpenAI API 进行聊天和从 arxiv 搜索引擎中查询论文信息,并将相应的论文保存为 PDF 格式和部分信息保存为图片格式。程序文件使用了许多 Python 的第三方库,如 arxiv、numpy、openai、fitz 等。程序中定义了 ArxivParams
以及 Paper
、Reader
三个类,其中 ArxivParams
定义了从 arxiv 搜索论文时需要的各种参数;Paper
类用于解析 PDF 文件,提取论文信息并保存为本地 PDF 文件及多个图片文件,其中包括论文标题、pdf 路径、每个章节标题对应的 pdf 页码、每个章节的正文内容、摘要信息,以及保存为图片文件的论文第一页;Reader
类主要用于在 arxiv 搜索引擎中查询论文信息,根据查询信息和关键词得到论文列表,再根据列表中的论文信息获取论文 pdf 文件并保存。
核心区别在于猫娘限定款,但目前的主要语句没有猫娘的韵味,希望大家一起帮忙调试出一个有灵魂的猫娘 AI 论文秘书!给你留一个 pull 的位置!
[2/13] 程序概述: chat_paper.py
该程序文件名为 chat_paper.py,包含一个 Reader 类和 PaperParams 元组。该程序功能为根据读者输入的搜索查询和感兴趣的关键词,从 Arxiv 数据库中获取文章,并对文章进行摘要和总结。程序使用了 OpenAI 的 GPT-3 模型生成文本摘要,使用了 arxiv 包获取 Arxiv 数据库中的文章。程序会将摘要和总结以 markdown 文件的形式保存下来。
Reader 类包含了下载文章、筛选文章以及使用 GPT-3 生成文本摘要和总结的方法。主要方法有:
get_arxiv(): 使用 Arxiv 的 API 获取搜索结果。
filter_arxiv(): 筛选文章,并返回筛选后的结果。
download_pdf(): 从 Arxiv 下载筛选后的文章。
summary_with_chat(): 对每一篇下载下来的文章进行文本摘要和总结,并将结果以 markdown 文件的形式保存。
PaperParams 元组包含了程序运行所需要的参数,如下载文件保存路径、搜索查询、关键词、排序方式、筛选关键词等。程序中使用了多次 retry 来保证程序的稳定性。
[3/13] 程序概述: get_paper_from_pdf.py
本程序文件为 Python 脚本文件,文件名为 get_paper_from_pdf.py,主要是通过调用 fitz 库和 PIL 库的方法,从 PDF 文件中解析出文章的各个部分的文本内容,包括标题、摘要、章节标题和正文等,并且对 PDF 文件中的图片进行提取和保存,并返回图片的路径和扩展名。
具体实现是定义了一个 Paper 类,通过传入 PDF 文件的路径初始化 Paper 对象,然后封装了一系列方法,如解析 PDF 文件的方法 parse_pdf(),获取所有章节名称的方法 get_chapter_names(),获取文章中的图片路径的方法 get_image_path()等。最后在 main()函数中调用了 Paper 类的 parse_pdf()方法,并将解析出的各个部分的文本内容和图片路径打印输出。
[4/13] 程序概述: app.py
该程序文件为一个基于 Flask 框架实现的 Web 应用程序,提供了四个功能模块:arxiv、 paper、 response 和 reviewer,分别对应搜索 Arxiv 上的论文、搜索并分析论文、处理论文审稿评论和查找论文审稿人四个功能。其中,每个功能模块定义了相应的路由函数,并使用 process_request 函数处理请求参数,并将请求参数作为参数调用相应的功能主函数,输出结果。此外,home 函数为应用的首页,提供了应用简介、各功能模块的描述以及该应用的 GitHub 项目地址等信息。最后,在程序结尾,代码根据命令行参数来启动应用程序。
[5/13] 程序概述: chat_arxiv.py
这个程序的文件名是 chat_arxiv.py。这个程序实现了一个论文下载器。在论文知识库 arXiv 上搜索论文,并下载相应的 PDF 文件。程序将会接收用户的查询字符串、关键词、搜索页数、文件格式等参数,为这些参数构建一个名为 ArxivParams 的元组。接着,程序使用提供的参数调用 arXiv API,获取查询到的论文列表。程序遍历每篇论文,并下载它们的 PDF 文件。程序接收到 PDF 后,使用 fitz 库打开它,提取出目录,正文和元数据等信息。在 PDF 中查找到第一张图片,并将它保存成 PNG 格式的文件。程序遍历文本,找到所有的章节名称和图片,并将它们保存成字典,并存储在 Paper 对象里。最后调用 Gitee API 将文件上传到 Gitee 仓库里。
[6/13] 程序概述: chat_response.py
该程序文件是一个 Python 脚本,文件名为"chat_response.py",主要功能是根据输入的评论文件路径,使用 OpenAI 的 Chat API 生成对应的回复文本,并将回复输出到指定格式的文件中。
具体包括以下功能:
定义了一个 Response 类,包括了一些属性和方法,用于初始化和生成回复文本。
定义了一个 chat_response_main 函数,用于启动 Response 类生成回复文本。
通过导入 argparse、configparser、datetime、json、os、re、time 等模块,实现了参数解析、文件读写、时间处理、字符串匹配等操作。
使用了 numpy、openai、tenacity、tiktok 等第三方库,实现了文本编码、OpenAI Chat API 调用、重试机制、加密解密等功能。
使用了正则表达式对文本进行匹配处理,提取关键信息后进行逻辑处理和字符串拼接,形成回复文本。
实现输出格式为 txt、markdown 等格式的回复文件。
总之,该程序用于将审稿意见进行回复,实现了自动化生成回复文本的功能,从而提高了工作效率。
[7/13] 程序概述: chat_reviewer.py
该程序文件是一个基于 OpenAI Chat API 的文献审稿系统,可以通过输入论文的标题、摘要、和各章节内容,生成相应的评审意见。主要包括以下内容:
1.导入所需要的模块和包
2.自定义 namedtuple 类 ReviewerParams,包括 4 个属性:paper_path(论文路径),file_format(生成文件格式),research_fields(研究领域),language(输出语言)
3.自定义类 Reviewer,包括以下方法:
init: 初始化方法,用于设置属性
validateTitle:用于校验论文的路径
review_by_chatgpt:根据传入的论文列表,获取关键部分,发送至 OpenAI Chat API,生成评审意见
stage_1:审稿的第一阶段,根据传入的论文,提供标题、摘要、可提取的章节等信息并将其发送至 OpenAI Chat API,以获取用户选择的章节
chat_review:审稿的第二阶段,将用户选定的章节和关键部分发送至 OpenAI Chat API,以生成审稿意见
export_to_markdown:将审稿意见保存为 markdown 格式的文件
4.chat_reviewer_main:用于初始化程序,读取命令行参数后初始化 Reviewer 类,通过传入的论文路径或文件名,调用 Reviewer 类的 review_by_chatgpt 方法生成评审意见
该程序通过 OpenAI Chat API 调用人工智能模型,为用户提供便利的文献评审服务,同时又充分考虑到了对用户信息的保护,具有一定的可靠性和安全性。
[8/13] 程序概述: google_scholar_spider.py
这个程序文件是一个可从 Google Scholar 网站上获取特定关键字相关论文信息的爬虫,主要用于研究学术领域的热点话题。该爬虫的主要功能包括:
从命令行参数中获取关键字、结果数、CSV 文件路径、排序方式等信息;
根据关键字和年份(可选)构建 Google Scholar 查询链接;
使用 requests 库向链接发送请求,并对结果进行处理,包括获取标题、作者、被引用次数等;
按照排序方式对结果进行排序,将结果保存为 CSV 文件,并可选择在结果中生成柱状图。
[9/13] 程序概述: deploy/Public/app.py
该程序文件是一个 Python 脚本,文件名为 app.py。该脚本包含了多个模块的导入和多个类和函数的定义。其中,一些重要的模块包括 numpy、os、re、datetime、arxiv、openai、base64、requests、argparse、configparser、fitz、io、PIL、gradio、markdown、json、tiktoken、concurrent。主要的类包括 Paper 和 Reader,辅助函数包括 parse_text、api_key_check、valid_apikey、get_chapter_names、get_title、get_paper_info、get_image_path 等。该程序还涉及到一些第三方 API 的调用,例如 Arxiv、OpenAI 等。该程序实现了一些功能,例如解析 PDF 文件,提取文本内容并按照章节组织成字典,获取 PDF 中每个页面的文本信息,根据字体大小识别每个章节名称等。该程序还可以检查有效的 API 密钥,生成一份有效的 API 密钥列表。
[10/13] 程序概述: deploy/Public/optimizeOpenAI.py
该程序文件名为 optimizeOpenAI.py,是一个官方 ChatGPT API 的简单包装器,主要实现了和 ChatGPT 模型的交互功能,包括对话、重置对话、获取对话摘要等,以及对于 API 调用时间、API key 的管理和流程控制。其中提供了两个主要的方法:ask()用于获取 model 的回答信息,conversation_summary()用于获取对话的摘要信息。
[11/13] 程序概述: deploy/Private/app.py
该程序实现了一个名为chatPaper
的应用,用户可以通过输入特定的关键词,将获取的论文进行自动摘要和筛选,并使用 OpenAI 进行 QA 问答,由机器智能生成答案。其中,程序分为若干个子功能,包括:将 PDF 中的第一张图另存为图片,获取 PDF 文件中每个页面的文本信息并将其按章节组织成字典返回,获取 PDF 文件的标题,获取 PDF 文件中的章节。程序引入了 numpy、os、re、datetime、arxiv、tenacity、base64、requests、argparse、configparser、PIL、gradio、fitz、io 和 optimizeOpenAI 等库函数。主入口为app.py
。
[12/13] 程序概述: deploy/Private/optimizeOpenAI.py
这是一个名为 optimizeOpenAI.py 的程序文件,是一个对官方 ChatGPT API 的简单包装器。该文件定义了一个名为chatPaper
的类,该类包含了用于与 ChatGPT 交互的各种方法。它使用 OpenAI API 完成交互,并在输入和输出之间维护存储对话的本地转换。它使用一个优先队列来存储 API 密钥,以确保 API 请求不会超过每个密钥的最大使用限制。在一个对话中,用户可以不断地提出问题并回答 ChatGPT 提供的管道中的问题。此外,该文件还包含用于重置对话、截断对话、计算并返回每个对话的当前令牌成本的函数,以及用于获取已注册的 API 密钥、检查 API 的可用性以及生成会话摘要的函数。
对程序的整体功能和构架做出概括。然后用一张 markdown 表格整理每个文件的功能(包括 get_paper.py, chat_arxiv_maomao.py, chat_paper.py, get_paper_from_pdf.py, app.py, chat_arxiv.py, chat_response.py, chat_reviewer.py, google_scholar_spider.py, deploy/Public/app.py, deploy/Public/optimizeOpenAI.py, deploy/Private/app.py, deploy/Private/optimizeOpenAI.py)。
整体功能和构架概括:ChatPaper 是一个文献管理工具,主要针对学术论文的查询、下载、管理和评审等方面进行了自动化处理和优化,主要功能包括:
论文的搜索和下载
论文的摘要和评审自动生成
论文的 PDF 文件解析和信息提取
学术文献信息的爬取和整合
学术论文开源代码的维护和管理
文件与功能对应表:
项目码源见文末
更多优质内容请关注公号:汀丶人工智能;会提供一些相关的资源和优质文章,免费获取阅读。
版权声明: 本文为 InfoQ 作者【汀丶人工智能】的原创文章。
原文链接:【http://xie.infoq.cn/article/13e0a4b250077d0b06529d410】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论