现有方法:
1.对于语言模型预训练进行昂贵的特定检索修改
2.使用了对数据存储器的事后集成,从而导致了次优的性能
改进: RA-DIT:检测增强双指令调优(两部分微调) 对任意LLM加入检索功能
两个微调步骤:
1.更新预训练语言模型,更好地利用检索信息
2.更新检索器,返回更相关的信息
模型:LLaMA+DRAGON+
根据语言模型的prompt进行检索,产生检索块,每个检索块放在prompt前,来自多个块的预测被并行计算并集成以产生最终输出。
指令微调步骤:
1.LM-ft:采用了监督学习的 fine-tuning 方法来训练模型,并在每个 fine-tuning prompt 前加入了一个从外部检索到的“background”字段。
2.检索微调(R-ft):采用了一种名为“generalized LM-Supervised Retrieval (LSR)” 的训练目标来更新查询编码器,该目标结合了监督学习和无监督学习的思想,并计算在监督任务和无监督文本补全任务的组合上
语言模型:LLaMA
检索器:基于双编码器的检索器架构
给定语料库c和查询q进行点积计算:
用DRAGON+初始化检索器(双编码器模块),该模型是通过对比学习目标和大规模数据增强进行训练的。
并行上下文检索增强:
通过prompt进行检索获得top-k个检索块,每个块单独加入到prompt前进行训练,并行计算预测,最终结果概率由(每个检索块+prompt)概率混合而成,概率由块相关性分数加权。
o表示序列连接,x=prompt,c检索文本块
c块的概率
检索文档的概率化用的softmax,如果是做inner product(向量内积)最后的值并不一定在01区间内,也没用概率特性,所以要额外处理一下
语言模型微调:
加入检索器,进行端到端的微调相当于P(A|D,I,Q)=sum(P(Di|I,Q),P(A|I,Q,Di)) 计算i检索块的概率,以及i检索块生成正确答案的loss进行加权,计算总loss进行端到端微调。
FT实例:x=prompt,c检索文本块,y输出段
LOSS:
log(next_p)
在微调期间集成上下文检索增强,通过训练LLM在给出错误检索块时做出正确预测,忽略误导性的检索内容。
检索器微调:
根据第一步微调结果进行检索器的微调,通过计算当前检索进入LLM生成的loss,应让Di的概率越大,LLM的loss越小,进行KL散度
温度系数T,越大的温度则概率分布越平滑。C‘是x检索到的k个检索文本块
表示了在x和y固定的情况下,不同c作为辅助,建模出正确y的概率
LSR技术,以用语言模型本身为检索器微调提供监督。最小化Plsr和Pr的KL-divergence(KL散度)希望把 PR(ci检索块的概率)和PLSR(ci预测出正确结果的概率)分布拉进
我们只更新检索器的查询编码器,即编码器部分的E(q)