今天是2023年12月15日,星期五,北京,雪转晴。
今天我们再来看看RAG上下文自适应增强、表格处理以及一些评估方面的话题。
我们都知道,RAG中的召回阶段并不能保证一直能检索出最相关或者最值得信赖的信息。不相关的信息可能会对模型带来错误的指导,即使模型内部已经包含了回答问题的信息,也可能会被忽视。
因此如何进行RAG上下文召回的自适应可控回复,如典型的拒答,显得十分重要。
之前我们说过拒答逻辑,通过构造诚实样本,进行微调,可以具备拒答能力。
而这种方式,如果和cot结合,会有新的启发,因此我们首先来看看第一个工作,Chain-of-Note提示用于RAG上下文自适应增强。
表格问答也是RAG中的一个重要方向,但如何对其进行分割、索引,也有不同的处理方式,这是第二件事。
评估总是一个很有趣的话题,对于评估偏见,目前也出现了一些数据集以及新的评估框架,这个也可以看看,作为第三件事。
这三个事情都很有趣,供大家一起参考并思考。
一、Chain-of-Note提示用于RAG上下文自适应增强
早上读到一个很有趣的工作:《Chain-of-Note: Enhancing Robustness in Retrieval-Augmented Language Models》(地址:https://arxiv.org/pdf/2311.09210.pdf)引入了一种叫做Chain-of-Noting(CON)的方法,旨在提高基于检索增强的语言模型面对嘈杂、不相关文档以及处理未知场景的鲁棒性。
实际上,这是针对模型接收送入的上下文做出的响应,要求大模型能够适配不同的上下文,例如,上下文内容不足以支撑答案时,需要能够拒答,也就是应该回答unknown而不是胡编乱造。
更对应的,该方案与COT也很像,文章(https://praveengovindaraj.com/cutting-through-the-noise-chain-of-notes-con-robust-approach-to-super-power-your-rag-pipelines-0df5f1ce7952)对此做了总结。
1、训练数据的设计
如下图所示,CHAIN-OF-NOTE(CON)框架分成三种不同类型的阅读笔记的示意图。
类型(a)指语言模型识别出直接回答查询的文档,从而根据检索到的信息得出最终答案的情况;
类型(b)指检索到的文档虽然不能直接回答查询,但提供了上下文方面的见解,使语言模型能够将上下文与其固有知识结合起来,推导出答案。
类型(c)指语言模型遇到不相关的文档,但又缺乏必要的知识来作出回应,从而得到一个”未知”的答案。
2、训练数据的生成
首先从NQ(包含了来自搜索引擎的各种真实用户查询)训练数据集中随机抽取10k个问题。然后,请求ChatGPT根据具体说明和上下文示例提示三种不同类型的笔记生成,先看一个最直接的生成结果:
其使用的PROMPT如下:
Task Description:
1. Read the given question and five Wikipedia passages to gather relevant
information.
2. Write reading notes summarizing the key points from these passages.
3. Discuss the relevance of the given question and Wikipedia passages.
4. If some passages are relevant to the given question, provide a brief
answer based on the passages.
5. If no passage is relevant, direcly
provide answer without considering the passages.
具体尝试,可以在地址https://smith.langchain.com/hub/bagatur/chain-of-note-wiki/playground?commit=6533425b中查看:
在模型选择上,该模型基于开源的LLaMa-27B模型进行训练。
3、具体的例子
在第一个案例研究中,问题涉及最近在美国举办的夏季奥运会。标准RALM被提到的”芝加哥申办2016年夏季奥运会”所误导。
由于缺乏对内容的深刻理解,它错误地将重点放在了最近的年份(2016年)上,导致答案不准确。
相比之下,带有CON的RALM认真分析了信息。它指出,虽然芝加哥申办了2016年奥运会,但并没有证实申办成功。由此得出的正确结论是,美国最近一次举办奥运会是在1996年。
第二个案例研究涉及识别首位”楠皮思奖”获得者的语言类型。标准的RALM无法综合各文件的信息。其将G.SankaraKurup识别为获奖者,但没有将这一信息与其作品的语言联系起来。带有CON的RALM综合了两份文件中的细节,虽然第一份文件提到了库鲁普的获奖情况,但第二份文件提供了缺失的语言细节,从而得出了马拉雅拉姆语的正确答案。
4、引入噪声评估鲁棒性
为了评估模型的噪声鲁棒性和未知鲁棒性,从上述测试集中提取了包含检索列表中相关文档的子集。然后,对检索到的每份文档进行枚举,以确定其是否是特定问题的正确文档。
以噪声比r为例,如果生成器需要前k篇文档,那么k-r就是噪声文档的数量,而k-(1-r)就是相关文档的数量。例如,当噪声比为20%,需要前5篇文档时,则4篇为相关文档,1篇为不相关文档。
二、langchain中关于表格处理的思路
对表格类型的内容进行检索,其实也是RAG中的重要组成部分。
最近的一个工作:https://blog.langchain.dev/benchmarking-rag-on-tables/给出了表格问答的一些评测。
而一般来说,对非结构化文本和结构化表格的半结构化RAG,一般有3种策略,如下图所示:
一种是将包括表格在内的半结构化文件传入LLM上下文窗口。
一种是使用有针对性的方法来检测和提取文档中的表格,例如使用模型来检测、提取表格,然后进行检索。
一种是分割文档,在文本块中保留表格元素,然后进行检索,但这种方式会破坏表格的结果。
其提出了一个混合的方案,如下图所示:
其思想在于:建立一个专注于表格的检索模块,使用LLM读取每个页面,并总结页面中的表格。然后,将这些摘要建立索引以便检索,并用多向量检索器存储包含表格的原始页面文本。最后,将检索到的表格块与原始文本块进行组合。
三、GPTBIAS大模型中评估偏见的综合框架
《GPTBIAS: A Comprehensive Framework for Evaluating Bias in Large Language Models》地址:https://arxiv.org/pdf/2312.06315,对评估感兴趣的可关注。
图1展示框架内的偏差评估流程:
第一步,创建涵盖九种不同类型偏见的偏见攻击指令。
第二步,将这些带有偏见的攻击指令输入到一个大模型中进行评估,并从模型中获得相应的回复 。
第三步,将偏差攻击指令及其各自的响应编译到一个模板中。然后将合并后的内容输入GPT-4,由GPT-4评估语言模型是否存在偏差。GPT-4生成的回复不仅能反映是否存在偏见,还能提供偏见原因、偏见类型等信息。
第四步,通过考虑每种偏差类型中预测出的偏差样本总数来计算偏差得分。
总结
本文主要介绍了Chain-of-Note提示用于上下文自适应增强的思路、langchain中关于表格处理的思路的思路以及GPTBIAS大模型中评估偏见的综合框架,有种感觉,目前COT在提升模型性能上展现出很大的空间,COT也出现了很多新的变体,其在某种程度上是发挥了其自洽性的功效。
但是,话说回来,基于GPT4进行数据蒸馏,的确可以生成很多种微调数据,然后转为一种特定的能力,但其泛化性并不是很够,这块可以多加思考。
参考文献
1、https://arxiv.org/pdf/2311.09210.pdf
2、https://blog.langchain.dev/benchmarking-rag-on-tables
3、https://www.zhihu.com/question/625481187/answer/3304330051
4、https://arxiv.org/pdf/2312.06315
5、https://cobusgreyling.medium.com/chain-of-note-con-retrieval-for-llms-763ead1ae5c5
6、https://praveengovindaraj.com/cutting-through-the-noise-chain-of-notes-con-robust-approach-to-super-power-your-rag-pipelines-0df5f1ce7952
7、https://pbs.twimg.com/media/F_E6a0abQEARatK?format=jpg&name=large
关于我们
老刘,刘焕勇,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。
老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。
对于想加入更优质的知识图谱、事件图谱、大模型AIGC实践、相关分享的,可关注公众号,在后台菜单栏中点击会员社区->会员入群加入。