该存储库为 Arxiv 实现了一个非常简单的日常扫描仪,它使用 GPT4 和作者匹配来查找您可能感兴趣的论文。它将每天通过 github actions 运行,并可以通过机器人将此信息发布到 slack 或只是将其呈现在静态 github-pages 网站中。
可以在此处看到在cs.CL
上运行的日报的简单演示
作为成本估算,2024 年 2 月 7 日在所有cs.CL
上运行此程序的成本为 0.07 美元
这是运行扫描仪所需的最少步骤。强烈建议您阅读全文以决定您要运行什么。
config/paper_topics.template.txt
复制到config/paper_topics.txt
并填写您想要关注的论文类型config/authors.template.txt
复制到config/authors.txt
并列出您真正想要关注的作者。作者后面的数字很重要。它们是语义学者作者 ID,您可以通过在语义学者上查找作者并获取 URL 末尾的数字来找到它们。config/config.ini
中设置所需的 ArXiv 类别。OAI_KEY
) 设置为“github 秘密”此时,您的机器人应该每天运行并发布静态网站。您可以通过手动运行 github 操作工作流程来测试这一点。
可选但强烈推荐:
S2_KEY
) 作为 github 秘密。不然作者搜索步骤会很慢SLACK_KEY
作为 github 密钥SLACK_CHANNEL_ID
。configs/config.ini
来调整过滤方式。世界标准时间每天下午 1 点,机器人将运行并发布到 slack 并发布 github 页面网站(有关详细信息,请参阅publish_md 和 cron_runs 操作)。
步骤大体与上面相同,但是你必须通过requirements.txt
设置环境
您必须设置环境变量OAI_KEY
、 SLACK_KEY
、 SLACK_CHANNEL_ID
,而不是通过 github 密钥传递凭据。
要运行所有内容,只需调用main.py
其他注意事项:您可能还不想推送到 slack,在这种情况下,请在config/config.ini
的dump_json
、 dump_md
和push_to_slack
字段中设置所需的输出端点(json、markdown、slack)。
如果语义学者 API 超时或速度缓慢,您应该获取 S2 api 密钥并将其设置为环境变量中的S2_KEY
。 (由于github操作的限制,这仅在代码在本地运行时才有帮助)
使其独立运行:整个过程几乎不需要计算,因此您可以从 AWS 租用最便宜的 VM,将此存储库放入其中,安装requirements.txt
,适当设置环境变量并添加以下 crontab
0 13 * * * python ~/arxiv_scanner/main.py
该 crontab 将在世界标准时间 (UTC) 下午 1 点(太平洋时间下午 6 点)运行该脚本。
paper_topics.txt
提示paper_topics.txt
文件用于生成 GPT 提示。这是您想要关注的主题列表。一组示例可能类似于
1. New methodological improvements to RLHF or instruction-following which are specific fine-tuning steps that are taken to make language models better at following user instructions across a range of tasks.
- Relevant: papers that discuss specific methods like RLHF, or instruction-tuning datasets, improving these methods, or analyzing them.
- Not relevant: papers about adaptation to some task. Simply following instructions or inputs are not sufficient.
2. Shows new powerful test set contamination or membership inference methods for language models. Test set contamination is the phenomenon where a language model observes a benchmark dataset during pretraining.
- Relevant: test statistics that can detect contamination of benchmarks in language models. statistics that can provide guarantees are more interesting. membership inference methods that are general enough to apply to language models are also relevant.
- Not relevant: any papers that do not consider language models, or that do not consider test set contamination.
3. Shows a significant advance in the performance of diffusion language models.
- Relevant: papers that study language models that are also diffusion models. Continuous diffusions are even more relevant, while discrete diffusions are less so.
- Not relevant: papers about image diffusions like DALL-E or Stable Diffusion, or papers that do not explicitly mention language models or applications to text.
这只是一个标准提示,但非常具体会有所帮助,特别是对于“扩散语言模型”或“指令跟随”之类的事情,LM 可能会混淆图像扩散是否相关,或者是否更好地完成某些任务足以改善指令遵循。
您可能还想关注一些一般兴趣领域,例如
In suggesting papers to your friend, remember that he enjoys papers on statistical machine learning, and generative modeling in natural language processing.
Your friend also likes learning about surprising empirical results in language models, as well as clever statistical tricks.
He does not want to read papers that are about primarily applications of methods to specific domains.
该脚本通过 RSS 源获取特定日期的一组候选 ArXiv 论文。为了避免重复公布论文,它只会抓取最后一天内的 RSS 提要。为了避免丢失文件,您需要每天运行此操作。它过滤掉任何UPDATED
论文并仅宣布新的论文。
过滤逻辑非常简单。我们首先检查作者是否匹配。
authors.txt
中的某个人匹配,它将进入候选集中,默认分数为author_match_score
。然后我们检查 GPT 评估的相关性。我们分两步进行。
config.ini
中 h-index 高于hcutoff
的任何没有作者的论文。这是为了降低成本。config.ini
中model
指定的 GPT 模型进行评估。您应该仅使用 GPT3.5 进行调试。它不能很好地达到这个目的!此步骤使用configs/
中定义的以下提示设置您是一名有用的论文阅读助手,其工作是阅读 ArXiv 的每日帖子并识别一些可能与您的朋友相关的论文。下面最多有 5 篇论文。你的工作是找到符合以下条件的论文:
- 标准1
- 标准2
[文件]
以 JSONL 格式编写响应,每行包含 {ARXIVID, COMMENT, RELEVANCE, NOVELTY},每篇论文一个。 ARXIVID 应该是 ArXiv ID。评论应指出是否存在与论文非常匹配的标准。如果是这样,应该按编号提及(无需提及不匹配的标准)。这些匹配不应基于“语言建模”或“进步”等通用术语,而应具体参考某个标准。相关性应该是从 1 到 10 的相关性分数,其中 10 必须与具有近同义词关键字匹配的精确、具体标准以及因从事该主题而闻名的作者直接相关,1 与任何标准无关,并且与您朋友的一般兴趣领域,2-3 是与一般兴趣领域相关但不是特定标准的论文,5 是与特定标准直接匹配的论文。新颖性应该是从 1 到 10 的分数,其中 10 是一项突破性的、通用的发现,将改变整个领域,1 是改进问题的一个方面的工作,或者是在一个非常具体的领域的应用。仔细阅读摘要以确定这一点,并假设作者声称的新颖性不可信。
config/papers_topics.txt
中的主题)和新颖性(等级 1-10)进行评分config.ini
中的相关性和新颖性截止值,则会被过滤最后,所有论文均按其author_match_score
的最大值以及GPT评级的相关性和新颖性分数的总和进行排序(相关性和新颖性分数只有在高于您在配置中设置的截止阈值时才会显示在最终输出中文件)。然后,论文被渲染并推送到它们的端点(文本文件或 Slack)。
此存储库使用 ruff- ruff check .
和ruff format .
请通过运行pre-commit install
来安装预提交挂钩
filter_papers.py
代码也可以作为独立脚本运行。这将在in/debug_papers.json
中获取一批论文,运行您拥有的任何配置和提示,并将输出返回到out/filter_paper_test.debug.json
。如果您发现机器人出错,您可以在out/gpt_paper_batches.debug.json
中找到关联的批次,并将其复制到相关的debug_papers
文件中。
这使您可以为过滤器建立基准并查看另一侧的结果。
此存储库和代码最初由 Tatsunori Hashimoto 构建,并根据 Apache 2.0 许可证获得许可。感谢Chenglei Si 对GPT 过滤器进行测试和基准测试。