文章目录
- Overview
- Current Retrieval-Augmented LMs
- Architecture
- Training
- Limitations & Future Work
Overview
Parametic language models的缺点:
- 事实性错误的普遍存在
- 验证的难度(可溯源性差)
- 难以在有顾虑的情况下排除某些序列
- 适应调整的计算成本高昂
- 模型规模过大
Retrieval-augmented languague models更加Reliable, Adaptable, and Attributable:
- 大幅度减少事实性错误
- 尤其是在long-tail知识上
- 更好的可溯源性
- 允许灵活的序列加入和退出(在检索的source里面增加和删除相应的sequence就可以)
- 很容易adapt到新领域
- 是更加参数高效的(不需要很大的参数量)
目前的Retrieval-augmented languague models面临的主要挑战:
- 现有的方法主要利用高语义相似度来检索外部信息,当知识库中没有相关信息或者不符合传统的相关性定义的时候,表现不好
- 比如对非knowledge-intensive任务,增益就不高
- 直接把检索到的文本拼接到输入中,导致语言模型和检索的交互不充分。这会引起:unsupported generations; susceptibility to irrelevant text; and challenges in handling information from multiple pieces of text
- 缺乏对提升检索增强型语言模型在大规模训练和推理中的效率的研究
Retrieval-augmented languague models未来的方向:
- 重新审视相关性的概念,并深入理解有效数据存储的构成,尤其是探索应从各种数据存储中检索的信息类型,以提升在更广泛任务中的表现
- 确保这两个组件之间更深入的交互,包括架构设计、预训练和后训练的调整,而不是仅关注对现有参数化语言模型的补充增强
- 呼吁在硬件、系统和算法领域开展更多开源的跨学科合作,来构建支持训练和推理的基础设施(e.g., scaling datastore to trillion tokens)
Current Retrieval-Augmented LMs
Architecture
现有的Retrieval-augmented LMs按照结合检索文档的方式,可以分为三类:1) input augmentation, 2) intermediate fusion, and 3) output interpolation.
-
input augmentation:
-
利用检索文档直接增强原始输入
-
缺点:redundancy and inefficiency-直接拼接文档会导致超出上下文长度限制,以及增加inference开销
-
FID用于缓解这个问题,但是对每个输入,相同的文档还是可能会重复编码。decoder需要解码序列长度还是会增大
-
-
-
intermediate fusion(以RETRO系列为代表):
- takes many pre-encoded text chunks independent of query x and simultaneously incorporates them in intermediate spaces.
- 缺点:需要大量的架构改动,并对语言模型的新编码模块进行预训练
-
output interpolation(以KNN LM为代表)
- 将LM的token分布与检索到的token分布直接结合
Training
训练整个retrieval-augmented LMs可以分为两类:independent or sequential training and joint training
- Independent or sequential training:
- Independent (以KNN LM和最近的一些开箱即用的方法为代表):Retriever和LM是独立训练的,训练过程中没有交互。大家利用现有的训练pipeline和训练目标来分别增强检索和LM
- Sequential:先训练retriever或者LM,再利用训练好的这部分提供的信号,来训练另一部分
- 先训retriever:以DPR为代表
- 利用LM的信号来训retriever:以REPLUG为代表
- Joint training:同时训练retriever和LM,以增强二者的交互和整个端到端的pipeline
- 一个最主要的问题就是巨大的开销:因为更新检索器之后需要对文本重新编码,而文本数量往往巨大。在每次更新完检索器都对datastore中的文档重新编码是不现实的
- 目前主要方法有两种
- Asynchronous updating:在retriever更新n步之后再更新文档的编码,这样在训练的时候就可以像inference时一样,利用整个语料库
- In-batch approximation:每次都对batch内的文本进行编码,仅在这个batch上进行优化,而不适应整个语料库
- 这个我理解就是我们训练retriever时的,in-batch negative训练方法