鲁智深
Yichi Zhang, Zhuo Chen, Wen Zhang, Huajun Chen
隶属于浙江大学计算机学院和软件学院
本文主要探讨了如何将有用的知识图谱结构信息融入大语言模型中,以实现大语言模型中的结构感知推理。
基于大语言模型的知识图补全(KGC)旨在使用LLM预测KGs中缺失的三元组。但目前对基于LLM的KGC的研究有限,缺乏对LLM推理能力的有效利用,忽略了KGs中重要的结构信息,阻碍了LLM获得准确的事实知识。
为解决这个问题,本文研究如何将有用的KG结构信息融入到LLM中,实现LLM的结构感知推理。首先将现有的LLM范式转移到结构感知设置中,提出了知识前缀适配器(KoPA)来实现这一目标。KoPA采用结构嵌入预训练来捕获KG中实体和关系的结构信息。然后将知识前缀适配器告知LLM,该适配器将结构嵌入映射到文本空间中,并获得虚拟知识tokens作为输入prompt的前缀。
对这些基于结构感知的LLM的KGC方法进行了全面的实验,并提供了深入的分析,比较了结构信息的引入如何更好地提高LLM的知识推理能力。
一个KG记为 G = ( E , R , T , D ) G=(E,R,T,D) G=(E,R,T,D),其中 E , R E,R E,R分别为实体集、关系集。 T = ( h , r , t ) ∣ h , t ∈ E , r ∈ R T={(h,r,t)|h,t∈E,r∈R} T=(h,r,t)∣h,t∈E,r∈R是三元组集合, D D D是每个实体和关系的描述集。我们将 D ( e ) , D ( r ) D(e),D(r) D(e),D(r)表示为每个实体 e ∈ E e∈E e∈E和每个关系 r ∈ R r∈R r∈R的简短文本描述。例如,实体‘/m/0ctzf1’的文本描述为D(‘/m/0ctzf1’)=“The Transformer”。
将LLM应用于KGC任务时,将LLM表示为作为文本解码器的 M M M。模型M的输入文本序列 S S S由几个部分组成:指令提示 I I I、三元组提示 X X X和可选的辅助提示 U U U。指令提示 I I I是手动准备的指导LLM M M M执行KGC任务的指令。三元组提示 X X X包含需要处理的三元组的文本信息,可以记为:
X ( h , r , t ) = D ( h ) ⊕ D ( r ) ⊕ D ( t ) X(h,r,t)=D(h)⊕D(r)⊕D(t) X(h,r,t)=D(h)⊕D(r)⊕D(t)
其中 ( h , r , t ) ∈ T (h,r,t)∈T (h,r,t)∈T是一个三元组, ⊕ ⊕ ⊕表示文本标记连接操作。辅助示例 U U U是针对不同设置的可选prompt。
以三元组分类作为切入点,研究如何利用LLM来完成KGC任务。三元组分类是一个基本的KGC任务,目的是对给定的三元组进行二元分类任务。而在LLM范式中,所有的任务都被转换为文本生成的形式。因此,我们希望模型 M M M给定文本序列输入 S = I ⊕ U ⊕ X S = I⊕U⊕X S=I⊕U⊕X回答真或假。
这个任务可以被建模为一个文本分类任务。但三元组分类不同于普通的文本分类,因为三元组提示符中的实体和关系具有由给定的KG定义的复杂语义信息。如果不知道这种类型的信息,模型答案的内容是不可靠的和不稳定的。尽管在LLMs中存在大量的常识,研究表明大型模型对细粒度的事实知识麻木,会陷入幻觉。因此,将KG信息整合到提示符中,以提供更多的辅助信息,并指导LLM进行结构感知推理,是实现优秀的基于LLM的KGC的关键。
无训练推理是一种利用LLM解决下游任务的有效方法。需要准备一个合适的prompt模板来获得模型 M M M生成的结果。主流无训练方法包括zero-shot推理和上下文学习。
zero-shot推理方法(ZSR):Zero-shot推理是LLM在没有辅助信息 U U U的情况下完成推理任务的一种直接方法。因此,ZSR的输入序列可以记为 S z s r = I z s r ⊕ X S_{zsr}=I_{zsr}⊕X Szsr=Izsr⊕X。LLM M M M的解码过程可以表述为:
A z s r = a r g m a x A P M ( A │ S z s r ) = a r g m a x A P M ( A ∣ I z s r , X ) A_{zsr}=argmax_A P_M (A│S_{zsr} )=argmax_A P_M (A|I_{zsr},X) Azsr=argmaxAPM(A│Szsr)=argmaxAPM(A∣Izsr,X)
其中, A A A是模型 M M M生成的答案, I z s r I_{zsr} Izsr是ZSR的指令模板。在ZSR的设置中,没有向输入序列 S z s r S_{zsr} Szsr中添加KG信息。
ZSR提示符中的确定性信息只是测试三元组的文本描述。由于设置限制,ZSR无法合并KG信息,否则不能称为zero-shot。
具有结构感知示例的上下文学习方法(ICL):作为另一种无训练范式,上下文学习允许模型 M M M在输入 S S S中添加辅助示例 U U U,并以类比推理的形式完成任务:
A i c l = a r g m a x A P M ( A │ S i c l ) = a r g m a x A P M ( A ∣ I i c l , U , X ) A_{icl}=argmax_A P_M (A│S_{icl} )=argmax_A P_M (A|I_{icl},U,X) Aicl=argmaxAPM(A│Sicl)=argmaxAPM(A∣Iicl,U,X)
对于三元组分类任务, U U U应该是一些三元组,其标签形式为 ( X i , y i ) , 1 ≤ i ≤ k {(X_i,y_i),1≤i≤k} (Xi,yi),1≤i≤k,其中 X i X_i Xi是示例三元组。用个示例将ICL表示为-shot ICL。
示例三元组可以从现有的训练KG中随机采样。然而,为了进一步纳入测试三元组 ( h , r , t ) (h,r,t) (h,r,t)的相对KG信息,我们建议对位于 h h h和 t t t的局部结构中的三元组进行采样,这意味着每个采样三元组中的一个实体应该是 h h h或 t t t。此外,由于现有的KG只由正三元组组成,我们采用负抽样对负三元组进行抽样形成示例。对于平衡预测,正三元组和负三元组的数量是相同的。在示例prompt中,正的三元组被标记为真,负的三元组被标记为假。
通过这样做,我们将局部结构信息融入到具有正样本和负样本的示例提示U中。这种结构感知的示例可以更好地增强模型M的类比推理过程。
指令微调旨在对 LLM 进行微调,使其遵循人类指令并完成指令提示中提到的任务。
Vanilla指令微调:在普通IT的设置中,指令提示 I i t I_{it} Iit将描述完成三元组分类任务的细节,而三元组提示 X X X由输入的三元组分类任务组成。输入模板中不包含其他辅助示例。为了训练模型 M M M,输入序列被组织为 S i t = I i t ⊕ X ⊕ A i t S_{it}=I_{it}⊕X⊕A_{it} Sit=Iit⊕X⊕Ait。其中, A i t A_{it} Ait为训练数据的预测答案。模型 M M M对下一个单词预测任务进行了微调,这是一种训练LLM的通用方法。训练目标可表述为:
L i t = − 1 / S i t ∑ ( i = 1 ) ( ∣ S i t ∣ ) l o g P M ( s i ∣ s < i ) L_{it}=-1/S_{it} ∑_{(i=1)}^{(|S_{it} |)}logP_M (s_i |s_{Lit=−1/Sit(i=1)∑(∣Sit∣)logPM(si∣s<i)
其中, s i s_i si(= 1,2,……,| S i t S_{it} Sit|)表示输入序列 S i t S_{it} Sit的文本tokens。在推理阶段,采用模型 A i t A_{it} Ait来预测测试数据的答案。
Vanilla IT 只对 LLM 进行微调,以学习单个三元组中的知识,从而进行判别。这种方法使得充分利用KG中丰富的语义变得困难,模型性能有限。
结构感知的指令微调:KG的结构信息在KGC任务中起着重要的作用。为了在微调阶段融入这些KG信息,我们通过添加输入三元组的邻域描述来实现这一目标。具体来说,可以对头部ℎ和尾部的邻域进行采样,并将邻域三元组的文本描述放在示例提示 U i t U_{it} Uit中。这样,输入的训练序列就被增强为 S i t = I i t ⊕ U i t ⊕ X ⊕ A i t S_{it}=I_{it}⊕U_{it}⊕X⊕A_{it} Sit=Iit⊕Uit⊕X⊕Ait。将这种方法命名为结构感知指令调优,因为实体的局部结构信息以邻域三元组的形式添加到输入序列中。
前一节中提到的融入KG结构信息的基本方法的重点是将邻域信息以文本的形式添加到输入序列中。但以文本形式表示KG结构信息并不是一个好的选择,可能会给提示带来更多无效或冗余的信息。无限期地增加提示符的长度是不可扩展的和无效的,因为较长的上下文会导致模型能力的下降和高计算消耗。此外,也很难在KG中找到对三元组识别具有决定性作用的结构信息。
为了解决这些问题,引入知识前缀适配器(简称KoPA),将KG结构信息合并到LLM中进行三元组分类。KoPA方法分为两部分:首先通过结构嵌入预训练提取KG中实体和关系的结构信息,然后通过结构前缀适配器将这些信息注入输入序列,LLM进一步利用结构注入序列进行微调。
KoPA没有在输入序列中添加关于邻域信息的文本,而是通过自监督的结构嵌入预训练来提取实体和关系的结构信息。对于每个实体 e ∈ E e∈E e∈E和每个关系 r ∈ R r∈R r∈R,我们分别学习一个结构嵌入 e ∈ R ( d e ) , r ∈ R ( d r ) e∈R^{(d_e)},r∈R^{(d_r)} e∈R(de),r∈R(dr),其中 d e d_e de, d r d_r dr为嵌入维数。将KG结构信息编码,并将其引入到LLM的文本表示空间中。
参考现有的基于嵌入的KGC范式,定义了一个评分函数 F ( h , r , t ) F(h,r,t) F(h,r,t)来衡量三元组 ( h , r , t ) (h,r,t) (h,r,t)的合理性。采用了通过负采样的自监督预训练目标:
L p r e = 1 / ( ∣ T ∣ ) ∑ ( h , r , t ) ( − l o g σ ( γ − F ( h , r , t ) ) ) − ∑ ( i = 1 ) K p i l o g σ ( F ( h i ′ , r i ′ , t i ′ ) − γ ) L_{pre}=1/(|T|) ∑_{(h,r,t)}(-logσ(γ-F(h,r,t))) - ∑_{(i=1)}^K p_i logσ(F(h'_i,r'_i,t'_i)-γ) Lpre=1/(∣T∣)(h,r,t)∑(−logσ(γ−F(h,r,t)))−(i=1)∑Kpilogσ(F(hi′,ri′,ti′)−γ)
其中 γ γ γ为边, σ σ σ为s型激活函数, h i ′ , r i ′ , t i ′ h'_i,r'_i,t'_i hi′,ri′,ti′(= 1,2,…,)为 ( h , r , t ) (h,r,t) (h,r,t)的个负样本。
通过最小化这种预训练的损失,每个实体和关系的结构嵌入被优化,以适应其所有的相对三元组,从而在嵌入中捕获KG的结构信息,如子图结构和关系模式。
经过结构嵌入预训练后,我们可以得到三元组(ℎ,,)的结构嵌入(,,),其中KG的结构信息被编码在里面。然而,结构嵌入是在针对LLM M M M的文本标记表示空间的不同表示空间中学习的,这意味着 M M M不能直接理解这些嵌入。因此应用一个知识前缀适配器 P P P,将它们映射到 M M M的文本标记表示空间中。具体来说,结构嵌入通过 P P P转换为几个虚拟知识token K:
K = P ( h ) ⊕ P ( r ) ⊕ P ( t ) K = P (h) ⊕ P (r) ⊕ P (t) K=P(h)⊕P(r)⊕P(t)
在实践中,适配器 P P P是一个简单的投影层。然后将 K K K放在原始输入序列 S S S的前面,作为指令和三元组提示符的前缀 S k p a = K ⊕ I i t ⊕ X S_{kpa}=K⊕I_{it}⊕X Skpa=K⊕Iit⊕X。这样,由于仅使用解码器的LLM中的单向注意力,所有后续的文本Token都可以看到这些前缀。这样,文本Token可以对输入三元组的结构嵌入进行单向注意,从而在微调和推理期间实现结构感知提示。在训练过程中,冻结预训练好的结构嵌入。该适配器经过优化,可以学习从结构知识到文本表示的映射,并在推理阶段将其泛化到新的三元组,这将有利于文本描述,并从另一个角度提供三元组信息,从而增强预测。
在实验中,使用三个公共的KG基准UMLS,CoDeX-S 和FB15K-237N来评估所提出的基于LLM的KGC方法的能力。UMLS是一个经典的医学知识图,包括关于医学和卫生保健的一般知识。CoDeX-S是从百科中提取的百科全书式KG。
基线方法:在实验中,将提出的方法与三元组分类任务上的三大类基线模型进行了全面的比较,这是KGC的一个重要子任务。KGC基线可以分为三个部分:基于嵌入的方法、基于PLM的方法和基于LLM的方法。用于这些基线的具体模型如下:
(1)嵌入式KGC方法:选择四种传统的基于嵌入的KGC方法进行比较,即TransE、DistMult、KGC和RotatE。这些方法通过学习到的结构嵌入和模型中定义的分数函数来预测三元组合理性。
(2)基于PLM的KGC方法:选择KG-BERT和PKGC作为基于PLM的KGC基线,这是专注于三元组分类任务的经典方法。这些方法将三元组分类视为一个二元文本分类任务。
(3)基于LLM的KGC方法:基于LLM的KGC研究仍处于早期阶段。只有KGLLaMA是基于LLM的KGC基线。除了KGLLaMA之外,在第2节中提出的方法,包括ZSR、ICL、IT和结构感知IT(增强型IT)也将作为基线。
此外,进一步将基于LLM的方法分为两类:无训练方法和微调方法。无训练方法包括ZSR和ICL,其余均为微调方法。
所有基于LLM的方法,使用Alpaca-7B作为LLM的主干。KoPA使用RotatE和结构嵌入预训练的得分函数,适配器是一个512×4096的线性投影层。
评估指标:三元组分类任务本质上是一个二元分类任务。所有的测试数据集都是标签平衡的。因此,使用accuracy、precision、recall、和F1-score作为评价指标。
三元组分类的主要实验结果如上表所示。总的来说,可以发现,与现有的16个基线模型相比,KoPA在所有三个数据集上取得了优越的准确性和F1分数结果。以CoDeX-S为例,KoPA的F1分数提高了1.81%,准确率提高了1.85%。当在KoPA中使用预训练的RotatE嵌入时,可以观察到KoPA明显优于原始的基于嵌入的RotatE方法,特别是在更大、更具挑战性的数据集上,如CoDeX-S和FB15K-237N。
同时,与所有基于LLM的方法相比,可以看到,如果没有微调,LLM就不能很好地理解KG的结构信息。即使GPT-3.5-turbo(175B参数)具有出色的能力,zero-shot LLM在三元组分类任务中表现得非常差。虽然ICL提供的示例可以包含KG信息,但性能增益是有限的。此外,无训练方法的预测结果是有偏差的,很容易陷入全对或全错的极端,因为它们的召回率要么很高,要么很低,但F1分数一直相对较低。
然而,微调LLM可以将KG信息引入到LLM中,整体性能有了明显的改进。同时,尽管结构感知IT利用三元组的邻域信息增强了输入提示,但与KoPA相比,其性能也有限。这表明,与基于文本的辅助提示相比,结构嵌入包含了更多语义丰富的信息,LLM也可以通过前缀适配器来理解。
主要实验结果表明了KoPA的有效性。为了进一步验证KoPA的通用性和可转移性,进行了一个新的可转移性实验。在本实验中,我们将证明知识前缀适配器将学习从结构嵌入转换到文本tokens表示,并提供语义丰富的辅助信息,以增强LLM推理的解码过程。
通过测试KoPA对不出现在训练阶段的实体的影响来证明这一点,这在其他KGC的作品中也被称为归纳设置。我们将KG数据集分割成一个具有定义的归纳率(IR)的归纳设置,它指的是在训练过程中看不见的实体的比例。例如,如果IR=为10%,我们将随机选择10%的实体作为归纳实体集。训练集中头部或尾部在归纳集中的任何三组训练都将在训练过程中被去除。此外,测试集中的三元组将分为两部分:可见(S)部分和看不见(U)部分。如果三元组的头部或尾部在归纳实体集中,它将被视为看不见的。
只用剩余的可见的三元组来微调LLM,并对已看到和未看到的三元组进行测试。在这种情况下,一组实体将不会参与训练过程,而LLM也不会看到它们的文本描述,这将使测试过程更具挑战性。我们报告了已看到(S)、未看到(U)和所有(A)测试三元组的准确性和F1分数,如下图所示,有三种微调方法: KoPA、普通IT和结构感知的IT(图中增强了IT)。
从雷达图中可以观察到,KoPA的性能优于其他方法,并且当IR增加时,性能下降更小。具有文本形式的邻域三元组的结构感知IT(增强型IT)的性能更加不稳定。这些现象表明,知识前缀适配器可以学习从结构嵌入到文本表示的一个很好的映射,即使在训练过程中看不到实体,这也是可转移的。从KG中捕获的结构嵌入在告知LLM有用的结构信息方面发挥了更重要的作用。
为了更直观地了解KoPA,本节从宏观和微观的角度进行了一个案例研究。从宏观的角度来看,我们计算了多个模型的预测重叠,并绘制出如图4所示的维恩图。
从图中可以发现,KoPA有很大一部分预测没有与其他几个模型相交,这意味着KoPA对一些测试数据做出了正确的预测,而许多其他模型的预测并不正确。这表明,KoPA中包含的结构信息在做出正确的预测方面具有重要作用。举一个简单的例子,一个测试三元组(约翰·兰迪斯,导演电影,来到美国)被RotatE模型和vanilla指令微调LLM预测为错误的。检索邻域三元组(来到美国,地点,纽约),(约翰·兰迪斯,国籍,美国),(来到美国,类型,浪漫喜剧),(喜剧,常见netflix标题,来到美国),结构感知微调LLM仍然做出错误的预测,因为邻域信息在当前预测的判断中几乎没有用处,尽管它们是正确的事实。KoPA中应用的结构嵌入比文本形式的结构信息包含更多的信息,并且我们更容易通过结构预训练过程进行提取。因此,KoPA在三元组分类任务中优于其他模型。
Talk Like a Graph: Encoding Graphs for Large Language Models
@article{zhang2023making,
title={Making Large Language Models Perform Better in Knowledge Graph Completion},
author={Zhang, Yichi and Chen, Zhuo and Zhang, Wen and Chen, Huajun},
journal={arXiv preprint arXiv:2310.06671},
year={2023}
}