今天是2024年10月11日,星期五,北京,天气晴。
我们今天来看继续看RAG的两个工作,一个是一个面向PDF文档的RAG方案,可以理解为混合多模态检索,另一个是关于RAG与类COT的结合进展CoV-RAG。
两个工作,都很工程化,算法成分不多,也很粗糙,但也看看。
供大家参考并思考。
一、一个面向PDF文档的多模态RAG方案
看到一个工作,《PDF-WuKong: A Large Multimodal Model for Efficient Long PDF Reading with End-to-End Sparse Sampling》(https://arxiv.org/pdf/2410.05970,https://github.com/yh-hust/PDF-Wukong),处理包含文本和图像的长PDF文档,如学术论文。
其标题取得很宏大,实际上就是一个多模态RAG。
可以看几个点:
一个是当前处理长文档的代表模型。
另一个是PDF-WuKong架构。
1、架构
PDF-WuKong的架构包括文档解析器、稀疏采样器和模型。文档解析器将PDF文档转换为交错的文本块和图像。稀疏采样器编码文本块和图像,并缓存它们的嵌入向量。当用户提出查询时,模型通过简单的相似性度量来采样最相关的内容。最后,查询和采样的内容被输入到大型语言模型中生成答案。
其中,稀疏采样器(SparseSampler)先对所有文本块和图像进行编码,并将候选向量嵌入缓存,计算查询嵌入与缓存的文本/图像嵌入之间的相似性,然后选择与查询最相关的top-k文本块和图像作为证据。
2、推理流程
在这个算法中,最关键的部分是稀疏采样阶段,它通过计算查询与文档内容(包括文本和图像)之间的相似度,来选择最相关的部分作为输入传递给大型语言模型。
1)输入:算法接收一个PDF文档D
和用户查询q
作为输入。
2)输出:算法的输出是生成的答案a
。
3)初始化:初始化文本编码器En_T
、图像编码器En_I
和大型语言模型LLM
。
4)文档解析阶段:解析输入的PDF文档D
,将其转换为文本块{T1,T2,...,Tn}
和图像块{I1,I2,...,Im}
。
5)稀疏采样阶段:对所有文本块和图像进行编码,并将它们的嵌入向量缓存起来:ET={eT1,eT2,...,eTn}
和EI={eI1,eI2,...,eIm}
。对用户查询q
进行编码,得到查询嵌入eq
。计算查询嵌入eq
与缓存的文本/图像嵌入之间的相似度:ST={Sim(eq,eTi)|i=1,2,...,n}
和SI={Sim(eq,eIj)|j=1,2,...,m}
。选择与查询最相关的top-k文本块和图像:(T,I)top=TopK(ST,SI,k)
。
6)答案生成阶段:将查询q
和选择的文本和图像标记输入到LLM中:a=LLM(q,(T,EI)top)
。返回生成的答案a
。
3、训练流程
在这个训练流程中,模型通过对比学习损失Lrep
来学习如何将查询和与查询相关的正样本特征拉近,同时将查询和与查询不相关的负样本特征推远,这有助于模型更好地理解文档内容和用户查询之间的关系。其实这就是simcse的思想。
接着,模型通过交叉熵损失LQA
来学习如何根据查询和相关文档内容生成准确的答案。
最终,这两个损失函数联合起来,以端到端的方式优化模型,使得模型能够理解文档内容,还能够准确回答用户的查询。
1)输入:算法接收一个PDF文档D
,用户查询q
,以及真实答案gt
作为输入。
2)输出:算法的输出是最终的损失函数Ltotal
。
3)初始化:初始化文本编码器En_T
,图像编码器En_I
,和大型语言模型LLM
。
4)数据准备阶段:从解析器中获取文本块{T1,T2,...,Tn}
和图像块{I1,I2,...,Im}
。
5)多模态编码阶段:对用户查询、正样本和负样本进行编码:eq←En_T(q)
,ET={eTP,eTN}←En_T({TP,TN})
,EI={eIP,eIN}←En_I({IP,IN})
。
6)计算对比学习损失:使用对比学习的方法对齐文本和图像特征与查询:Lrep=-1/PΣ[ei∈EP]log(exp(sim(eq,ei))/τ)/Σ[ei∈EP]exp(sim(eq,ei))/τ+Σ[ej∈EN]exp(sim(eq,ej))/τ
,其中sim(eq,ei)
和sim(eq,ej)
分别代表查询与正样本/负样本之间的相似度,τ
是控制相似度得分比例的温度参数,P
是正样本的数量。
7)输出MLLM的预测:将查询、正样本文本和正样本图像标记输入到LLM中:a←LLM(q,TP,eIP)
。
8)计算交叉熵损失:计算输出答案a
和真实答案gt
之间的交叉熵损失:LQA(a,gt)
。
9)端到端优化模型:根据联合损失更新模型参数:Ltotal=Lrep+LQA
。
10)返回最终损失Ltotal
。
所以可以很清晰的看到,这个工作只是一个多模态检索RAG的雏形而已,并无太多新意。
二、关于RAG与COT结合进展,CoV-RAG
接着再看一个RAG的工作,《Retrieving, Rethinking and Revising: The Chain-of-Verification Can Improve Retrieval Augmented Generation》(https://arxiv.org/pdf/2410.05801),提出了验证链增强检索增强生成(CoV-RAG)的方法,将验证模块集成到RAG中,进行评分、判断和改写。
可以看几个有趣的点。
1、两种RAG错误
一个是两种错误,外部检索错误以及内部生成错误。
另一个是针对这两种错误的采用的方案:
为了纠正外部检索错误,CoV-RAG使用修订后的查询检索新知识。
为了纠正内部生成错误,在训练过程中将质量评估和验证任务与思维链推理(CoT)统一。
2、CoV-RAG框架
也就是CoV-RAG(Chain-of-Verification for Retrieval-Augmented Generation),示意图如下:
它由三个主要部分组成:检索器(Retriever)、生成器(Generator)和链式验证(Chain-of-Verification)。下面是对这三个部分的详细解读:
1)检索器(Retriever)
检索器的任务是根据输入的问题(Question)检索出与之最相关的前五个段落作为参考(References)。这些参考段落包含了可能用于回答问题的外部知识。
2)生成器(Generator)
生成器利用检索器提供的参考段落和输入问题来生成答案(Answer)。这个过程是通过大型语言模型(LLM)完成的,模型根据问题和相关参考生成一个回答。
3)**链式验证(Chain-of-Verification,CoV)
链式验证模块是 CoV-RAG 的核心,它负责评估生成的答案和检索到的参考的准确性。这个评估过程包括打分(Scoring)和判断(Judgment)。
其中:
打分(Scoring):对参考的正确性(Reference Correctness)和答案的不同方面(如正确性、引用准确性、真实性、偏见和简洁性)进行打分。
判断(Judgment):基于打分结果,判断答案是否准确、真实,并且是否清晰地回答了问题。如果答案不准确,链式验证模块会决定是否需要对检索到的知识进行更新。
修订(Revise):如果链式验证模块认为有必要,它会生成一个修订后的问题(Revised Question),以便检索器可以进行重新检索(Re-retrieval),以期获得更准确的参考信息,从而提高答案的事实性。这个过程可以是多次迭代的,以确保最终生成的答案尽可能准确。
3、推理流程
具体的推理步骤,可以看看Algorithm 1,示意图如下:
这个算法的核心在于通过链式验证机制来提高答案的准确性和事实性。在初步生成答案后,模型会评估答案的质量,并在必要时通过修订问题和重新检索来迭代改进答案。这个过程可以多次迭代,直到生成一个高质量、准确的答案。
其输入(Input):一个待回答的问题(Question)。
1)检索(Retrieval)阶段,使用检索器(Retriever)根据问题检索相关的参考(References)。这些参考是外部知识源中的段落,按与问题的相关性排序。
2)生成答案(Generate Answer阶段,利用生成器(Generator)基于问题和检索到的参考生成一个初步答案(Initial Answer)。
3)验证结果预测(Predict Verification Results)阶段,生成器再次预测验证结果,包括参考分数(Reference Score)、答案分数(Answer Score,涵盖正确性、引用准确性、真实性、偏见和简洁性等多个维度)、判断(Judgment,即答案是否准确、真实、清晰)以及修订后的问题(Revised Question)。
4)重新检索指示(Re-retrieval Indicator)阶段,根据验证结果,获取一个重新检索指示(Re-retrieval Indicator,σ),以决定是否需要根据修订后的问题更新外部上下文知识。
5)条件重新检索(Conditional Re-retrieval)阶段,如果重新检索指示为真(True),则检索器根据修订后的问题重新检索新的相关参考。
6)重新生成答案(Re-generate Answer)阶段,如果进行了重新检索,生成器会基于初始问题和新的参考再次生成答案(Revised Answer),并更新初始答案。
最终,算法返回最终确定的答案。
总结
本文今天看了RAG的两个工作,一个是一个面向PDF文档的RAG方案,可以理解为混合多模态检索,另一个是关于RAG与类COT的结合进展CoV-RAG。
其中针对特定问题所采用的应对方式,当工程论文来看。
参考文献
1、https://arxiv.org/pdf/2410.05970
2、https://arxiv.org/pdf/2410.05801
关于我们
老刘,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。
对大模型&知识图谱&RAG&文档理解感兴趣,并对每日早报、老刘说NLP历史线上分享、心得交流等感兴趣的,欢迎加入社区,社区持续纳新。
加入会员方式:关注公众号,在后台菜单栏中点击会员社区->会员入群加入