今天是2024年7月10日,星期三,北京,天气晴。
我们来看两个问题,一个是回顾老刘说NLP20240709大模型进展早报,并对一些技术方案、开源项目相关的进展进行跟踪,这个会有一定的意义。
另一个问题是,面向单跳知识图谱问答场景的KG-Rank排序策略,也是KG-RAG的一部分,思路很简单,也可看看。
供大家一起参考并思考。
先来回顾昨日大模型进展早报,主要围绕在KG-RANKING等各个方面,这是社区例行日常分享,每日一报,欢迎加入社区,一同共享进展。
【老刘说NLP20240709大模型进展早报】
1、关于KG-RAG中的KG Ranking问题
《KG-Rank: Enhancing Large Language Models for Medical QA with Knowledge Graphs and Ranking Techniques》,这个工作提出了一个名为KG-Rank的增强大模型框架,结合了医学知识图谱(KG)和排名技术,以提高医学领域长形式问答任务中生成内容的事实一致性。
地址:https://arxiv.org/abs/2403.05881.pdf,代码:https://github.com/YangRui525/KG-Rank
关于这一点,我们在下文进行介绍。
2、关于知识图谱与大模型的一些融合分享
可以看看第三届智能决策论坛知识图谱与大语言模型分论坛,https://www.bilibili.com/video/BV1UJ4m1n7TS
3、一个开源的大模型课程
一个大模型课程:https://github.com/datawhalechina/so-large-lm,对大模型基础知识感兴趣的可以关注。
4、一个很有意思的智能体项目
遇见李白AI 智能体:https://github.com/BinNong/meet-libai,可以看看其实现架构。
https://github.com/BinNong/meet-libai/blob/main/asset/images/architecture.png
5、关于大模型评估进展
评估大模型在结构化输出任务上的表现,包括多标签分类、命名实体识别和合成数据生成等结构化输出的性能: https://github.com/stephenleo/llm-structured-output-benchmarks
6、一个新的大模型训练框架
《LLMBox: A Comprehensive Library for Large Language Models》,可以对比Llamafactory看训练资源要求,如https://github.com/RUCAIBox/LLMBox/blob/main/training/gpu_calculator.py
地址:https://arxiv.org/pdf/2407.05563,代码:https://github.com/RUCAIBox/LLMBox
7、多模态RAG动手实践
图片CLIP、音频Wav2Vec做Embedding嵌入生成,https://mp.weixin.qq.com/s/-zC5m9y2ftDsHMasGjGMmQ
8、关于RAG中的检索策略,有四种不同的构造数据的方案。
Query vs Original:简单高效,数据结构是直接使用用户query召回知识库片段;
Query vs Query:便于维护,即使用用户的query召回query,冷启动的时候可以利用模型自动化从对应的知识片段中抽取query;
Query vs Summary:使用query召回知识片段的摘要,构建摘要和知识片段之间的映射关系;
F-Answer vs Original:根据用户query生成fake answer去召回知识片段。
KG-RAG最近受到大家广泛关注,而除了将知识图谱作为chunk的形式约束之外,将已有的知识图谱作为召回源进行增强也是一个很有缺点方向。
这个工作提出了一个名为KG-Rank的增强大模型框架,结合了医学知识图谱(KG)和排名技术,以提高医学领域长形式问答任务中生成内容的事实一致性。
《KG-Rank: Enhancing Large Language Models for Medical QA with Knowledge Graphs and Ranking Techniques》 (https://arxiv.org/abs/2403.05881.pdf,代码:https://github.com/YangRui525/KG-Rank)
这个工作的思想在于,KG-Rank应用了多种排名技术来优化三元组的排序,包括相似度排名、答案扩展排名和最大边际相关性(MMR)排名,这些技术有助于过滤不相关数据、突出关键信息,并确保答案的多样性。此外,在重新排名模型方面,使用医学交叉编码器模型对排名后的三元组进行重新评估,以确保选择最相关的三元组。
我们可以看下实现思路:知识图谱事现成的,选择UMLS(Unified Medical Language System)作为医学知识图谱输入。
1、Step 1: Entity Extraction and Mapping实体提取和映射
使用医学命名实体识别(NER)提示从问题Q中提取关键实体,并将其映射到知识图谱G中的相应实体。
具体实现上,直接采用一个医学NER提示PMedNER来识别相关医学实体EQ,然后将每个实体映射到知识图谱G中,相应实体prompt进行提示大模型进行提取:
2、Step 2: Relation Retrieval and Triplet Ranking关系检索和三元组排名
在识别了相应的实体后,从KG中检索它们的一级(one-hop)关系,并提出排名方法以提取最相关的信息。
这涉及到将问题Q和每个三元组编码,编码模型使用UmlsBERT(https://arxiv.org/abs/2010.10391),然后使用以下三个方案对三元组进行排名:
相似度排名:计算问题嵌入q与每个关系嵌入rij之间的相似度得分;
答案扩展排名:先使用LLM生成问题Q的幻觉答案(hallucinatory)A,然后编码[Q, A]的组合以获得文本嵌入t,接着使用扩展的问题嵌入t在向量空间中寻找最相似的三元组;
最大边际相关性(MMR)排名:先确定与问题Q相似度得分最高的三元组。对于剩余的三元组,我们根据已经选择的三元组动态调整它们的相似度得分。
3、Step 3: Re-Ranking重新排名
在排名阶段之后,使用医学交叉编码器模型对三元组进行重新评估,确保选择最相关的三元组。
4、Step 4: Obtaining LLM Response获取LLM响应
将重新排名后的最高三元组与任务提示结合,输入到LLM中以生成答案。
其核心在于结合prompt的模版,如下:
总的来说,这种方案实际上只能做单跳,其使用各种排名策略,最终还是为了解决能够召回大最佳的三元组,其中对于三元组等各种embedding的组合思想,也借鉴,尤其是生成伪答案的方式,其实跟RAG中常用策略也十分类似。
本文主要看了两个问题,一个是回顾老刘说NLP20240709大模型进展早报,并对一些技术方案、开源项目相关的进展进行跟踪,这个会有一定的意义,另一个是面向单跳知识图谱问答场景的KG-Rank排序策略,也是KG-RAG的一部分,思路很简单,也可看看。
1、https://arxiv.org/abs/2403.05881.pdf
老刘,刘焕勇,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。
老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。
对于想加入更优质的知识图谱、事件图谱、大模型AIGC实践、相关分享的,可关注公众号,在后台菜单栏中点击会员社区->会员入群加入。