
1. 为什么我要做这个每日ArXiv CV论文分享从2023年下半年开始我养成了一个习惯每天早上到工位的第一件事不是打开邮箱而是刷一遍ArXiv上cs.CV板块的新论文。这个习惯坚持到现在最大的感受就是——信息过载比信息匮乏更可怕。每天cs.CV板块新增的论文数量经常在200到400篇之间浮动如果算上交叉列表里的cs.LG、eess.IV、cs.MM一天要面对的新内容轻松超过500篇。你不可能全部读完但你又怕漏掉真正重要的那几篇。这个每日更新的分享项目本质上就是解决这个矛盾用一套可复现的筛选流程把每天几百篇论文压缩成一份10到20篇的精读清单覆盖视觉基础模型、Transformer架构演进、多模态融合这几个核心方向。它适合三类人一是做CV方向的研究生和算法工程师需要跟踪前沿但没时间全量浏览二是刚入门想了解领域脉络的初学者需要有人帮忙做初筛三是做多模态产品落地的开发者关心哪些新方法能直接迁移到业务里。我踩过的坑不少。最开始我是按ArXiv默认的new submissions列表从头翻到尾结果每天花一个多小时还经常被标题党论文浪费时间。后来改成按关键词订阅RSS又发现关键词设太窄会漏、设太宽会炸。再后来尝试用脚本抓取本地排序才慢慢摸索出一套相对稳定的流程。这篇文章就把这套流程完整拆开包括筛选逻辑、工具选型、参数设置、常见故障排查以及我积累下来的一些反直觉经验。需要先说明一点ArXiv本身是一个预印本平台论文没有经过同行评审质量参差不齐是常态。所以这套流程的核心不是找到最好的论文而是用最低成本排除明显不值得读的把注意力留给值得深挖的。这个定位很重要它决定了后面所有筛选策略的取舍。2. 整体筛选思路与方案选型2.1 从全量浏览到分层过滤的思路转变我最初的做法是线性的打开列表逐条看标题感兴趣就点进去看摘要。这个方式的问题在于你的注意力是均匀分配的而实际上论文的价值分布是极度不均匀的——可能一天里真正值得读的就三五篇但你为了找到它们必须把几百个标题都过一遍。时间一长注意力疲劳会导致你开始漏看明明标题里有vision foundation model这种关键词眼睛却滑过去了。后来我改成分层过滤第一层用机器做粗筛把明显不相关的砍掉第二层用规则做排序把可能重要的往前排第三层才是人工精读。这样人的注意力只花在第三层前两层交给脚本。这个思路的转变是整套流程的基石。分层过滤的关键在于每一层的召回率和精确率要平衡。第一层粗筛要保证召回率——宁可多留一些也不能把好论文误杀第二层排序要保证精确率——把真正可能重要的排到前面。如果第一层就设很严的规则很容易漏掉那些标题写得比较朴素但内容扎实的论文。2.2 为什么选ArXiv API而不是网页抓取工具选型上我试过三种方案直接爬网页、用RSS订阅、调ArXiv官方API。最后稳定用的是ArXiv API原因有几个。网页抓取最直接但问题也最多。ArXiv的页面结构偶尔会调整你的解析规则就得跟着改而且高频抓取容易被限流我试过一天抓十几次后来就收到过429响应。RSS订阅相对稳定但它的更新有延迟而且分类粒度不够细你没法按cs.CV 特定关键词这种组合来订阅。ArXiv API则是官方提供的结构化接口返回的是Atom格式的XML字段清晰支持按分类、关键词、时间范围组合查询还能控制返回数量非常适合做自动化。API的基本调用形式是这样的# 查询cs.CV分类下最近提交的论文按提交时间倒序最多返回100条 curl http://export.arxiv.org/api/query?search_querycat:cs.CVsortBysubmittedDatesortOrderdescendingmax_results100这里有个细节要注意max_results单次最多建议不超过2000但实际用的时候我一般设100到200因为再多你也不会全看而且响应会变慢。另外API有访问频率限制官方建议是每3秒不超过1次请求所以如果你要抓多个分类中间要加延时。2.3 关键词体系的搭建逻辑关键词是整个筛选流程的灵魂。我一开始的关键词表很随意想到什么加什么结果就是要么漏要么炸。后来我把它分成三层来管理核心层是绝对不能漏的方向词比如vision transformer、multimodal、foundation model、vision-language。这些词一旦出现在标题或摘要里论文必须进入候选池。扩展层是相关但没那么核心的词比如swin、clip、diffusion、detection、segmentation。这些词单独出现不一定重要但和核心层词组合出现时权重会提高。排除层是我明确不关心的方向比如medical image除非同时出现foundation model、remote sensing除非涉及多模态融合、autonomous driving除非是端到端多模态方案。排除层的作用是降低噪音但设置要谨慎因为有些跨领域的工作恰恰是最有启发的。关键词匹配我建议同时匹配标题和摘要但标题的权重更高。一个简单的做法是标题命中核心词得3分摘要命中得1分标题命中扩展词得1分摘要命中得0.3分最后按总分排序。这个权重不是拍脑袋来的是我对比了几周的人工筛选结果后调出来的——标题里出现核心词的论文我最终精读的概率大概是摘要里出现的两倍多。3. 核心环节的实操细节与参数设置3.1 API查询的完整参数拆解ArXiv API的查询参数看起来简单但组合起来有不少门道。我把常用的参数和我的设置列一下参数作用我的设置说明search_query查询条件组合表达式支持AND/OR/ANDNOTsortBy排序字段submittedDate按提交时间sortOrder排序方向descending最新的在前max_results返回数量150单次抓取上限start起始偏移0分页用search_query的语法值得单独说。它支持字段前缀比如ti:表示标题abs:表示摘要cat:表示分类au:表示作者。组合的时候用AND、OR、ANDNOT连接。举个例子我想找cs.CV分类下标题或摘要里包含vision transformer或multimodal的论文search_querycat:cs.CVAND(ti:%22visiontransformer%22ORabs:%22visiontransformer%22ORti:%22multimodal%22ORabs:%22multimodal%22)注意引号要URL编码成%22空格编码成。这个表达式看起来复杂但拆开看就是分类是cs.CV并且标题或摘要含vision transformer或者标题或摘要含multimodal。我实测下来单次查询如果条件太宽返回的150条里可能只有三四十条是真正相关的。所以我的做法是分多次查询先查核心词组合再查扩展词组合最后合并去重。这样虽然请求次数多了但每次的结果更聚焦后续排序也更准。3.2 去重与增量更新的处理每天抓取都会遇到重复问题同一篇论文可能昨天已经抓过今天又出现在列表里因为ArXiv的提交时间有更新机制。如果不做去重你的候选池会越来越臃肿。我的做法是维护一个本地已处理ID库用论文的ArXiv ID比如2409.12345作为唯一键。每次抓取后先过滤掉ID库里已有的剩下的才是新论文。ID库用简单的文本文件或SQLite都行我用的SQLite因为查询快而且可以顺便记录每篇论文的处理状态已读、已跳过、已精读。增量更新还有个细节ArXiv的论文有提交时间和更新时间两个字段。有些论文是先提交后更新更新时间变了但ID没变。如果你只按提交时间去重会漏掉那些老论文新版本的情况。我的处理是ID相同但更新时间变了的标记为有更新单独列出来但不重复计入新论文数。3.3 排序算法的具体实现排序是决定你每天先看哪几篇的关键。我用的是一个加权评分模型核心逻辑是def score_paper(paper, core_kw, ext_kw, exclude_kw): score 0 title paper[title].lower() abstract paper[abstract].lower() # 核心词标题权重3摘要权重1 for kw in core_kw: if kw in title: score 3 if kw in abstract: score 1 # 扩展词标题权重1摘要权重0.3 for kw in ext_kw: if kw in title: score 1 if kw in abstract: score 0.3 # 排除词命中直接大幅降权 for kw in exclude_kw: if kw in title: score - 5 if kw in abstract: score - 2 # 新鲜度加成当天提交的加2分 if paper[is_today]: score 2 return score这个模型很简单但效果比我试过的复杂模型比如用TF-IDF或embedding相似度更稳定。原因是关键词匹配虽然粗糙但可解释性强你能清楚知道为什么某篇论文排前面。而embedding相似度虽然理论上更智能但一旦排序结果不符合预期你很难调试——你不知道是embedding模型的问题还是阈值设得不对。新鲜度加成是我后来加的。因为ArXiv上有些论文是几天前提交的但因为更新或者分类调整今天才出现在列表里。这类论文不一定不重要但优先级确实应该低于当天的新论文。加2分是个经验值加太多会导致老论文永远排不上来加太少又没效果。3.4 每日清单的生成与呈现排序完成后我会生成一份Markdown格式的清单每篇论文包含标题、作者、ArXiv链接、一句话摘要从abstract里截取前两句、评分、命中的关键词。这样做的目的是让你在点进去之前就能快速判断这篇论文值不值得读。清单的呈现我建议按评分分三档必读评分前5、选读评分6到15、备查其余。必读的我会在清单里加粗选读的正常显示备查的折叠起来。这样你每天打开清单先看必读的5篇有时间再看选读没时间就跳过备查。这个分层让每天花多少时间变得可控。4. 常见问题与排查技巧实录4.1 API返回空结果或结果异常这是最常见的问题。可能的原因有几个一是查询表达式语法错误比如括号不匹配、引号没编码二是分类名写错cs.CV是对的但有人会写成cs.cv或CS.CVArXiv是大小写敏感的三是时间范围设得太窄比如你查今天提交的但ArXiv的时区是UTC你本地是东八区可能你早上查的时候UTC还是前一天。排查方法先用最简单的查询测试比如cat:cs.CV不带任何其他条件看能不能返回结果。如果能再逐步加条件定位是哪一步出的问题。时区问题我建议统一用UTC来算或者干脆查最近48小时避免边界情况。4.2 关键词命中但论文不相关这是关键词筛选的固有缺陷。比如multimodal这个词在CV领域通常指视觉语言但在有些论文里可能指多模态医学影像跟你想看的完全不是一回事。再比如foundation model有些论文只是蹭热度实际做的还是小模型。我的应对策略是加负向关键词。比如你发现medical、clinical、patient这些词频繁出现在你不想要的论文里就把它们加到排除层。但要注意排除词不能设太多否则会误杀跨领域的好工作。我的经验是排除词控制在10个以内而且只排除你确定不关心的方向。另一个技巧是看作者和机构。如果一篇论文的作者来自你熟悉的、经常发高质量工作的组那即使标题看起来一般也值得点进去看看。这个信息API里也有可以在排序时给个小的加成。4.3 抓取频率过高被限流ArXiv API虽然没有严格的配额但高频请求会触发限流表现为返回503或429。我踩过一次坑为了测试我写了个循环连续请求了20次结果后面半小时都返回错误。解决办法很简单加延时。每次请求之间sleep 3秒这是官方建议的最小间隔。如果你要抓多个分类可以把它们合并到一个查询里用OR连接这样一次请求就能覆盖比多次请求更稳妥。另外抓取时间建议放在凌晨或清晨这个时段ArXiv的负载相对低响应更快。4.4 清单越来越长失去筛选意义这个问题我遇到过。一开始每天清单有50多篇后来发现根本看不完清单就变成了摆设。根本原因是筛选阈值太松。我的调整是把必读档控制在5篇以内选读档控制在10篇以内超出的全部归入备查。这样即使某天论文特别多你的核心阅读量也是稳定的。还有一个心态问题你不需要读完所有论文。ArXiv上的论文99%你都不需要读。接受这一点筛选才有意义。我现在的标准是必读的5篇里能有2篇让我有收获这一天就没白过。4.5 常见问题速查表问题现象可能原因排查方法解决措施API返回空表达式语法错误用最简查询测试检查括号、引号编码结果不相关关键词太宽泛看命中词分布加负向关键词被限流请求频率过高看HTTP状态码加3秒延时清单过长阈值太松统计每日数量收紧必读/选读档漏掉重要论文关键词覆盖不足对比人工筛选补充核心词重复论文多未做去重检查ID库维护本地ID库5. 我踩过的坑和几条实在经验5.1 不要迷信热点关键词有段时间我特别关注diffusion相关的论文因为那阵子diffusion model很火。结果就是我的清单里塞满了各种diffusion的变体很多只是在小数据集上刷了个点实际价值有限。后来我意识到热点关键词会带来大量低质量跟风工作你需要用更细的规则去过滤比如看论文有没有开源代码、有没有在主流benchmark上评测、作者是不是这个方向的活跃研究者。5.2 摘要的前两句往往就够了我一开始每篇论文都点进去看全文效率极低。后来发现摘要的前两句通常就说明了这篇论文做了什么、解决了什么问题。如果前两句没让你产生兴趣后面大概率也不会有。所以我的精读流程是先看清单里的一句话摘要感兴趣的点进去看完整摘要还感兴趣才下载PDF。这个漏斗能帮你省下大量时间。5.3 周末的论文值得单独处理ArXiv的提交量在工作日和周末差异很大。周一到周四通常最多周五开始减少周末最少。但周末提交的论文里有时候会有一些憋大招的工作——作者可能花了一周时间打磨周末才提交。所以我的做法是周末的清单单独存一份周一早上花20分钟快速过一遍往往能捡到漏。5.4 建立自己的论文库比每天追新更重要追新是必要的但如果你只是每天看清单看完就忘那价值有限。我后来建了一个本地的论文库把精读过的论文按主题分类存起来每篇写两三句笔记核心方法是什么、和之前的工作比有什么改进、能不能用到我的项目里。这个库积累到几百篇之后你会发现很多新论文其实是在解决你早就见过的问题只是换了个说法。这时候你的判断力就上来了。5.5 工具是辅助判断力才是核心最后说个心态上的经验。这套流程再自动化也只是帮你做初筛。真正决定你能否从论文里获得价值的是你自己的判断力——你能不能看出一个方法的核心创新点、能不能判断它是否适合你的场景、能不能把它和已有的知识体系连接起来。工具能帮你省时间但省下来的时间要花在提升判断力上而不是刷更多论文。我见过一些人每天读几十篇摘要但问他某篇论文到底做了什么说不清楚。这就是本末倒置了。这套每日更新的流程我从最初的纯手工到半自动再到现在的相对稳定前后调整了大概半年。现在每天早上花15到20分钟就能完成从抓取到精读清单的全过程。如果你也在做类似的事情建议先从最简单的API查询开始跑通了再逐步加排序和去重不要一上来就追求完美。流程是迭代出来的不是设计出来的。