资讯动态

AI学术速递系统搭建:从信息过载到精准筛选的工程实践

发布时间:2026/10/14 12:38:36 来源:尧图企业网站定制
1. 从“学术速递”这个动作说起为什么信息筛选比信息获取更难每天早上刷一遍学术平台的新论文列表这件事我坚持了快三年。最开始是手动刷后来用订阅工具再后来自己写脚本抓取。折腾一圈下来发现真正的痛点从来不是“拿不到论文”而是“拿到太多论文”。一个主流预印本平台单日新增投稿量在几百到上千篇之间浮动就算只盯着自己关心的三五个方向一天也能刷出几十条更新。这个量级下逐条点开看摘要是不现实的但完全不看又怕漏掉真正重要的东西。“人工智能学术速递[2.25]”这个标题本质上描述的就是一个信息筛选与分发的动作——把某一天2月25日人工智能领域的新论文、新动态经过一轮筛选和整理以速递的形式呈现出来。它解决的核心问题是在信息过载的环境下如何用最低的时间成本获取最高价值密度的学术动态。适合谁来参考我觉得三类人最需要一是刚进入AI方向的研究生需要快速建立对领域动态的感知二是工业界做算法落地的工程师需要跟踪与自己业务相关的最新方法三是跨方向的研究者想看看别的子领域在发生什么但没时间深挖。这篇博文我不打算只讲“怎么订阅”而是把整个速递系统的搭建逻辑拆开——从信息源的选取、筛选规则的制定、摘要的生成方式到最终呈现格式的设计。这套东西我前后迭代了四五个版本踩过的坑不少有些看起来合理的方案实际跑起来完全不是那么回事。下面按模块展开。2. 速递系统的整体设计思路与方案选型2.1 为什么不做“全量推送”而做“精选速递”最开始我尝试过全量推送把某个方向当天所有新论文的标题和摘要直接汇总发出来。结果自己都不想看——信息密度太低大量论文标题一看就跟自己的研究无关。后来改成按关键词过滤又出现另一个问题关键词匹配太死很多相关但用词不同的论文被漏掉。比如我关注“扩散模型”但有些论文写的是“denoising diffusion probabilistic models”有些写的是“score-based generative models”纯关键词匹配覆盖不全。最终确定的方案是“粗筛精排”两层结构。粗筛用较宽的关键词集合和分类标签做召回保证不漏精排用轻量级的相关性打分做排序保证靠前的内容质量。这个思路跟推荐系统里的召回-排序架构是一样的只不过规模小得多单机跑就够。注意粗筛阶段宁可多召回也不要漏精排阶段再收紧。很多人反过来做粗筛用很严的条件结果精排没有素材可用。2.2 信息源的选取不只盯着一个平台学术速递的信息源不能只依赖单一平台。我的做法是至少覆盖三类来源预印本平台更新最快但未经同行评审、顶会顶刊的录用列表质量有保证但有滞后、以及领域内几个高质量实验室的官方发布渠道往往有代码和详细说明。预印本平台的优势是时效性一篇论文从投稿到上线可能就一两天适合追踪最新方法。缺点是质量参差不齐需要自己有判断力。顶会顶刊的录用列表通常滞后三到六个月但经过评审筛选可信度更高。实验室官方渠道的好处是经常附带代码链接和实验细节对复现特别有帮助。三类来源的权重我一般这样分配预印本占60%会议期刊占25%实验室渠道占15%。这个比例不是固定的赶在顶会截稿前后预印本的比例会更高顶会放榜之后会议期刊的比例会临时上调。2.3 筛选规则的制定关键词集合的动态维护关键词集合不是一成不变的。我维护了一个主关键词列表和一个辅助关键词列表。主关键词是核心研究方向比如“目标检测”“语义分割”“多模态对齐”这类。辅助关键词是方法层面的比如“注意力机制”“对比学习”“知识蒸馏”。两者取交集或并集根据当天召回量动态调整。具体规则是这样的如果当天召回论文少于20篇就用主关键词的并集放宽条件如果在20到80篇之间用主关键词交集辅助关键词如果超过80篇只保留主关键词交集并且加上时间衰减因子——越新的论文权重越高。这个动态调整的逻辑是手动设定的阈值跑了一段时间发现比固定规则好用很多。因为学术动态有明显的周期性截稿前投稿量暴增放榜后讨论量暴增固定规则要么漏要么溢。2.4 呈现格式的设计让人三秒内决定要不要点开速递的呈现格式直接决定了阅读效率。我试过纯标题列表、标题加摘要、标题加一句话总结三种形式。纯标题列表信息量太少很多标题看不出所以然标题加摘要太长刷一遍要十几分钟标题加一句话总结是折中方案一句话控制在30字以内说清楚“做了什么”和“为什么值得看”。一句话总结的生成方式早期是人工写后来尝试用抽取式摘要自动生成效果不太理想——抽取出来的句子经常缺少上下文。现在用的是“模板关键信息填充”的方式从摘要里提取方法名称、任务类型、核心贡献三个要素套进固定句式。比如“提出XX方法用于XX任务在XX数据集上取得XX效果”。这种方式生成的总结虽然不够灵活但胜在稳定不会出现语义不通的情况。3. 核心细节解析与实操要点3.1 信息抓取接口调用与页面解析的取舍抓取预印本平台的数据有两条路走官方接口或者解析页面。官方接口的好处是数据结构化、稳定、有明确的字段定义缺点是更新有延迟有时候论文上线几个小时了接口还没同步。页面解析的好处是实时性强论文一上线就能抓到缺点是页面结构一变解析就失效维护成本高。我的做法是两者结合日常用接口做批量抓取每隔几小时跑一次对时效性要求高的方向额外加一个页面解析的通道做补充。接口返回的数据里标题、作者、摘要、分类标签这些字段都有直接入库就行。页面解析主要抓接口里没有的字段比如某些平台会显示论文的讨论热度或者引用情况。代码层面抓取部分用Python写核心就是requests加解析库。接口调用注意控制频率一般平台都有速率限制超了会被临时封禁。我的经验是每次请求间隔至少1秒批量抓取时用队列控制并发数不要超过3个并发。import time import requests from queue import Queue from threading import Thread def fetch_paper(paper_id, result_queue): url fhttps://example-api.org/paper/{paper_id} try: resp requests.get(url, timeout10) if resp.status_code 200: result_queue.put(resp.json()) except Exception as e: print(ffetch failed: {paper_id}, {e}) time.sleep(1) # 控制频率 def batch_fetch(paper_ids): q Queue() threads [] for pid in paper_ids: t Thread(targetfetch_paper, args(pid, q)) t.start() threads.append(t) if len(threads) 3: # 最多3个并发 for t in threads: t.join() threads [] for t in threads: t.join() results [] while not q.empty(): results.append(q.get()) return results提示抓取频率控制是长期稳定运行的关键。我见过有人为了追速度把并发开到几十结果IP被限了整整一周得不偿失。3.2 相关性打分轻量级方案比复杂模型更实用精排阶段需要一个相关性打分函数。我试过用预训练语言模型做语义相似度计算效果确实好但速度太慢——单篇论文打分要几百毫秒一天几百篇就是几分钟加上模型加载和内存占用在个人设备上跑不划算。后来换成TF-IDF加余弦相似度的方案速度快了两个数量级效果差距在可接受范围内。具体做法是把用户的研究兴趣描述比如一段话说明自己在做什么方向和论文摘要分别向量化计算余弦相似度。TF-IDF的优点是无需训练、可解释性强、对关键词敏感缺点是无法捕捉语义层面的相似。为了弥补这个不足我在关键词层面做了扩展——维护一个同义词表把“扩散模型”和“去噪扩散概率模型”这类同义表达映射到同一个词条上。打分公式大概是这样的最终得分 0.6 × TF-IDF相似度 0.3 × 关键词命中率 0.1 × 时效性因子。时效性因子按论文上线时间算24小时内为1.0一周内线性衰减到0.5超过一周的固定0.3。这个权重分配是试出来的不同方向可以微调。3.3 一句话总结的生成模板法的稳定性优势前面提到一句话总结用模板法生成。具体实现是从摘要中抽取三个要素方法名称、任务类型、核心结果。方法名称的抽取靠模式匹配常见模式有“we propose”“we present”“this paper introduces”后面跟的名词短语。任务类型从论文的分类标签和摘要中的任务关键词提取。核心结果从摘要中的数值描述提取比如“achieves XX% on YY dataset”。模板句式我准备了五六个变体根据要素完整度选择。三个要素都齐的用完整句式缺一个的用简化句式缺两个的就只保留标题信息。这样做的目的是保证每条总结都有实际内容不会出现“本文提出了一种新方法”这种废话。实测下来模板法的准确率大概在85%左右主要错误出现在方法名称抽取上——有些论文的摘要写法比较特殊模式匹配抓不到。遇到这种情况就回退到用标题做总结虽然信息量少一些但不会出错。3.4 去重与关联同一工作的不同版本要合并预印本平台上经常出现同一篇论文的多个版本或者同一工作被不同作者分别上传的情况。如果不做去重速递里会出现重复条目影响阅读体验。去重的逻辑是标题相似度超过90%且作者列表有重叠的判定为同一工作只保留最新版本。还有一种情况是关联——某篇论文是对之前工作的改进或扩展。这种不做合并但在速递里加一个标记提示读者这篇论文与之前某篇有关联。关联的判定靠引用关系和标题相似度阈值设得比去重低一些大概70%左右。4. 实操过程与核心环节实现4.1 环境准备与依赖安装整套系统在个人电脑上就能跑不需要GPU。操作系统不限Linux、macOS、Windows都行。Python版本建议3.8以上主要依赖以下几个库pip install requests beautifulsoup4 scikit-learn numpy pandas schedulerequests负责网络请求beautifulsoup4做页面解析scikit-learn提供TF-IDF和余弦相似度的实现numpy做数值计算pandas做数据整理schedule做定时任务。这些都是成熟库安装不会有什么问题。数据库方面我用的是SQLite单文件、零配置、够用。数据量大了之后可以换PostgreSQL但个人使用场景下SQLite完全撑得住。建表语句大概是这样CREATE TABLE papers ( id TEXT PRIMARY KEY, title TEXT, abstract TEXT, authors TEXT, categories TEXT, published_date TEXT, url TEXT, summary TEXT, relevance_score REAL, fetched_at TEXT );4.2 抓取任务的定时调度抓取任务用schedule库做定时每天早上6点、中午12点、晚上6点各跑一次。为什么选这三个时间点因为预印本平台的更新高峰通常在凌晨和上午早上6点抓能覆盖 overnight 的更新中午12点补充上午的新增晚上6点做当天最后一次同步。import schedule import time def daily_job(): paper_ids get_new_paper_ids() results batch_fetch(paper_ids) save_to_db(results) generate_digest() schedule.every().day.at(06:00).do(daily_job) schedule.every().day.at(12:00).do(daily_job) schedule.every().day.at(18:00).do(daily_job) while True: schedule.run_pending() time.sleep(60)这个调度逻辑很简单但有个细节要注意如果某次抓取失败了下一次跑的时候要能补上之前漏掉的数据。我的做法是记录每次抓取的起始和结束时间下次抓取时从上次结束时间开始拉取保证不漏。4.3 相关性打分的参数调优TF-IDF的向量化参数有几个关键设置。max_features控制词汇表大小设太大容易过拟合设太小会丢失信息我一般设在5000到10000之间。ngram_range设成(1,2)也就是同时考虑单个词和双词组合这样能捕捉到“目标检测”这类固定搭配。stop_words用英文停用词表去掉the、a、of这类无意义词。余弦相似度的计算没什么参数可调但用户兴趣描述的写法很关键。我的经验是兴趣描述不要写得太短也不要写得太长。太短比如“计算机视觉”匹配范围太宽太长比如一整段论文摘要匹配范围太窄。比较合适的长度是两三句话说清楚方向、方法和关注点。from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.metrics.pairwise import cosine_similarity def compute_relevance(user_profile, papers): corpus [user_profile] [p[abstract] for p in papers] vectorizer TfidfVectorizer( max_features8000, ngram_range(1, 2), stop_wordsenglish ) tfidf_matrix vectorizer.fit_transform(corpus) user_vec tfidf_matrix[0] paper_vecs tfidf_matrix[1:] scores cosine_similarity(user_vec, paper_vecs)[0] return scores4.4 速递内容的组装与输出最后一步是把筛选和排序后的论文组装成速递内容。输出格式我用的是Markdown方便在各种平台上阅读和转发。每条论文包含标题带链接、作者只列前三位后面加et al.、一句话总结、相关性评分用星级表示最高五星。组装逻辑不复杂但有个细节值得说排序方式。我试过按相关性排、按时间排、按综合分排。最后选的是综合分排序但把时间因素单独标出来——如果一篇论文是24小时内上线的在标题前面加一个“新”字标记。这样读者既能按相关性浏览又不会错过最新内容。def format_digest(papers): lines [] for p in papers: star ★ * int(p[relevance_score] * 5) new_flag [新] if is_recent(p[published_date]) else line f- {new_flag}**{p[title]}** ({star})\n line f {p[summary]}\n line f 作者{, .join(p[authors][:3])}\n lines.append(line) return \n.join(lines)5. 常见问题与排查技巧实录5.1 抓取失败从状态码到网络层的逐层排查抓取失败是最常见的问题表现是请求返回非200状态码或者超时。排查顺序是这样的先看状态码403通常是频率超限404是论文ID不存在500是服务端问题。403的话降低频率等一段时间再试404直接跳过500可以重试两三次。如果状态码正常但拿不到数据检查返回内容的格式。有时候接口会返回一个空列表或者错误信息但状态码还是200。这种情况需要解析返回体里的错误字段。再往下就是网络层的问题比如DNS解析失败、连接超时这些通常跟本地网络环境有关换个时间再试一般能解决。注意不要一遇到失败就疯狂重试。我见过有人写了个无限重试的循环结果把账号搞进了临时黑名单。合理的做法是失败后等待指数级增长的时间再重试最多重试三次。5.2 相关性打分不准从关键词表和兴趣描述两头找原因打分不准的表现是明显相关的论文得分低不相关的论文得分高。原因通常出在两头。一头是关键词表覆盖不全比如用户关注“三维重建”但关键词表里只有“3D reconstruction”没有“structure from motion”和“multi-view stereo”这些同义表达。另一头是兴趣描述写得太模糊比如“我对AI感兴趣”这种描述跟任何论文的相似度都差不多区分度为零。解决办法关键词表定期review从漏掉的论文里反向补充新词兴趣描述改成具体的任务加方法组合比如“关注基于Transformer的医学图像分割特别是小样本场景下的方法”。5.3 一句话总结出现语义错误回退机制很重要模板法生成的总结偶尔会出现语义错误比如把方法名称和任务类型搞混或者数值提取错误。这种情况没法完全避免但可以加回退机制如果生成的总结里包含明显的异常模式比如方法名超过20个字、数值超出合理范围就自动回退到用标题做总结。另外总结生成后可以加一个简单的人工抽检环节。我一般每天抽5条看一眼发现错误就调整模板或抽取规则。这个习惯坚持下来总结的准确率会逐步提升。5.4 速递内容太长分层呈现比一刀切更好当召回论文数量多的时候速递内容会变得很长刷一遍要很久。我的解决办法是分层呈现把相关性最高的10篇放在最前面用完整格式标题总结作者10到30名的用简化格式标题一句话30名之后的只列标题。这样读者可以先看最重要的有兴趣再往下翻。分层阈值可以根据个人习惯调整。我试过5/20/50和10/30/100两种分法最后选了后者因为10篇精选基本能覆盖当天最重要的内容30篇简化格式也不会太占篇幅。5.5 常见问题速查表问题现象可能原因排查方法解决措施抓取返回403请求频率超限检查请求间隔和并发数降低频率等待后重试相关性打分区分度低兴趣描述太模糊检查描述文本长度和具体性改成任务方法的组合描述总结语义不通模板匹配失败查看抽取的方法名和任务类型加回退机制人工抽检速递内容过长召回量过大统计当天召回论文数启用分层呈现收紧精排阈值重复条目去重逻辑未覆盖检查标题相似度阈值降低阈值增加作者重叠判断6. 几个容易被忽略的实操心得6.1 数据备份比想象中重要SQLite数据库虽然简单但也要定期备份。我有一次硬盘故障攒了半年的论文数据全丢了重新抓取虽然可行但历史评分和总结都没了。现在我的做法是每天自动备份一次数据库文件到另一个目录每周手动导出一次CSV存档。备份文件按日期命名保留最近30天的。6.2 关键词表要跟着领域走AI领域的术语更新很快去年还叫“大语言模型”今年可能就流行“基础模型”了。关键词表如果半年不更新召回率会明显下降。我的做法是每个月花半小时review一次从最近读的论文里提取新出现的术语补充到关键词表里。同时把过时的术语标记为低权重而不是直接删除因为旧论文里可能还在用。6.3 速递的阅读节奏可以自己控制速递内容生成之后不一定要一次性读完。我的习惯是早上花五分钟扫一遍精选部分把感兴趣的论文链接存到待读列表中午或晚上再花时间细读。这样把“筛选”和“精读”两个动作分开效率更高。速递的价值在于帮你完成筛选而不是替代精读。6.4 不要追求完美的自动化我见过有人想把整个流程做成全自动——自动抓取、自动总结、自动分类、自动推送。结果每个环节都出问题维护成本极高。我的建议是抓取和去重可以全自动相关性打分可以半自动定期人工校准总结生成保留人工抽检环节。留一两个人工介入的点整体稳定性会好很多。6.5 输出格式要考虑阅读场景速递最终是给人看的输出格式要匹配阅读场景。如果是在电脑上看Markdown格式最方便链接可点、结构清晰。如果是在手机上看纯文本更合适避免格式错乱。我的做法是同时生成Markdown和纯文本两个版本根据使用场景选择。另外标题长度控制在50字以内太长的标题在手机上会被截断。这套速递系统跑到现在每天花在维护上的时间大概十分钟主要是抽检总结质量和更新关键词表。抓取和打分都是自动的基本不用管。最大的收获不是省了多少时间而是养成了每天跟踪领域动态的习惯——这个习惯带来的信息敏感度提升比任何工具都值钱。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑