博客研究方法

文献综述怎么写:先找全,再动笔

写文献综述,大致是三件事:先把和你的问题相关的文献找全,再通过分组和比较读出这个领域的结构,最后基于这些比较写出你自己的判断,也就是综述的论点。前两件事决定一篇综述的下限,第三件事决定它的上限。下面就按这个顺序来讲,每一步都配了真实的例子。

网上讲文献综述怎么写的文章很多,步骤也大同小异:确定问题、检索数据库、评估文献、归纳主题、列提纲、写作、修改。读了一圈下来,我觉得它们有两个共同的问题。一是检索那一步几乎都只有一句「在相关数据库中检索」,可综述只能讨论它找到的东西,检索停在 Google Scholar 第一页,归纳出来的主题就只是第一页的主题。二是真正写的部分往往只剩一句「要综合而不是罗列」,至于怎么综合、一篇综述的论点从哪里来、遇到相互矛盾的结论怎么办,基本没人展开。

这篇文章想把这两头都补上。我做 Parallax 的起点就是检索:通用 agent 通过搜索 API 只能拿到 top-k,说不清一个方向到底有多少篇论文,所以我改成了对 arXiv 全库做扫描。但做下来发现,找全文献只是让综述有了下限,决定上限的仍然是怎么写。下面分三部分:找文献、读文献、写综述,其中写综述的篇幅最多。这篇主要写给常和预印本打交道的人,物理、数学、计算机、统计、定量生物、经济都算在内。

文献综述有哪几种:先想清楚你在写哪一种

文献综述是通过比较已有工作来回答一个问题,而不是把它们罗列一遍。它的形式取决于出现在哪里:论文里的 related work 章节用几段话把自己的工作放进已有研究的坐标系;学位论文的综述章要对一个领域做有结构的梳理,最后引出自己的研究问题;独立成篇的 survey 规模更大,在 arXiv 的计算机和物理分类里很常见。医学和社会科学里还有系统综述和范围综述,前者要预先登记检索和筛选方案、报告每一步的篇数,后者只梳理有哪些工作而不评判质量。下面的方法对这几种都适用,区别在于规模,以及要把多少过程正式写下来。

找文献:先确认自己找全了

把问题和边界写成可以检验的句子

动手检索之前,先写下综述要回答的问题,以及什么算在内、什么不算。检验标准很简单:别人拿着这几句话去判断一篇论文,能不能和你得出同样的结论。「关于 LLM 智能体记忆的论文」就太模糊了;改成「纳入提出、评测或分析 LLM 智能体如何跨步骤或跨会话存储和检索信息的论文,排除只做 KV cache 压缩、没有智能体场景的论文」,判断起来就有据可依。时间窗口和来源也在这时定下来,比如只覆盖 2020 年以来的 arXiv,就在综述里明说。这几句话后面筛选、查漏、写范围说明时都要用到。

估规模,再从多个角度检索

十篇论文和一万篇论文需要完全不同的做法,所以值得先估一估这个方向有多大。Google Scholar 的「约 2,000,000 条结果」大部分是噪音,AI 助手则不管实际有多少都只给你十篇左右。粗略的办法是换几种说法各搜一次,看看各返回多少条,再抽几篇看看有多少真正相关。如果一种说法返回 300 条、一半相关,另一种返回 5,000 条、二十篇里才有一篇相关,领域的主体在哪里、哪些词太宽,就都清楚了。

估完规模,接下来有个更麻烦的问题:不同领域的叫法并不统一。计算机里 looped transformers、recurrent-depth models 和 universal transformers 讲的东西有大量重叠;数学里同一个对象在不同子领域可能有不同的名字和记号;物理里同一现象的工作经常分散在 hep-th、gr-qc 和 astro-ph 之间。只搜一种叫法,就只能找到一个圈子。所以与其追求一条完美的检索式,不如跑几条窄一些的:关键词检索覆盖已有的名称、缩写和变体;语义检索用平实的话描述这个想法,找那些用词不同的论文;再挑几篇核心论文翻它们的参考文献,把用旧术语写成的早期工作找回来。最后合并去重,记下每篇是哪一路找到的。如果一整批相关论文只来自其中一路,其他几路多半有同样的盲区。

mermaid
flowchart LR K1["关键词:已有名称"] --> U(("合并 +<br/>去重")) K2["关键词:缩写与变体"] --> U S1["语义:用平实的话描述"] --> U R["引用追溯:核心论文的参考文献"] --> U U --> C["候选集"] C --> SC["筛选"]

合并后的候选集比最终保留的大很多也没关系。在一次关于 LLM 智能体记忆的检索里,6 路关键词和 5 路语义检索合并后有三万多篇候选,绝大部分后来都被筛掉了。只要筛选够便宜,撒大网的代价很小,漏掉一整个圈子的代价却很大。

筛选,然后查漏

筛选就是拿第一步的那几句话逐篇判断,第一轮看标题和摘要就够了。排除时顺手记个理由,哪怕只是「超出范围」「没有新结果」这样的短标签;拿不准的论文单独放一堆,不要在边界上硬判。筛完之后再做一件很多人跳过的事:把你本来就知道应该出现的论文列出来,逐一检查它们在不在。不在的话,弄清楚是检索漏了还是筛选误删了,修正对应的那一路,再看看这次修正又带进来什么。

mermaid
flowchart LR C["候选集"] --> J{"对照<br/>纳入标准"} J -->|纳入| I["纳入"] J -->|排除 + 理由| E["排除"] J -->|不确定| N["不确定"] N -->|多读一些或<br/>修改标准| J I --> G{"已知论文<br/>都在吗?"} G -->|否| F["修正漏掉它们的<br/>那一路检索"] F --> C G -->|是| D["最终集合"]

手工筛几千篇要花好几天,这是 AI 模型真正帮得上忙的地方,前提是它按你的标准判断,而且每个判断事后都能查。Parallax 用的是 Jev(检索和筛选管线是怎么搭起来的,我另写过一篇),它对每篇论文、每条标准给出一个校准过的概率,不低于 0.5 的纳入,所有概率都存下来,可以按概率排序去读边界附近的那些。不管用什么工具,都建议抽读二十篇纳入的和二十篇排除的,看着不对就先改标准。

读文献:从一份清单到一张地图

先分组,再精读

有了最终集合,先别急着从头读起,而是先分组。分组能把一份清单变成一张地图,这张地图往往也就是综述的骨架。计算机和应用数学里常按方法或技术路线分,物理里常按研究的体系或现象分,也可以按贡献类型或时间分。一篇论文完全可以同时属于两个组;太大的组则要再拆。一次多模态方向的梳理里,「评测基准与数据集」一组有一百多篇,后来又细分成了 11 个子类,一百篇的一组还算不上主题,只是一堆。分完之后如果剩下一大块「其他」,也别忽略它,那通常说明分组的维度还没找对。

精读时记比较,而不是摘要

论文不用每篇都读完,也读不完。每组里被反复继承的核心论文和最近最强的几篇值得通读,其余的读到能说清它多做了什么就行。真正要花时间的是相互矛盾的论文,分歧往往是一篇综述最有价值的部分。

读的时候记下的应该是比较。「A 和 B 都用了同一种方法,但 A 换了一个评测场景,得出了相反的结论」是综述的素材,「A 提出了 X,B 提出了 Y」只是目录。为此我建议给真正要讨论的论文做一张文献矩阵,每篇一行,每个想比较的维度一列。它不用覆盖所有论文,但能逼着你在动笔之前就把比较做出来,后面写作时,很多段落照着这张表就能写出来。

论文研究问题方法 / 路线场景 / 数据主要结果局限分组

写综述:从材料到论点

前面两部分做完,你手里有一个可信的文献集合、一套分组和一张比较表。很多人到这里会按分组一节一节往下写,每节把组里的论文挨个介绍一遍。这样写出来的东西没有错,但读者读完会问:所以呢?一篇好的综述和一份整理好的书目之间,差的就是论点。

下面用一篇真实的综述做例子。它是在 Parallax 里产出的 Looped and Recurrent-Depth Transformers,讲的是把同一组权重在深度方向上反复调用的那一类模型,候选池 358 篇,精读 102 篇。全文公开在 Parallax 的 Research 栏目,那里还有其他综述和月度进展报告,可以对照着读。它不一定是最好的综述,但它在写法上有几处很值得细看。

先找到你的论点

综述的论点不是「本文梳理了某某领域」,而是读完材料以后你对这个领域下的几个判断。looped transformers 那篇在引言里直接列出了四个论断:这个领域的设计空间其实很小、是离散的,几乎每个架构都只是在四个维度上各做一个选择;真正卡住这类模型的是训练稳定性,而不是表达能力;支持循环架构的证据大多是在参数量对齐的条件下得到的,而不是在算力对齐的条件下;推理时的自适应深度是最活跃、也最缺乏验证的方向,报告的收益是真的,但很脆弱。后面整篇文章,都是在给这四个论断找证据。

论点从哪里来?通常就来自你的比较表。当你发现某一列在所有论文里几乎没有变化,那是一个共识;当某一列在不同论文间给出相反的结果,那是一个分歧;当某一列大部分格子是空的,那可能是一个空白。looped transformers 那篇的架构对比表里就专门有一列「证据规模」,记录每篇论文实际报告的最大实验设置,作者在表注里点明,这往往比论文结论所针对的规模小得多。光是加上这一列,作者的看法就已经摆在那儿了。

论点不必一开始就有。比较实际的做法是读完、填完表之后,试着用三五句话回答「这个领域现在到底是什么状况」,写不出来,就说明还需要再读或者再比较。

综述结构:让人一眼看出论点

有了论点,结构就好定了。按主题组织是最常见的,每个分组一节;按方法组织适合技术路线分明的领域;如果现状要靠历史来解释,就按时间写。选哪种倒在其次,更要紧的是让读者从结构上就能看出你想说什么。

looped transformers 那篇的做法是先给出一个统一的形式化定义,再提出一个四个维度的分类法,然后按架构、训练、推理、理论逐章展开。它的章节标题直接写出了结论,比如训练那一章叫「稳定性才是硬约束」。读者只看目录,就已经知道作者的立场了。这比「3. 训练方法」这样的中性标题信息量大得多。

章节内部的写法也一样:开头先说这一组论文的共同点,然后在组内做比较,最后说还有什么没解决。按这个顺序写,每一节最后都有个交代,不会在介绍完最后一篇论文时戛然而止。

引言怎么写:交代范围和证据边界

引言要交代问题是什么、为什么现在值得关注,以及这篇综述的论点。但还有一部分常被省略,就是范围:时间窗口、文献来源、排除了什么,以及你是怎么检索的。把这些写清楚,读者才敢相信你找得够全,也知道你的结论在什么范围内成立。

looped transformers 那篇专门写了一节「范围与证据边界」。它说明自己是一篇聚焦单一架构家族的叙述性综述,而不是系统综述;交代了候选池是 6 路检索得到的 358 篇,其中 102 篇精读、其余只看了标题和摘要;还明确列出了三条需要读者记住的限制,比如有三篇奠基性论文不在检索库里、只能从外部引用,以及这个领域预印本占主导,很多被引用的工作还没经过同行评审。

把限制写在前面并不丢人。读者知道边界在哪,反而更愿意相信边界之内的结论。

主体段落:综合而不是罗列,看一个例子

到了段落层面,最常见的问题是一段讲一篇论文、每段都以作者名开头。看一个示意的对比,假设讨论的是某类架构相对于常规模型的优势:

罗列式:[3] 提出了一种循环架构,在多个基准上优于基线。[5] 在此基础上加入了自适应深度,进一步提升了效果。[8] 将类似结构扩展到了视觉任务。[6] 在算力对齐的条件下重新比较了这类架构。

综合式:这类架构的优势在多项工作中都有报告 [3][5][8],但这些比较几乎都是在参数量对齐的条件下做的。一旦改为推理算力对齐,结论就不再一致:在语言任务上优势基本消失,在视觉任务上仍然存在 [6]。因此,「循环架构更好」这个说法需要先回答:和谁比,对齐的是什么。

第二段读起来更费力,但它给了读者一个明确的结论,也交代了这个结论凭什么成立、在什么条件下成立。写法上可以记一个顺序:先说观点,再引用支撑它的论文,最后说它们在哪里不同、留下了什么问题。

遇到分歧,先找原因再下结论

一篇综述写得好不好,很大程度上看它怎么处理分歧。看到两组论文结论相反,别一句「目前尚有争议」就带过去,而是去找它们为什么不同:评测场景不同、数据规模不同、比较的基线不同,还是对同一个术语的定义不同。

looped transformers 那篇遇到的就是这种情况。关于「循环模型是否优于常规模型」,文献里的结论五花八门。它没有在其中选边,而是指出这些比较实际上对齐的是五种不同的量:参数量、训练算力、推理算力、解码成本、有效深度。对齐参数量时循环模型明显占优,对齐训练算力时结果好坏参半,对齐有效深度时它占优几乎是不言自明的。它把这五种情况整理成一张表,告诉读者看这类论文时先看它对齐的是什么。这么一梳理,原本互相打架的结论就都说得通了。

换到物理也是一样。前面提到的那次快速射电暴检索里,就有两类看起来矛盾的证据。一类来自宿主星系的统计:Bochenek 等人比较了已定位快速射电暴的宿主星系,认为它们与核坍缩超新星诞生的磁星这一来源相符(arXiv:2009.13030)。另一类来自单个暴源:Kirsten 等人把重复暴 FRB 20200120E 定位到了 M81 的一个球状星团里(arXiv:2105.11445)。球状星团是年老的星族,很难用刚从超新星里诞生的年轻磁星来解释,作者因此倾向于白矮星吸积诱发坍缩或致密双星并合形成的磁星;而这类渠道,Margalit 等人更早就从一个宿主星系已经不再形成恒星的暴源出发提出过(arXiv:1907.00016)。

如果综述只写一句「起源仍有争议」,读者什么也得不到。更有用的写法是指出这两类证据回答的其实是不同的问题:宿主统计描述的是典型的暴源从哪里来,球状星团里的这一个源则说明至少还存在另一条形成渠道,两者完全可以同时成立。至于不同渠道各占多大比例,就成了一个可以写进开放问题的具体问题。

说空白要有依据,提开放问题要有铺垫

「尚无工作研究某某」是综述里最容易出错的一句话,也是内行读者最先检查的地方。写之前,用它的各种叫法直接再搜一遍,翻翻当初拿不准的那一堆。如果检索范围有限,就把限定条件写进去,比如「在我们检索的范围内」。

开放问题的部分也一样,最好是从前文的证据里自然推出来,而不是在结尾临时想几条。looped transformers 那篇列出的第一个开放问题,就是一个算力对齐的基准测试:因为前文反复出现的问题正是各家在不同的对齐条件下比较,所以真正缺的不是更多比较,而是一个统一的比较协议。读者读到这里会觉得顺理成章,因为证据已经在前面摆好了。

讨论和结论怎么写

讨论部分要跳出单个分组,看跨主题的规律:哪些问题在多个方向上反复出现,哪些方法在一个方向上成熟了、在另一个方向上还没人试过。looped transformers 那篇在开放问题之前专门有一章「证据实际支持什么」,先讲清楚各家的数字为什么难以横向比较,最后单列一节写「我们认为哪些已经成立,哪些还没有」。到了结论部分,它也没有把开头的四个论断原样重复一遍,而是说其中三条「在我们看来证据充分」,并给出了各自的依据。结论就该这样回到开头的问题,告诉读者现在可以相信什么、还不能相信什么,以及有多大把握。

Related work 章节怎么写

论文里的 related work 是一篇任务更明确的短综述:它要证明你的工作是必要的。同样的方法压缩一下就够用:每个分组一段,段内用综合的写法交代这一路工作做到了哪里,最后用一句话说明你的论文和它们有什么不同。最常见的毛病是把它写成一份引用清单,或者每段都以「与本文不同的是」收尾却说不出具体哪里不同。

用了 AI,就说清楚用在了哪一步

现在不少期刊和学校都要求说明写作中用了哪些 AI 工具、用在哪一步,通常写在方法部分或致谢里。一般的共识是 AI 不能署名,内容的责任始终在作者。

对综述来说,最容易交代清楚的是检索和筛选:用了哪些检索词、得到多少候选、筛选标准是什么、AI 判定的阈值是多少、人工抽查了多少篇。这些信息本来就该出现在范围说明里,顺带写明 AI 的角色并不费事。真正需要警惕的是让 AI 替你下判断或者替你找引用,判断要你自己负责,引用要逐条对照原文。在 Parallax 里,每条筛选标准和每篇论文的判定概率都会存下来,写这一段时可以直接照着记录写。

提交前再查一遍

最后一遍可以重点看这几件事:每个论断是否都指向具体的论文,那篇论文是不是真的这么说了;你本来知道该有的论文是不是都在;最近几个月的工作有没有覆盖到,在变化快的领域,一篇停在半年前的综述已经漏了不少;空白的论断有没有直接检索作依据;预印本和它的正式版本有没有重复引用。如果写作中用了 AI 工具,还要确认每个 AI 参与的论断都能追溯到原文。

交给 agent 来做

上面的方法不依赖任何工具,但其中找文献和分组这几步,规模一大手工就做不动了,这也是我做 Parallax 的初衷。在应用里,一个 agent 可以在一次对话中跑完:先用探针估算规模、挑选检索词,再在 arXiv 全库上建立多路关键词和语义检索,用集合运算合并;然后根据你的需求写出纳入和排除标准,让 Jev 逐篇筛选,最后提出分类、把论文分进去。之后你可以和 agent 围绕这个集合讨论、比较论文、提取证据,再让它写出综述报告,前面那篇 looped transformers 综述就是这么来的。

整个检索过程会以节点图的形式保留下来。下面是 LLM 智能体记忆那次检索,11 路关键词和语义检索合并成 36,564 篇候选,再经 Jev 筛到 5,170 篇。

同样的流程在计算机以外也适用。我在免费检索页上拿一个物理问题试了一次:快速射电暴有哪些起源模型,哪些观测支持或排除了它们。它跑了 5 路检索,关键词那几路分别对应磁星、中子星并合、blitzar 等不同圈子的说法,合并成 479 篇候选,筛选后保留 265 篇,分成了 6 个主题。

注意其中的「Other」:89 篇,约占三分之一,没能归进 6 个主题。这正是前面说的那种情况,动笔之前应该抽读这一组,调整分组的维度。

它做不到的地方也要说清楚。文献库只有 arXiv,并且是基于 2020 年以来的 arXiv 更新构建的,更早的奠基性工作只部分覆盖,只在期刊发表的论文也不在库里,这些需要靠你自己翻参考文献来补;agent 目前也不会自动沿引用链接扩展。更重要的是,agent 写出的初稿只是起点,找到论点、处理分歧这些判断,仍然要你来做。

如果想在自己的问题上试试,免费文献检索不需要注册。它是一次快速扫描,最多 5 路检索、筛选 1,000 篇候选,算不上完整的综述,但足够让你看清这个话题有多大、主要分成哪几块。

常见问题

文献综述从哪里开始写?

不是从引言开始。先用几句可以检验的话写下问题和纳入标准,再随手搜几次,看看这个方向大概有多大。如果已经有一两篇近期的综述,尽早读,它们的参考文献是进入这个领域最快的入口,也能告诉你哪些问题已经被讲透了。引言反而最适合最后写,那时你已经知道自己的论点是什么了。

一篇综述该引用多少篇论文?

没有固定数字,related work 可能引二三十篇,一篇 survey 可能引几百篇。更该问的是,在你写明的范围之内有没有覆盖到这个领域。把候选集和最终集合的规模写出来,读者自己就能判断。

能不能用 ChatGPT 之类的 AI 助手来写?

用它想检索词、列提纲、润色都没问题,但把它当检索工具或文献来源时要小心。通用助手只返回少数几条结果,可能编造不存在的论文,也说不出自己漏了什么,每条引用都要对照原文核实。

要不要纳入预印本?

在物理、数学和计算机领域,要。大量新工作首先出现在 arXiv 上,有时比正式发表早好几年。标明哪些是预印本,有正式版本的就引用正式版本。

写一篇综述要多久?

学位论文的综述章或者一篇 survey,通常要几周到几个月。检索和筛选过去占了很大一块,有了能扫描全库、自动筛选的工具,这部分可能一个下午就够了,时间可以留给读和写。

写在最后

刚开始用 AI 检索文献时,让我难受的不是它出错,而是我不知道它漏了多少。GitHub 上那么多 awesome paper list,说明很多人想要的是同一样东西:一份某个方向上完整、有条理的论文清单。但做 Parallax 的过程也让我越来越清楚,清单只是综述的下限。机器现在能帮你把清单做全,而从清单里看出论点、把矛盾的结论解释清楚,仍然是写综述的人最该花时间的地方。

Parallax 已经上线:parallax.ink。如果你正准备写综述,不妨先用免费检索在自己的问题上试一次,看看这个领域到底有多大,然后把省下的时间花在写上。

继续阅读