今天是2024年10月18日,星期五,北京,天气阴。
来回顾下昨日大模型早报,社区日常互动,欢迎加入。
现有的集成LLMs和KGs的方法主要分为两类:一类是基于查询实体的直接三元组检索,另一类是通过问题分解或子答案生成来指导LLMs生成相关知识。
早上读到一个工作,还蛮有趣的,《Pyramid-Driven Alignment: Pyramid Principle Guided Integration of Large Language Models and Knowledge Graphs》:https://arxiv.org/pdf/2410.12298,我们来看看。
供大家一起参考并思考。
一、大致思想及金字塔对齐模块(Pyramid Alignment)
Figure 2 描述了Pyramid-Driven Alignment (PDA) 框架的总体结构,该框架分为两个主要部分:Pyramid Alignment 和 KG Reasoning。
第一阶段(Pyramid Alignment)侧重于理解和结构化问题,第二阶段(KG Reasoning)侧重于利用 KG 的结构化知识来找到最佳答案。
其中:
Pyramid Alignment是PDA框架中的一个关键模块,它负责将输入问题转换成一个层次化的金字塔结构,以生成与知识图谱(KG)的推理路径对齐的演绎知识。
Pyramid Alignment 模块的过程可以形式化表达如下:
输入问题转换:使用 5W1H(What, Who, When, Where, Why, How)框架来分析和反映输入的问题。将问题q反映到其构成的5W1H元素中,每个元素表示为Wi|i∈Z,其中Z是由LLM确定的相关5W1H元素的集合。
生成陈述:为每个Wi生成陈述Si,作为构建金字塔结构的基础证据。
构建主点和子点:利用陈述S和金字塔的层次结构,生成主点M和相应的子点I。其中,主点M是金字塔的顶端,概括了问题的核心。子点I是支持主点的演绎知识,它们通过演绎推理相互连接。
上述这几步,都是通过prompt来进行控制:
其中,这个金字塔指南的设计有点意思,如下:
首先,使用5W1H分析并反思问题,并得出一个主要观点。
- 5W1H分析应该是逐步的,并以逻辑顺序进行演绎。
- 只包括与问题相关的5W1H元素。
- 陈述应该基于每个相关5W1H元素的事实。
- 如果你对某个实体不确定,你可以使用斯坦福命名实体识别器中的实体类型来替换陈述中的实体。
- 总结陈述以得出主要观点。然后,根据5W1H陈述,提供支持主要观点的子点。
- 每个子点应该辩证地总结一个5W1H陈述。
- 每个子点应该遵循演绎关系,即每个子点都应该在前一个子点的基础上建立或逻辑上跟随。
- 如果你对某个实体不确定,你可以使用斯坦福命名实体识别器中的实体类型来替换子点中的实体。
- 每个子点应该是一个实体,而不是一个建议、指示或程序。
在此之后,再进行动态调整,每个子点都根据其对主点的影响进行动态调整,以确保最后一个子点与回答问题直接相关。
这个具体的实现逻辑是,为每个子点分配一个逻辑关联和贡献度的评分,这些评分基于子点与主点的关系以及子点对答案的贡献。虽然论文里没有明确说明,可以通过语义分析、共现频率、或其他统计方法来实现。
此外,如果LLM在生成子点时遇到实体歧义,Pyramid Alignment 模块会提示 LLM使用Stanford Named Entity Recognizer中的实体类型来消歧这些实体。
二、KG Reasoning模块执行逻辑
KG Reasoning模块利用Pyramid Alignment模块产生的对齐知识来从知识图谱(KG)中检索准确的三元组(triples),并使用这些三元组来回答给定的问题。
首先是初始化,先根据问题q中的实体,初始化一组任务相关实体Eq={eq0, eq1, ..., eqm},其中m是问题中中的实体数量,并使用任务相关实体初始化一个子图G0,这个子图将用于后续的迭代检索和推理步骤。
其次是进行迭代,对于每次迭代i,直到达到集合Z的最终索引,执行以下步骤:
1)检索步骤
首先将Gi−1中的每个三元组(h,r,t)转换为文本格式,然后使用余弦相似度公式计算当前对齐知识Ii和Gi−1中所有h,r,t的嵌入相似度,接着根据相似度分数对所有三元组进行排序。最后选择相似度最高的前N个三元组,记为Ti。
2)推理步骤
首先使用上一步检索的三元组Ti进行推理;提取Ti中的尾实体t,并使用它们构建当前迭代的更专注的子图。然后从KG中检索每个尾实体的相邻三元组,形成专注的子图Gi。最后,将这个子图Gi用作下一次迭代的检索过程的输入。
用下面这张图来理解就是比较清楚了:
但是难度在于,什么时候迭代结束,这个是个阈值问题。
3)知识检索与合并
通过上述迭代过程,收集所有迭代中生成的三元组T。 这些三元组随后与给定的问题一起被呈现给LLM,以生成回答。这种丰富的输入有助于产生更准确和信息丰富的答案。
三、几个具体的例子具像化理解
我们可以来看看两个例子,看看具体的数据流。
例子1:
例子2:
总结
本文主要介绍了《Pyramid-Driven Alignment: Pyramid Principle Guided Integration of Large Language Models and Knowledge Graphs》的一些实现细节,读下来还蛮有趣的,但代码并为开源,并且在实际落地中,明显存在很多问题,讲3点:
一个是如前所述,迭代次数的选择可能需要手动调整,并且可能依赖于具体的问题和知识图谱的规模。自动化确定最优迭代次数的方法可能需要进一步研究。
此外,在计算资源和时间上,PDA框架,特别是其KG Reasoning模块,可能需要显著的计算资源和时间来处理大规模的知识图谱和执行多次迭代。这可能限制了它在资源受限的环境中的实用性。
最后,其对于金字塔原则进行问题的拆解和构建,极大地依赖于大模型自身的能力,并且很粗暴,这个在准确性上也很难保证。
批判性的看一些工作,会更有收获,供大家一起参考。
参考文献
1、https://arxiv.org/pdf/2410.12298
关于我们
老刘,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。
对大模型&知识图谱&RAG&文档理解感兴趣,并对每日早报、老刘说NLP历史线上分享、心得交流等感兴趣的,欢迎加入社区,社区持续纳新。
加入会员方式:关注公众号,在后台菜单栏中点击会员社区->会员入群加入