Reading Guide
先问一个问题
模型回答我的问题时,所依据的东西是从哪里来的,这三种来源各自可靠到什么程度?
- 适合读者
- 需要用 AI 查考资料、整理文献的读者
- 阅读基础
- what-language-models-do;context-and-memory
Key Points
先记住这些
- 参数中的一般知识来自训练材料,覆盖广但有时间截止点,且无法追溯到具体出处。
- 你临时贴进上下文的材料是当次最可靠的依据,因为出处由你掌握,但它受窗口限制且用完即弃。
- 外部检索是在回答前先从资料库里找出相关片段再一并送入上下文,本质上是把第二种来源自动化。
- 向量检索按语义相近程度取材,擅长找到说法不同而意思相近的段落,也因此容易取回「像但不是」的内容。
- 检索能显著减少凭空编造,但不能保证答案正确:取回的片段可能不相关、不完整或本身有误。
- 关键是把「模型说的」与「材料里写的」在流程上分开,让每一条结论都能回到一段可核对的原文。
Terms
几个必要概念
- 参数知识
训练过程沉淀在模型参数中的一般性知识。
它没有出处、没有版本、有截止日期,因此不适合作为书目、年份、条文这类需要精确的依据。- 嵌入
把一段文字转成一串数字,使意思相近的文字在数值上也彼此接近。
它让检索可以按意思而非字面匹配,也让「意思接近但事实不同」的段落更容易被误取。- 检索增强生成
先从外部资料库检索相关片段,再连同问题一起交给模型作答的做法,常简称 RAG。
这是让模型回答有据可依、可注明出处的主要工程手段。- 关键词检索
按词项出现与否及其权重排序的传统检索方法,BM25 是其中的代表。
在人名、书名、年份、专名这类必须字面精确的场合,它往往比向量检索更可靠,两者宜并用。
三种来源,三种可靠性
第一种是参数中的一般知识。它的好处是随取随用、覆盖面广,缺点是既无出处也无版本,而且训练材料有截止时间。用它来判断一个论证的大致走向、一个术语的通常含义,通常没有问题;用它来确认某书某年某版某页,则相当危险,因为模型给出错误细节时的语气与给出正确细节时完全一样。S1
第二种是你在当次交互中亲手贴进去的材料。这是三者中最可靠的一种,因为出处由你掌握,内容由你选定。它的限制是窗口容量与用完即弃,而且如前一篇所说,材料在上下文中的位置会影响它被利用的程度。S2
第三种是外部检索。它并没有引入新的原理,只是把第二种来源自动化了:先根据问题从一个资料库里挑出若干最可能相关的片段,把它们连同问题一起送进上下文,再让模型作答。这一做法在研究上被称为检索增强生成,最初的动机正是让模型在知识密集型任务上能够依据可指认的文本,而不是凭参数里的印象作答。S3
向量检索实际在做什么
要让机器判断哪段材料与问题相关,一种办法是看词是否对得上,这是关键词检索的思路,BM25 是这一路的经典方法。另一种办法是把每段文字都转成一串数字,使意思相近的文字在数值空间中彼此靠近,再看哪些段落离问题最近,这就是向量检索。前者精于字面,后者精于意思。S4S5
对文献工作来说,两者的分工相当清楚。查「李嘉图在哪一章讨论级差地租」,意思相近就够用,向量检索占优;查「某书 1817 年初版的出版者」,则必须字面精确,关键词检索更稳。实践中常把两者结果合并再排序,这样既不漏掉换了说法的段落,也不至于把年份、人名匹配错。S4
还有一个容易被忽略的环节是切分。资料库里的长文必须先切成小段才能检索,切得太碎会丢失上下文,切得太大会把无关内容一并带入。校勘记、注疏这类文体尤其麻烦,因为一条注与它所注的正文分开之后,各自都不完整。切分方式往往比选哪种检索算法更影响最终效果。S3
检索解决了什么,没解决什么
自建一个小型资料库要注意什么
对个人项目而言,做一个可检索的私人资料库并不需要多大工程。真正决定成败的是三件事:收什么、怎么切、怎么标。收什么最容易被忽视。一个混杂了原文、译文、他人研究、自己札记的库,检索时会不断把不同层级的材料混在一起返回,而模型并不会替你区分哪一段是原始文献、哪一段是转述。稳妥的做法是分库或至少分层标注,检索时能限定只在原始文献层里找。S3
怎么切前面已经提过,这里补充一条经验:切分的单位应当与你日后提问的粒度一致。如果你日常的问题是「某人在哪一篇文章里讨论过某事」,那么以篇为单位就够;如果问题是「某个术语在全书中出现过几种用法」,就必须切到段甚至句,并保留段落在原书中的位置信息。切分时把位置信息一并存进每一段的元数据,是日后能不能回到原文的关键,补做的成本远高于当初随手记下。S3
- 每段至少记录四项元数据:来源标识、在原书中的位置、材料层级、录入日期。
- 原始文献、译文、研究、自撰札记分层标注,检索时可分别限定。
- 关键词检索与向量检索并用,人名书名年份一类优先看关键词结果。
- 把检索本身的结果也存档,日后复核时才知道当时模型看到的是哪几段。
- 定期抽查检索质量:拿几个已知答案的问题去问,看该取回的有没有取回。
- 资料库有版本,增删材料时记一笔,否则同一个问题在不同时间得到不同答案将无从解释。
最后一条提醒与检索本身无关,却最容易出事:检索不到,不等于不存在。资料库里没有的材料,模型不会告诉你「库里没有」,它会用参数中的一般知识补上一段听起来合理的话。因此任务定义里必须明确规定,凡未能在检索结果中找到依据的,一律标为材料不足并列出缺什么,而不是给出一个答案。这条规定要写进验收标准,并且抽样核对时专门检查有没有被违反。S1
Conclusion
结语
把三种来源在流程上分清楚,是使用 AI 做文献工作的最低要求。凡结论必有出处,凡出处必可回到原文,凡回不到原文的一律存疑,这个次序比选用哪种检索技术重要得多。
仍可追问
- 对古籍与注疏一类文体,如何切分才能既保留注文与正文的关联又便于检索,目前没有成熟的公开方案。
- 混合检索中关键词与向量结果的权重如何设定,多依赖经验调参,缺少针对中文文献的公开评测。
- 检索是否显著降低了幻觉率,不同任务上的实测结论差异较大,本文只作定性表述。
参考资料
- S1
Ziwei Ji, Nayeon Lee, Rita Frieske, Tiezheng Yu, Dan Su, Yan Xu, 等.Survey of Hallucination in Natural Language Generation.2023
DOI / ISBN:10.1145/3571730查看来源 - S2
Nelson F. Liu, Kevin Lin, John Hewitt, Ashwin Paranjape, Michele Bevilacqua, Fabio Petroni, Percy Liang.Lost in the Middle: How Language Models Use Long Contexts.2024
DOI / ISBN:arXiv:2307.03172查看来源 - S3
Patrick Lewis, Ethan Perez, Aleksandra Piktus, Fabio Petroni, Vladimir Karpukhin, Naman Goyal, 等.Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks.2020
DOI / ISBN:arXiv:2005.11401查看来源 - S4
Stephen Robertson, Hugo Zaragoza.The Probabilistic Relevance Framework: BM25 and Beyond.2009
DOI / ISBN:10.1561/1500000019查看来源 - S5
Vladimir Karpukhin, Barlas Oğuz, Sewon Min, Patrick Lewis, Ledell Wu, Sergey Edunov, Danqi Chen, Wen-tau Yih.Dense Passage Retrieval for Open-Domain Question Answering.2020
DOI / ISBN:10.18653/v1/2020.emnlp-main.550查看来源