如何利用大模型进行数据标注与知识蒸馏:兼看ActiveRAG上下文去噪的大模型RAG问答范式
作者: 老刘说NLP 来源: 老刘说NLP
今天是2024年2月23日,星期五,节后第一周最后一个工作日,农历正月十四,北京,天气晴。
最近开源和闭源都很迅猛,目不暇接,各种炸裂,砸场子的震惊体文章出现。
我们静下心来,回归到一些有趣的工作,继续围绕RAG。
我们前面有介绍到,RAG这套问答方案会受到噪声的影响,因此,为了避免来自检索段落的噪声的影响,目前出现了许多针对检索内容进行处理的优化方法,其通常采用检索-细化-生成架构来增强使用llm的RAG的能力。
例如,《Self-RAG: Learning to Retrieve, G6enerate, and Critique through Self-Reflection》(https://arxiv.org/abs/2310.11511) 通过微调大模型,自适应地按需检索段落,并控制从检索器到生成器的信息流。
又如:《Chain-of-Note: Enhancing Robustness in Retrieval-Augmented Language Models》(https://arxiv.org/abs/2311.09210) ,其将检索到的上下文分成相关、不相关以及触发大模型自身参数化三种。
但是,这种方式对于大模型来说,是被动接受的一个状态,最近的工作《ACTIVERAG: Revealing the Treasures of Knowledge via Active Learning》(https://arxiv.org/pdf/2402.13547.pdf)提出了一种新的方法ActiveRAG,其实现思路哲学思想挺有趣,这是本文的第一个话题。
另外,看看数据方面的问题,大模型用于数据标注是当前大模型领域的重要应用点之一,其重点利用大模型自身的能力来减轻人工标注数据的压力,这个细分起来,可以分为大模型直接进行数据标注以及对强模型进行数据蒸馏两种,最近也出现了两个系统性的整理工作,也可看看。
浮躁之下,静下心来,看一些基础的工作,会更有意义,供大家一起参考并思考。
一、ACTIVERAG:基于主动知识学习的RAG
《ACTIVERAG: Revealing the Treasures of Knowledge via Active Learning》(https://arxiv.org/pdf/2402.13547.pdf),对应的代码在:https://github.com/ OpenMatch/ActiveRAG通过主动学习来弥补先验知识与检索信息之间的差距,试图通过自我反思和自我蒸馏来降低从检索段落中的噪声影响,提取关键知识,以帮助LLMs为给定问题生成更准确的答案,效果如下所示:
早期的RAG方案如Vanilla RAG通常采用检索-生成体系结构,直接提供检索上下文D = {d1,…, dn}到语言模型来生成给定查询q的答案。
1、大体实现思路
ACTIVERAG设计了一个三步流程,包括检索retrieval、知识构建knowledge construction和认知联结cognitive nexus, 更侧重于进行主动知识学习,通过弥合检索到的段落和事先学习到的llm知识之间的差距。
具体而言,ActiveRAG首先从知识库检索文章,然后构建知识理解,将检索到的文章与预先存在的知识关联起来,最后,利用认知连接机制连接外部知识与LLMS的内在知识,在这一步,它首先为解决问题生成一个初始的思维链,然后利用知识构建的结果来修正思维链,从而产生更精确的答案。
2、知识构建Knowledge Construction
为了从检索到的文章中形成对知识的理解,ACTIVERAG将LLM视为一种从文章中接收、理解和转换外部知识的认知结构。
为了模仿人类的学习行为,其构建了四个不同的智能体,专门用于知识构建,并从知识获取的不同角度评估llm的熟练程度。
具体角度包括锚定encompass anchoring、逻辑推理logical reasoning、认知cognition和联想association。
每一类都通过特定的prompt来实现,给定question以及检索到的文档。设定特定的task任务,提示大模型进行抽取,如下:
3、认知联结Cognitive Nexus
认知联结机制促进了所构建的知识理解与LLMs内在认知过程的融合。
其实现流程很简单,提示llm为给定的查询q生成初始的思维链,表示llm的认知过程。随后,将知识构建的结果整合到思维链中,以促使llm反思和纠正其中可能包含的任何事实错误。
这块也是通过prompt实现,不同的知识类型,也采用不同的提示词来处理,如下:
4、一些具体的例子
我们可以看一个具体的例子,包括以下几步,以看其实现过程:
可以看到,虽然ACTIVERAG被证明是一种有效的方法,可以利用外部知识来帮助llm生成任务,但它需要调用ChatGPT API三次:一次构建初始思维链,再次处理知识构建结果,最后执行认知连接来生成最终答案。处理这些问题可能会带来额外的时间延迟和API调用开销。此外,由于包含广泛的检索段落和知识构建结果,对llm的输入往往很长。
所以,这归根结底,又是一种以时间换性能空间的方案,在实际落地过程中可能并不用的到,但作为探索思路,还是很有趣的。
二、关于大模型用于数据工程上的两个整理工作
1、大模型用于数据标注
大模型用于数据标注是当前大模型领域的重要应用点之一,其重点利用大模型自身的能力来减轻人工标注数据的压力。
而系统关于大模型用于数据的标注的整理工作已经出现,最近的工作《Large Language Models for Data Annotation: A Survey》(https://arxiv.org/pdf/2402.13446)给出了一个较为全面的整理,在项目https://github.com/Zhen-Tan-dmml/LLM4Annotation.git中给出了系列论文列表,值得一看。
但是,利用大模型进行标注数据生成存在明显局限性,llm可能表现出抽样偏差,导致不正确或“幻觉”数据,影响判别任务标注的可靠性和质量。此外,虽然llm存在对训练数据过度拟合的风险,从而限制了它们对未见过的数据或不同上下文进行泛化的能力。
2、大模型知识蒸馏综述
大型语言模型(LLM)的知识蒸馏(Knowlege Distill)技术,通常将GPT-4等专有大模型的复杂能力转移到开源模型(如LLaMA和Mistral)中,这是现在主流self-instruct中常用的一条路。
最近工作《A Survey on Knowledge Distillation of Large Language Models》(https://arxiv.org/abs/2402.13116)一文对其进行了总结,系列论文集合也发布在:https://github.com/Tebmer/Awesome-Knowledge-Distillation-of-LLMs
其中有几个有趣的点,一个是蒸馏的对象,也就是蒸馏的目标,如下所示:
标注Labeling:教师从输入中产生输出;
拓展Expansion:教师通过情境学习生成与给定演示相似的样本;
数据整理Data Curation:教师根据元信息,如主题或实体,对数据进行综合;
特征提取Feature:将数据输入教师,提取其内部知识,如逻辑、特征等;
反馈 Feedback:教师对学生的代际进行反馈,如偏好、纠正、扩展具有挑战性的样本等;
自我认识Self-Knowledge:学生首先生成输出,然后筛选高质量或由学生自己评估。
另一个是现有相关研究工作中关于蒸馏的方案,下表给出了一个较好的整理:
从中可以看到,存在多种不同技能的蒸馏,包括:
IF:指令遵循,MD:多轮对话,TP:思维模式,RAG:检索增强生成,NLU:自然语言理解;
NLG:自然语言生成,IR:信息检索,SFT:监督微调,D&S:发散与相似,RL:强化学习,RO:排名优化等。
从蒸馏的教师模型上看,大多都是蒸馏chatgpt或者gpt4。
总结
RAG由于对检索阶段依赖过重,所以目前总会陷入到对上下文敏感的问题当中,因此,为了避免来自检索段落的噪声的影响,目前出现了许多针对检索内容进行处理的优化方法,其通常采用检索-细化-生成架构来增强使用llm的RAG的能力,社区所讲的十二、十三讲,都有提及这方面的工作,也可跟踪。
大模型用于数据标注是当前大模型领域的重要应用点之一,其重点利用大模型自身的能力来减轻人工标注数据的压力。
而对一个强模型进行数据蒸馏,也是快速获取数据的重要方式,第二个综述也值得关注,里面也有涉及了很多外延工作,大家可以多去看看,会有收获。
参考文献
1、https://arxiv.org/pdf/2402.13547.pdf
2、https://arxiv.org/pdf/2402.13446
3、https://arxiv.org/abs/2402.13116
关于我们
老刘,刘焕勇,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。
老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。
对于想加入更优质的知识图谱、事件图谱、大模型AIGC实践、相关分享的,可关注公众号,在后台菜单栏中点击会员社区->会员入群加入。
更多AI工具,参考Github-AiBard123,国内AiBard123