跳到主要内容 K-RagRec:基于知识图谱检索增强生成的 LLM 推荐系统 | 极客日志
Python AI 算法
K-RagRec:基于知识图谱检索增强生成的 LLM 推荐系统 介绍 K-RagRec 框架,利用知识图谱检索增强生成(RAG)技术解决大语言模型在推荐系统中的幻觉、知识过时及领域知识缺失问题。通过多跳知识子图索引、流行度选择性检索策略及图神经网络编码,K-RagRec 实现了高效的结构化知识利用。实验表明该方法在多个数据集上显著优于基线模型,有效降低了推理成本并提升了推荐准确率。
橘子海 发布于 2026/4/5 更新于 2026/4/17 7 浏览摘要
原文翻译
推荐系统在我们的日常生活中变得越来越重要,有助于缓解各类面向用户的在线服务中的信息过载问题。大语言模型(LLMs)的出现取得了显著成就,展现出其推动下一代推荐系统发展的潜力。尽管取得了这些进展,基于大语言模型的推荐系统仍面临源于其模型架构的固有局限性,尤其是幻觉问题(生成虚假信息)以及缺乏最新知识和领域特定知识的问题。近年来,检索增强生成(RAG)技术受到了广泛关注,它通过利用外部知识源来增强大语言模型的理解和生成能力,从而解决这些局限性。然而,传统的 RAG 方法往往会引入噪声,并且忽略了知识中的结构化关系,这限制了它们在基于大语言模型推荐系统中的效果。为了解决这些问题,我们提出从知识图谱中检索高质量、最新的结构化信息,以增强推荐效果。具体而言,我们设计了一个检索增强框架,名为 K-RagRec,该框架通过整合外部知识图谱的结构化信息,助力推荐生成过程。我们进行了大量实验,验证了所提方法的有效性。
核心解读
摘要就是论文的'浓缩版故事',核心逻辑:
背景:推荐系统很重要,大语言模型能做推荐,但有两个大问题——'瞎编(幻觉)'和'知识老/不全(缺最新/领域知识)'。
现有方案的不足:传统 RAG 能补知识,但会带'杂音(噪声)',还不懂知识图谱里的'关系'。
我们的方案:搞个叫 K-RagRec 的框架,专门从知识图谱里拿'结构化的好信息',帮大模型做推荐。
结果:实验证明我们的方法有用。
1 引言
原文翻译 推荐系统作为一种旨在帮助人们在日常生活中做决策的技术,在各个领域的影响力日益增强,例如在线购物、工作匹配和社交媒体。近年来,大语言模型(LLMs)取得了重大突破,进一步推动了各个领域的发展。特别是随着大语言模型的成功,推荐系统迎来了快速发展。通过在海量数据上训练,大语言模型能够获取广泛的知识,并展现出卓越的语言理解能力。这种能力使基于大语言模型的推荐系统能够通过细致理解相关属性(例如用户画像、物品描述、历史交互记录)来捕捉用户偏好,从而实现更准确的推荐。因此,基于大语言模型的推荐系统已成为推荐技术的一种新范式。
核心解读
核心:铺垫'大语言模型做推荐'的合理性和优势。
逻辑链:
推荐系统的应用场景(购物、找工作、社交)→ 很重要。
大语言模型很牛(训练数据多、理解能力强)→ 能看懂用户画像、物品描述。
结论:大语言模型推荐是新趋势(新范式)。
原文翻译 然而,尽管基于大语言模型的推荐系统具有强大的语言理解和泛化能力,它们仍面临重大挑战,包括幻觉问题以及缺乏最新知识和领域特定知识。具体而言,一个关键问题是,由于大语言模型的固有局限性,基于大语言模型的推荐系统可能会生成完全虚构的推荐结果。此外,大语言模型通常缺乏最新知识,这使其无法及时推荐最新的电影或产品。再者,大语言模型往往缺乏领域特定知识,因为在大语言模型的训练阶段,面向推荐任务的语料库非常有限。为了缓解这些问题,一个潜在的解决方案是用最新的和领域特定的知识频繁微调大语言模型。然而,大语言模型的海量参数使得这一过程计算成本高昂且耗时,严重阻碍了其在现实世界中的实际应用。
核心解读
核心:指出'大语言模型做推荐'的 3 个致命问题 + 现有解决方案的不足。
3 个问题拆解:
幻觉:推荐不存在的东西。
知识过时:模型训练数据截止到某时间,无法推荐之后的新内容。
缺领域知识:模型知道通用知识,但不知道特定领域的关联。
现有方案的坑:'频繁微调'——但大模型有几百亿参数,微调一次要花几十万、几天时间,根本不现实。
原文翻译 最近,利用外部数据库提供特定知识的检索增强生成(RAG)技术展现出解决这些问题的潜力。通过整合外部知识库,RAG 能够检索相关且最新的信息,以补充大语言模型的固有知识,从而缓解幻觉问题和知识缺口。这使得 RAG 成为一种很有前景的技术,能够让大语言模型在无需昂贵微调的情况下提供有效的推荐。
核心解读
核心:引入'RAG 技术'作为潜在解决方案,并说它的好处。
逻辑:RAG = 大模型 + 外部知识库检索。
关键优势:不用微调大模型!只要更新外部数据库,成本低、速度快。
原文翻译 尽管具有这种潜力,但依赖文档和段落的传统 RAG 方法往往会引入不必要的噪声,甚至有害干扰,这会对推荐的准确性和可靠性产生负面影响。此外,典型的 RAG 方法忽略了实体之间的结构化关系,导致基于大语言模型的推荐系统的推理能力不够理想。为了解决这些局限性,一个可行的方案是整合结构化知识(例如物品的知识图谱)来帮助提升推荐性能。具体而言,知识图谱提供了结构化、事实性和可编辑的知识表示,能够为推荐提供可靠的知识来源。如图 1(c)所示,从知识图谱中检索结构化知识可以显著增强基于大语言模型的推荐系统的推荐能力。
核心解读
核心:传统 RAG 还不够好,需要用'知识图谱'替代'文档/段落'作为外部知识库。
传统 RAG 的两个问题:
有噪声:检索到一堆无关的影评、新闻段落。
不懂结构化关系:文档里可能提到关系,但看不出关联。
知识图谱的优势:结构化、事实性、可编辑。
原文翻译 然而,有效地检索知识图谱以增强大语言模型的推荐能力面临着挑战。首先,知识图谱以结构化格式存储丰富的事实知识。简单检索实体(即物品)的三元组或一阶邻居(直接关联的实体)并结合语义信息,会忽略实体/物品之间更高阶的邻域效应,导致推荐性能不佳。其次,无论检索是否必要或内容是否相关,都对每个物品进行无差别检索,会降低推荐性能,同时严重降低模型的效率。此外,知识图谱中的结构化数据通常以序列化文本的形式编码给大语言模型,这不足以充分利用数据中固有的结构化信息。因此,探索更有效、更具表达力的结构化数据表示方式至关重要,使大语言模型能够有效利用检索到的知识子图的结构信息进行推荐。
核心解读
核心:直接用知识图谱做检索也有 3 个技术难题,这是我们论文要解决的核心问题。
3 个难题拆解:
检索太浅:只查'直接关联'的实体,没拿到高阶关联。
检索效率低:对所有物品都检索,浪费时间。
结构化信息没用好:把知识图谱改成文字传给大模型,没利用到结构优势。
原文翻译 为了解决上述挑战,在本文中,我们提出了一个知识检索增强推荐框架,名为 K-RagRec,旨在通过从物品知识图谱中检索相关知识,为大语言模型时代的推荐生成提供最新、可靠的知识。具体而言,我们提出的框架首先在物品知识图谱上进行粗粒度和细粒度的知识子图索引,构建知识向量数据库。接下来,设计了一种 popularity 选择性检索策略,以确定哪些物品需要被检索,然后从知识向量数据库中检索特定的子图。为了提升检索质量并确保最相关的结果排在输入的前面,我们随后对检索到的知识子图进行重排序。最后,我们引入了一个图神经网络(GNN)和投影器(projector),将检索到的知识子图对齐到大语言模型的语义空间,以实现知识增强推荐。本文的主要贡献如下:
我们提出了一个新颖的框架,从知识图谱中检索可靠知识,以增强大语言模型的推荐能力。值得注意的是,我们为知识图谱引入了一种灵活的索引方法,能够全面呈现知识图谱中节点的邻域信息。
我们设计了一种 popularity 选择性检索策略,基于物品的流行度确定是否需要检索该物品,显著提升了效率。
我们为结构化数据引入了一种更具表达力的图编码器,使大语言模型能够有效利用结构信息,并避免长上下文输入。
我们在多个真实世界数据集上进行了全面实验,以评估所提出的 K-RagRec 框架的有效性。
核心解读
核心:我们的 K-RagRec 框架怎么解决上面的 3 个难题 + 4 个核心贡献。
框架步骤拆解:
知识子图索引:不仅查一阶邻居,还查高阶邻居,并分'粗粒度'和'细粒度'索引。
流行度选择性检索:热门物品不检索,冷门物品才检索。
知识子图重排序:按和用户需求的相关性排序,只把最相关的传给大模型。
GNN + 投影器:不用把知识图谱改成文字,而是用 GNN 直接处理结构化数据。
4 个核心贡献:灵活索引、选择性检索、图编码器、实验验证。
索引不是向量,是'找子图的目录系统' :向量是子图的'标签',索引是'贴标签 + 建目录 + 快速定位'的整套系统。
代码中的'索引'本质是知识图谱节点/边的嵌入向量 ,用于后续快速检索相关子图。这些索引通过预处理步骤生成并存储为 .pt 文件。
简单说:0.pt 是初始索引,layer2/layer3 是经 GCN 增强后的深层索引,共同用于快速定位相关节点。
'粗细粒度'体现在检索阶段提取的子图范围上,对应 retrieve.py 中 GraphRetrieval 类的子图提取方法:细粒度子图 :get_first_order_subgraph(node)。只包含目标节点及其直接邻居 (一阶邻居)。粗粒度子图 :get_second_order_subgraph(node)。包含目标节点、一阶邻居,以及一阶邻居的邻居 (二阶邻居)。
知识向量数据库 :对应 index_KG.py 生成的 0.pt、layer2_embeddings_W.pt、layer3_embeddings_W.pt,存储节点和边的向量表示。细粒度子图索引 :对应 retrieve.py 的 get_first_order_subgraph,提取目标节点 + 直接邻居的子图,基于向量数据库实现快速检索。粗粒度子图索引 :对应 retrieve.py 的 get_second_order_subgraph,提取目标节点 + 直接邻居 + 二阶邻居的子图,同样依赖向量数据库进行检索。
2 相关工作
原文翻译 近年来,RAG 已成为生成式人工智能领域最具代表性的技术之一,它结合了检索系统和语言模型(LM)的优势,生成连贯且信息丰富的文本。早期方法,如 REALM、RETRO 和 DPR,通常从大规模语料库中检索相关片段,以指导语言模型生成。然而,标准的 RAG 方法往往难以准确检索所有相关文本块,因为文档中存在不必要的噪声甚至有害干扰。为了解决这些局限性,最近的研究专注于从图中检索结构化且可靠的知识,以增强生成效果。例如,Retrieve-Rewrite-Answer 从知识图谱中检索相关子图,并将检索到的子图转换为文本用于生成。G-Retriever 探索从各种类型的图中检索子图,以缓解大语言模型的幻觉问题。
核心解读
核心:介绍 RAG 的发展历程——从'检索文本'到'检索图结构'。
早期 RAG:检索的是'文档片段',缺点是有噪声。
近期 RAG:开始检索'图结构',但它们的问题是:把图转换成文本,还是没利用好结构信息。
原文翻译 随着大语言模型在推荐领域的爆发式发展,已有部分研究对 RAG 在推荐中的应用进行了初步探索。例如,Di Palma 的研究提出利用电影或书籍数据集的知识来增强推荐。然而,从知识图谱中检索可靠的结构化知识以用于推荐的研究仍未得到充分探索,且具有巨大潜力。
核心解读
核心:现有研究的空白——很少有人把'知识图谱 RAG'用在推荐上。
现有相关工作:只是用了'普通数据集',而不是'知识图谱'。
我们的创新点:第一个把'知识图谱的结构化检索'和'推荐系统'结合得这么彻底的。
原文翻译 为了填补这一空白,我们提出从知识图谱中检索知识子图,以增强大语言模型的推荐性能。更多相关工作详见附录 A.3。
核心解读
核心:一句话总结——我们的工作填补了'知识图谱 RAG 用于推荐'的空白。
3 方法论
3.1 预备知识
原文翻译 知识图谱 :在本文中,我们提出利用外部知识数据库(即知识图谱)来增强大语言模型的推荐能力。知识图谱包含大量以三元组形式存在的事实知识:$G={(n, e, n') | n, n' \in N, e \in E}$,其中 $N$ 和 $E$ 分别表示实体集和关系集。例如,三元组(《星际穿越》,由...执导,诺兰)表示电影《星际穿越》由导演诺兰执导。
核心解读
知识图谱的数学定义(不用怕,超简单):
$G$:整个知识图谱。
$n$ 和 $n'$:实体(比如电影、导演、书籍、作者)。
$e$:关系(比如'由...执导''属于...类型''作者是...')。
三元组:(实体 1,关系,实体 2)。
原文翻译 基于大语言模型的推荐 :设 $U={u_{1}, u_{2}, ..., u_{n}}$ 和 $V={v_{1}, v_{2}, ..., v_{m}}$ 分别表示用户集和物品集,其中 $n$ 和 $m$ 分别是用户和物品的数量。基于大语言模型的推荐系统的目标是通过建模用户的历史物品交互记录 $V^{u_{i}}=[v_{1}^{u_{i}}, v_{2}^{u_{i}}, \cdots, v_{|L_{u_{i}}|}^{u_{i}}]$(例如点击、购买等)来理解用户偏好,其中 $|L_{u_{i}}|$ 是用户 $u_{i}$ 的交互序列长度。值得注意的是,物品 $v_{j}$ 的辅助信息(如标题和描述)是公开可用的,可用于增强大语言模型对用户偏好的建模。在我们的设置中,我们让大语言模型从候选集 $C={v_{j}}{j=1}^{M}$ 中选择用户 u 偏好的物品,其中 $M$ 是候选物品的数量。候选集 C 通常包含一个正样本(用户真正喜欢的物品)和 $M-1$ 个负样本(用户不喜欢的物品)。具体而言,对于参数为 $\delta$ 的冻结大语言模型 $f {\delta}$,我们将输入 - 输出序列对表示为(Q, A),其中 Q 是推荐查询/提示词,包含任务描述和用户的历史物品。输出 A 是大语言模型的预测结果。此外,我们在附录 A.2 中介绍了图神经网络(GNN)的相关概念。
核心解读
推荐任务的数学定义(通俗化):
用户集 U:所有使用推荐系统的人。
物品集 V:所有被推荐的东西。
历史交互:用户 u 之前看过的电影。
候选集 C:给用户推荐的候选列表。
提示词 Q:给大模型的指令。
输出 A:大模型选的电影。
关键:大模型是'冻结'的(参数 $\delta$ 不变)——我们不微调大模型,只通过加知识图谱的信息来增强它的推荐能力。
3.2 所提方法概述
原文翻译 如图 2 所示,我们提出的 K-RagRec 包含五个关键组件:用于语义索引的跳域知识子图(Hop-Field Knowledge Sub-graphs for Semantic Indexing)、流行度选择性检索策略(Popularity Selective Retrieval Policy)、知识子图检索(Knowledge Sub-graphs Retrieval)、知识子图重排序(Knowledge Sub-graphs Re-Ranking)和知识增强推荐(Knowledge-augmented Recommendation)。该模型首先对知识图谱中的跳域知识子图进行索引;然后,实施流行度选择性检索策略,确定哪些物品需要被检索或增强;接着,从知识向量数据库中检索特定的子图;随后,对检索到的知识子图进行重排序,以提升检索质量;最后,将检索到的知识子图与原始提示词结合,生成推荐结果。
核心解读
框架 5 个步骤:
索引:给知识图谱的'子图'做标记。
选物品:判断哪些物品需要检索。
检索:根据标记,从知识向量数据库里找出相关的子图。
重排序:把检索到的子图按相关性排序。
推荐:把排序后的子图和原始提示词一起传给大模型。
核心逻辑:先'找对知识',再'选对知识',最后'用好知识'。
3.3 用于语义索引的多跳领域知识子图 这里的知识子图实际上就是 layer2_embeddings_W.pt 和 layer3_embeddings_W.pt 图里面的每个节点融合了邻居信息,本质上每个节点都是一个子图表示。
输入(左侧) :node attributes(节点属性) :表示图中每个节点的特征。edge attributes(边属性) :表示连接两个节点的边的特征。核心模块(中间) :PLM(Pre-trained Language Model,预训练语言模型) :这里指的是 SentenceBert 。捕捉节点和边的语义信息。输出(右侧) :node → z :表示对每个节点生成一个语义嵌入向量 z ,捕捉该节点的上下文语义信息。edge → r :表示对每条边生成一个语义嵌入向量 r ,描述边的关系语义。上方标注 Semantic Information(语义信息) ,说明输出的 z 和 r 是具有语义意义的表示。知识向量数据库 :对应 index_KG.py 生成的 0.pt、layer2_embeddings_W.pt、layer3_embeddings_W.pt,存储节点和边的向量表示。
原文翻译 通常,从知识图谱中检索知识会将知识图谱分割为节点或三元组,并且只检索知识图谱中目标实体附近的局部内容。然而,这些方法只是简单地检索实体(即物品)的一阶邻居,难以在推荐过程中捕捉实体/物品之间的高阶邻域效应。因此,为了有效地从知识图谱中检索知识,我们提出对跳域知识子图进行语义索引,该方法能够灵活地分割知识图谱,并全面呈现知识图谱中节点的邻域信息。如图 2 的组件 1 所示,我们首先引入一个预训练语言模型(PLM),例如 SentenceBert,来捕捉节点 $n_o$ 的语义信息,如下所示:$z_{n_o} = PLM(x_{n_o}) \in R^d$,其中 $d$ 是输出表示的维度。类似地,我们也捕捉知识图谱中边 $e_o$ 的语义信息:$r_{e_o} = PLM(x_{e_o}) \in R^d$,其中 $x_{n_o}$ 和 $x_{e_o}$ 分别是节点 $n_o$ 和边 $e_0$ 的文本属性(例如物品的标题和描述)。
核心解读
核心:解决'检索太浅'的问题——不仅检索一阶邻居,还检索高阶邻居。
跳域 = 几阶关联。
步骤 1:用预训练语言模型(PLM,比如 SentenceBert)给'节点'和'边'做'语义编码'。
节点编码(公式 1):比如把'《沙丘 2》'的标题、描述变成一个 d 维向量。
边编码(公式 2):比如把'类型'这个关系变成一个 d 维向量。
为什么要编码?因为电脑看不懂文字,只能处理向量。
在知识图谱中,'hop'指的是**'跳数'或'步数',用来描述两个实体之间的 路径长度**。1-hop neighbors(一跳邻居):直接与某个节点相连的节点。2-hop neighbors(两跳邻居):通过一个中间节点连接的节点。k-hop:k 步以内的所有节点。
原文翻译 为了从知识图谱中检索粗粒度和细粒度图结构的细致知识,我们引入了一个图神经网络 GNN,用于聚合实体邻居的信息。对于每个实体,其 l 跳表示可以看作是包含自身 l 跳邻居的知识子图表示。对于每个子图,我们将其表示存储在知识向量数据库中。
核心解读
步骤 2:用 GNN 聚合'多跳邻居'的信息,生成'知识子图表示'。
公式通俗解释:
l 跳:l=1 是一阶邻居,l=2 是二阶邻居。
GNN 的作用:把节点的 l-1 跳向量和边向量聚合起来,生成 l 跳向量。
知识子图表示:比如《沙丘 2》的子图表示包含了它的 1 跳、2 跳邻居的所有信息。
最后:把所有子图的表示(向量)存到'知识向量数据库'。
3.4 流行度选择性检索策略
原文翻译 尽管 RAG 可以通过检索到的知识增强大语言模型对用户偏好的建模,但对每个物品进行检索会消耗大量检索时间,这会严重降低用户体验并导致用户流失。同时,推荐系统中大多数用户的在线行为遵循幂律分布:一小部分物品(例如不到 20%,即热门物品)通常占据了用户在线行为的大部分(例如超过 80%),而冷启动物品(新物品或小众物品)的用户交互很少。因此,大多数模型往往拥有热门物品的丰富知识,而冷启动物品的性能较差。为此,我们设计了一种流行度选择性检索策略,基于物品的流行度(例如销量、浏览量)来确定是否需要从知识图谱中增强该物品。具体而言,如果物品的流行度低于预定义的阈值 p,则对其进行检索;否则不检索。通过整合这一策略,K-RagRec 的检索时间可以显著减少,实现更高效的检索。
核心解读
核心:解决'检索效率低'的问题——只检索冷门物品,不检索热门物品。
关键依据:幂律分布(通俗说就是'二八定律')。
80% 的用户交互都集中在 20% 的热门物品上。
大模型在训练时已经学过这些热门物品的知识,所以不用检索。
冷启动物品很少有人看,大模型没学过,所以需要检索知识图谱补充。
策略细节:设定一个阈值 p(比如 50%),流行度排名后 50% 的物品才检索,前 50% 的热门物品不检索。
3.5 知识子图检索
原文翻译 给定知识子图检索的查询,我们采用与第一步索引相同的预训练语言模型(PLM),以确保查询与知识子图表示处于一致的嵌入空间(向量空间)。我们将需要检索的物品 $v_j$ 的文本属性(例如物品的标题和描述)$x_{q_j}$ 定义为查询,并得到其语义信息 $q_j$:$q_j = PLM(x_{q_j}) \in R^d$。
接下来,我们为物品 $v_j$ 从 G 中检索 top-K 个最相似的子图 $Z_{g_}$,其中 $sim(\cdot,\cdot)$ 是用于衡量查询表示 $q_j$ 和知识向量数据库中知识子图表示 $z_{g_ }$ 之间相似度的度量(比如余弦相似度)。最后,从用户 $u_i$ 的历史交互 $V^{u_i}$ 中需要检索的物品对应的知识子图,将组成一个知识子图集合 G。
核心解读
核心:根据用户的历史物品,从知识向量数据库中找出最相似的 K 个知识子图。
步骤:
生成查询向量:比如用户历史物品是《沙丘 2》,把《沙丘 2》的标题、描述用 PLM 变成向量 $q_j$。
计算相似度并检索:在知识向量数据库中,找和 $q_j$ 最像的 K 个知识子图。
组成子图集合 G:把这 K 个相似子图放在一起,后续用。
为什么用相同的 PLM?因为如果索引时用 A 模型编码,查询时用 B 模型编码,两个向量不在一个'频道',没法计算相似度。
3.6 知识子图重排序
原文翻译 为了提升检索质量以增强推荐性能,下一步关键是知识子图重排序。如果用户 $u_i$ 有很长的物品历史交互列表,将所有检索到的知识子图 $g' \in G$ 直接输入大语言模型会导致信息过载。因此,我们执行重排序以缩短检索到的知识子图,并确保最相关的知识子图排在提示词的前面。具体而言,我们将推荐提示词作为重排序的查询,该提示词包含任务描述和用户的历史物品。例如,这个推荐提示词可以是'给看过《黑客帝国》《钢铁侠》等电影的用户推荐一部最可能喜欢的电影?'。为了保持一致性,我们采用相同的预训练语言模型(PLM)来捕捉上述提示词的语义信息 P,并对 G 中的知识子图进行重排序,得到 top-N 个知识子图集合 $\hat{G}$。
核心解读
核心:解决'信息过载'和'噪声'问题——只保留最相关的 N 个知识子图。
步骤:
生成重排序查询 p:把完整的推荐提示词用 PLM 变成向量 p。
计算相似度并排序:用 p 和之前检索到的子图集合 G 中的每个子图向量计算相似度,选最像的 N 个,组成新的集合 $\hat{G}$。
为什么要重排序?比如用户看过 10 部电影,每部检索 3 个子图,一共 30 个子图——直接传给大模型,大模型会'看不过来',还会有无关子图。重排序后只传 5 个最相关的,大模型能高效利用。
3.7 知识增强推荐
原文翻译 为了帮助大语言模型更好地理解检索到的知识子图的结构,并避免长上下文输入,我们进一步整合了另一个图神经网络(GNN)编码器 $GNN_{\phi_{2}}^{Encoding }$(参数为 $\phi_{2}$),以增强结构信息的表示学习:$h_{\hat{g}{*}}=GNN {\phi_{2}}^{Encoding }\left(\left{\hat{g}{*}: \hat{g} {*} \in \hat{G}\right}\right)$ (7)
我们还引入了一个多层感知机(MLP)投影器 $MLP_{\theta}$(参数为 $\theta$),用于将 $\hat{G}$ 中所有子图的嵌入映射到大语言模型的语义空间:$\hat{h}{\hat{G}} = MLP {\theta}([h_{\hat{g}{*}}])$,其中 $[.;.]$ 表示拼接操作。提取的知识子图嵌入 $\hat{h} {\hat{G}}$ 作为软提示词(soft prompt),被附加在大语言模型的输入 token 嵌入之前。
核心解读
核心:解决'结构化信息没用好'的问题——用 GNN 处理子图结构,用 MLP 让大模型看懂。
步骤:
输入大模型:把软提示词加在原始提示词前面,一起传给大模型。
关键优势:
不用把子图转换成文字,保留了结构信息(GNN 的作用)。
软提示词是向量,不是长文本,避免了大模型处理长文本的问题。
MLP 投影到大模型空间:把 5 个结构向量拼接起来,用 MLP 转换成大模型能看懂的向量 $\hat{h}_{\hat{G}}$(软提示词)。
GNN 编码结构信息:把重排序后的子图集合 $\hat{G}$ 输入 GNN,GNN 会提取它们的'结构关系',生成每个子图的结构向量 $h_{\hat{g}_{*}}$。
3.8 K-RagRec 的优化
原文翻译 训练过程大致可以看作是软提示词调优(soft prompt tuning),其中检索到的知识子图是一系列软图提示词(soft graph prompts)。形式上,生成过程可以表示为:$A = f_{\delta}(Q || \hat{h}_{\hat{G}})$
因此,我们不需要对大语言模型进行大规模微调,只需要学习两个 GNN(即 $GNN_{\phi_{1}}^{Indexing }$、$GNN_{\phi_{2}}^{Encoding }$ 和投影器 $MLP_{\theta}$)的参数,而大语言模型的参数 $\delta$ 保持冻结。我们通过交叉熵损失 $L(Y, A)$ 更新参数 $\phi_{1}$、$\phi_{2}$ 和 $\theta$,其中 Y 是真实标签(用户真正喜欢的物品),A 是大语言模型的预测结果。
核心解读
核心:训练时只调小部分参数,不微调大模型——省成本、快。
训练细节:
冻结大模型参数 $\delta$:GPT、LLaMA 这些大模型的参数不动,不用花几百万微调。
只训练 3 个部分的参数:MLP 投影器、编码用的 GNN、索引用的 GNN。
损失函数:交叉熵损失($L(Y, A)$)——简单说就是'让模型的预测 A 尽可能接近真实标签 Y'。
4 实验
4.1 实验设置
4.1.1 数据集
原文翻译 为了评估 K-RagRec 框架的性能,我们采用了三个真实世界数据集。MovieLens-1M 包含约一百万条电影评分和电影的文本描述(即'标题')。MovieLens-20M 是一个大规模电影评分数据集,包含超过 138,000 名用户对 27,000 部电影的 2000 多万条评分。Amazon Book 是一个书籍推荐数据集,记录了超过 1000 万条用户对书籍的评分和书籍标题。此外,我们采用了流行的知识图谱 Freebase,并过滤出与这三个数据集相关的三元组,以重构知识图谱。这三个数据集和知识图谱的统计信息如表 3 所示。
核心解读
数据集选择:覆盖'电影'和'书籍'两个领域,既有小规模也有大规模。
知识图谱:用 Freebase,但只保留和数据集相关的三元组。
表 3 关键信息:
MovieLens-1M:6038 个用户,3533 个电影,3498 个电影在知识图谱中。
Amazon Book:600 多万用户,189 万本书,91700 本书在知识图谱中。
4.1.2 基线模型
原文翻译 在基于大语言模型的推荐研究领域,我们的工作率先探索了从知识图谱中检索知识以增强大语言模型的推荐能力。因此,为了评估有效性,我们将提出的框架与一系列精心设计的基于知识图谱 RAG 增强的大语言模型推荐基线进行了比较。首先,我们纳入了两种典型的仅推理方法:Retrieve-Rewrite-Answer(Wu 等人,2023b)(KG-Text)和 KAPING(Baek 等人,2023),前者检索子图并将其文本化,后者检索三元组。我们排除了一些基于知识推理路径的方法(Luo 等人,2023),因为仅从用户的交互物品中检索可靠的知识推理路径较为困难。接下来,我们将 K-RagRec 与各种基于检索增强的提示词调优方法进行比较,包括结合 KG-Text 的提示词调优(PT w/ KG-Text)、结合检索的 GraphToken(Perozzi 等人,2024)(GraphToken w/ RAG)以及 G-retriever(He 等人,2024)。此外,我们还将我们的方法与结合检索的 LoRA 微调(Lora w/ KG-Text)(Hu 等人,2021)进行了比较。
一、仅推理类(Inference-only):'拿来就用,完全不训练'
这类模型没有任何训练步骤 ,直接把知识图谱的信息丢给大模型生成推荐,属于'最基础的 RAG'。
KG-Text(Wu et al., 2023b)具体做法:① 从知识图谱里检索目标物品的子图 ;② 把这些结构化的子图(三元组)转成自然语言文本 ;③ 把文本直接喂给大模型。缺点:转文本时会引入冗余/噪声,而且子图的结构关系被文本化后丢了 。
KAPING(Baek et al., 2023)具体做法:① 从知识图谱里直接检索目标物品的三元组列表 ;② 把三元组列表直接传给大模型。缺点:只拿零散的三元组,没有子图的关联信息 。
二、提示词调优类(Frozen LLM w/ PT):'训练提示词,不碰大模型参数'
这类模型冻结大模型的所有参数 ,只训练'软提示词'(一段可学习的向量),把提示词和知识图谱信息结合喂给大模型,比'仅推理'效果好,但还是有缺陷。
PT w/ KG-Text(Prompt Tuning with KG-Text)具体做法:① 流程和'KG-Text'一样;② 额外训练一个软提示词 ;③ 把'软提示词 + KG-Text 的文本'一起喂给大模型。缺点:检索还是用 KG-Text 那套,检索深度只有一阶 。
GraphToken w/ RAG(Perozzi et al., 2024)具体做法:① 把知识图谱的'节点/边'转成特殊的图 Token ;② RAG 检索目标物品的图 Token,把这些 Token 加到提示词里;③ 训练这些图 Token 作为'软提示词'的一部分。缺点:只检索'单个图 Token',没有子图的结构关系 。
G-retriever(He et al., 2024)具体做法:① 从多种图里检索目标物品的子图 ;② 把这些子图的信息整合到提示词中;③ 训练提示词。缺点:检索时没有'选择性'+ 子图不重排序 ,导致冗余信息多、效率低。
三、微调类(Fine-tuning):'微调大模型的部分参数'
这类模型会动大模型的参数(但用 LoRA 降低成本),效果不错但成本更高。
Lora w/ KG-Text 具体做法:① 流程和'KG-Text'一样;② 用LoRA(低秩适配)微调大模型 ;③ 让大模型学习'结合 KG-Text 文本做推荐'。缺点:还是需要微调大模型,成本比'仅训提示词 + GNN'高 。
Lora w/ K-RagRec 具体做法:把 K-RagRec 的组件和 LoRA 微调结合。为什么这是'最佳但没必要':它效果最好,但 K-RagRec不微调大模型也能接近这个效果 ——突出 K-RagRec'低成本 + 高性能'的优势。
核心解读
基线模型选择逻辑:覆盖'仅推理''提示词调优''微调'三类方法,全面对比。
各基线模型特点:
仅推理(KG-Text、KAPING):不训练,直接检索后生成——简单但效果差。
提示词调优(PT w/ KG-Text、GraphToken w/ RAG、G-retriever):训练提示词,不微调大模型——比仅推理好,但检索深度不够、效率低。
微调(Lora w/ KG-Text):用 LoRA 微调大模型——效果不错,但仍需要微调。
4.1.3 评估指标
原文翻译 为了评估 K-RagRec 框架的有效性,我们采用了两种广泛使用的评估指标:准确率(Accuracy, ACC)和召回率 @k(Recall@k)(He 等人,2020)。我们报告 k=3 和 k=5 的结果。受近期研究(Zhang 等人,2024; Hou 等人,2022)的启发,我们采用留一法(leave-one-out)进行评估。具体而言,对于每个用户,我们选择用户最后交互的物品作为目标物品(正样本),并将目标物品之前的 10 个交互物品作为历史交互。然后,我们利用大语言模型从 20 个候选物品(M=20)中预测用户偏好的物品,其中包含 1 个目标物品和 19 个随机采样的负样本。对于训练过的模型(包括提示词调优和微调),我们通过提取每个物品的分配概率来计算 Recall@k,评估模型将目标物品排在前 k 个预测中的能力。此外,我们还在附录 A.5 中展示了候选物品数 M=10 的对比实验。
核心解读
评估指标通俗解释:
准确率(ACC):模型预测的物品正好是用户喜欢的目标物品的比例。
召回率 @k(Recall@k):用户喜欢的目标物品排在模型预测的前 k 个中的比例。
评估方法(留一法):
每个用户的'最后一个交互物品'作为'要推荐的目标'。
用用户之前看的 10 部电影作为历史交互,让模型从 20 个候选物品中选。
4.1.4 参数设置
原文翻译 我们基于 PyTorch 实现了该框架,并在 2 块 NVIDIA A6000-48GB GPU 上进行实验。我们采用 SentenceBert 对实体、关系和查询属性进行编码。对于 MovieLens-1M,我们使用 3 层图 Transformer 作为 GNNIndexing 和 GNNEncoding;对于 MovieLens-20M 和 Amazon Book,我们使用 4 层。层维度设置为 1024,头数设置为 4。流行度选择性检索策略的阈值 p 设置为 50%。对于每个需要检索的物品,我们检索 top-3 个最相似的子图。重排序后的知识子图数量 N 设置为 5。更多实验细节见附录 A.1。我们还在附录 A.12 中展示了几个提示词示例。
核心解读
关键参数:
硬件:2 块 A6000-48GB GPU。
编码模型:SentenceBert。
GNN 层数:小规模数据集 3 层,大规模 4 层。
阈值 p=50%(热门前 50% 不检索,后 50% 检索)。
K=3(每个物品检索 3 个子图),N=5(重排序后保留 5 个子图)。
4.2 整体性能对比
原文翻译 我们在三个开源骨干大语言模型上比较了 K-RagRec 与各种基线模型的推荐性能:LLama-2-7b(Touvron 等人,2023)、LLama-3-8b(Dubey 等人,2024)和 QWEN2-7b(Yang 等人,2024)。结果如表 1 所示。从对比中,我们得到以下主要观察结果:
简单地从知识图谱中检索并通过文本增强大语言模型的方法(即 KG-Text 和 KAPING)在 MovieLens-1M、MovieLens-20M 和 Amazon Book 数据集上的推荐准确率有限。
与其他提示词调优 RAG 方法相比,以 LLama-2-7B 为骨干大语言模型的 K-RagRec 在所有数据集上比次优基线平均提升了 41.6%。以 LLama-3-8B 和 QWEN2-7B 为骨干大语言模型时,K-RagRec 也带来了 13% 到 32% 的平均提升,突显了我们提出的方法在增强大语言模型推荐性能方面的有效性。
与结合简单 RAG 方法的 LoRA 微调相比,基于提示词调优的 K-RagRec 在大多数设置下实现了接近或更好的性能。值得注意的是,当用 LoRA 微调 K-RagRec 时,它取得了最佳性能。
核心解读
核心结论:我们的 K-RagRec 效果最好!
具体亮点:
比'仅推理'方法好太多。
比其他'提示词调优 RAG'方法平均提升 41.6%(LLama-2-7B)、13%-32%(其他大模型)。
比'LoRA 微调 + 简单 RAG'效果接近或更好,而且我们不用微调大模型。
4.3 消融实验
原文翻译 为了评估我们提出的框架中每个组件的影响,我们进行了消融实验,在 MovieLens 和 Amazon Book 数据集上比较了 K-RagRec 与四个消融变体,使用 LLama-2-7B 作为骨干大语言模型。每个消融变体的细节见附录 A.6。结果如图 3 所示。观察实验结果,我们发现移除框架的任何一个组件都会导致推荐的整体性能下降,证明了每个模块的有效性。其次,移除 GNN 编码器(GNN Encoder)会导致模型在 MovieLens 和 Amazon Book 数据集上的准确率分别下降 37% 和 45.9%,突显了采用 GNN 对知识子图的结构进行编码的重要性。更多细节见附录 A.6。
核心解读
消融实验:就是'去掉框架的某个组件,看效果会不会变差'。
四个消融变体:
K-RagRec (-Indexing):去掉索引用的 GNN。
K-RagRec (-Popularity):去掉流行度选择性检索。
K-RagRec (-Re-ranking):去掉重排序。
K-RagRec (-Encoding):去掉编码用的 GNN。
关键结论:
所有组件都有用。
GNN Encoder 最重要。
4.4 效率评估
原文翻译 在本小节中,我们在 MovieLens-1M 数据集和 LLama-2-7b 上评估了我们提出的 K-RagRec 框架与基线模型的推理效率。我们记录了使用两块 NVIDIA A6000-48G GPU 进行一次推理的时间成本。单次推理的时间成本如表 2 所示。观察实验结果,我们注意到各种知识图谱 RAG 方法显著增加了推理时间,这是由于知识图谱的规模较大。相比之下,K-RagRec 与各种知识图谱 RAG 方法相比实现了最佳的计算效率,仅比无检索的直接推理慢约 0.1 秒。这些发现突显了 K-RagRec 的效率,并验证了我们的流行度选择性检索策略的有效性。
核心解读
核心:我们的方法不仅效果好,而且速度快!
表 2 关键数据:
无检索(w/o RAG):0.92 秒/次推理。
其他 RAG 方法:2.19 秒 - 6.47 秒/次。
我们的 K-RagRec:1.06 秒/次。
原因:流行度选择性检索策略。
4.5 参数分析
原文翻译 在本节中,我们评估了 K-RagRec 的三个主要超参数的影响:流行度选择性检索策略阈值 p、检索到的知识子图数量 K 和重排序后的知识子图数量 N。此外,我们在附录 A.10 和 A.11 中分析了各种 GNN 编码器变体和不同 GNN 层数对所提出框架的影响。
流行度选择性检索策略阈值 p 的影响:为了理解阈值 p 如何影响 K-RagRec,我们在 MovieLens-1M 和 LLama-2-7b 上进行了两个指标的实验。结果如图 4 所示。随着阈值 p 的增加,推荐性能先提升后下降。当阈值 p 设置为较小值时,只有少数物品被增强,导致检索不足和推荐准确率低。当 p 设置为较大值时,更多物品被检索用于增强。然而,由于重排序后的子图数量 N 是固定的,一些检索到的冷启动物品的知识子图被丢弃或排在列表后面,导致推荐性能不佳。另一方面,如图 4(c)所示,推理时间随着阈值 p 的增加几乎线性增长。因此,选择合适的阈值 p 对于平衡性能和推理时间至关重要。
检索到的知识子图数量 K 和重排序后的子图数量 N 的影响:在本部分中,我们分析了两个关键超参数的影响:检索到的知识子图数量 K 和重排序后的子图数量 N。首先,为了衡量 K 的影响,我们在 MovieLens 数据集上进行实验,固定 p=50%,N=5。如图 5 所示,当 K=1 时,可能会忽略一些相关的知识子图。另一方面,K 值过大可能会引入无关信息。因此,我们在实验中设置 K=3。接下来,我们通过固定 p=50% 和 K=3 来评估 N 的影响,并在图 6 中呈现结果。我们观察到,当 N 设置为 5 到 7 之间时,Amazon Book 数据集上的性能得到提升。一般而言,需要根据数据集和知识图谱的规模仔细选择 K 和 N。
核心解读
核心:我们的参数设置是经过实验验证的,不是瞎选的!
三个参数的影响:
阈值 p:选 50% 最好。
检索子图数 K:选 3 最好。
重排序子图数 N:选 5-7 最好。
5 结论
原文翻译 在本文中,我们提出了一个新颖的框架 K-RagRec,通过从知识图谱中检索可靠和最新的知识,来增强大语言模型的推荐能力。具体而言,我们首先引入了一个 GNN 和预训练语言模型(PLM)对知识图谱进行语义索引,实现知识图谱的粗粒度和细粒度检索。为了进一步提高检索效率,我们引入了一种流行度选择性检索策略,基于物品的流行度确定是否需要检索该物品。值得注意的是,K-RagRec 对检索到的知识子图进行了更具表达力的图编码,使大语言模型能够有效利用结构信息,并避免长上下文输入。在三个真实世界数据集上进行的大量实验证明了我们提出的框架的有效性。
核心解读
结论 = 方法论总结 + 核心贡献重申:
我们做了什么:提出 K-RagRec,用知识图谱 RAG 增强大语言模型推荐。
关键创新:语义索引、流行度选择性检索、图编码。
结果:实验证明有效。
6 局限性
原文翻译 据我们所知,本工作是首次研究知识图谱 RAG 在基于大语言模型的推荐中的应用。因此,我们认识到本工作仍有以下三个主要局限性,可在未来研究中加以改进:
首先,由于 GPU 资源限制,我们仅能在 7b 和 8b 模型上评估我们的框架。因此,在未来的工作中,我们计划将我们的方法扩展到更大的模型(如 13b、70b),以全面评估其有效性和可扩展性。
其次,我们仅使用 Freebase 作为外部知识图谱,因为它在推荐任务中最常用。因此,我们还计划采用其他知识图谱(如 YAGO、DBpedia、Wikipedia),以更好地理解不同知识源对所提出方法性能的影响。
最后,为基于大语言模型的推荐系统设计智能的选择性检索策略是一项重要且具有挑战性的任务。在本工作中,我们提出利用流行度来确定检索哪些物品,以提高检索效率。未来,我们将探索更灵活的机制(如强化学习),根据用户兴趣的变化动态更新策略。
核心解读
局限性 = 诚实承认不足 + 未来改进方向:
模型规模有限:只在 7b/8b 模型上实验,未来要试 13b/70b 大模型。
知识图谱单一:只用电 Freebase,未来要试 YAGO、DBpedia 等。
检索策略简单:只用流行度,未来要用强化学习。
附录
A.7 泛化性研究
做什么:在 MovieLens-1M 上训练,在 MovieLens-20M(同领域不同规模)和 Amazon Book(不同领域)上测试。
结果:在 20M 上比 SOTA 提升 21.6%,在 Book 上比提示词调优基线提升 8.7%—— 证明我们的方法能跨领域、跨规模通用。
A.8 幻觉研究
做什么:在候选物品中加入虚构电影,看模型会不会推荐。
结果:LLama-2 直接推理时幻觉率 39.1%,用了 K-RagRec 后降到 2.7%(降了 93.1%);QWEN2 从 4.7% 降到 0.9%(降了 80.9%)—— 证明我们的方法能有效解决幻觉问题。
A.9 冷启动推荐研究
做什么:专门测试'冷启动物品'(新物品/小众物品)的推荐效果。
结果:K-RagRec 在冷启动场景下的 ACC=0.406,Recall@5=0.834,远高于其他基线—— 证明我们的方法能解决冷启动问题。
A.10 GNN 编码器对比
做什么:测试 GCN、GAT、Graph Transformer、GraphSAGE 四种 GNN 作为编码器的效果。
结果:四种 GNN 效果都差不多—— 证明我们的框架对 GNN 类型不敏感,鲁棒性强。
A.11 GNN 层数研究
做什么:测试 3、4、5 层 GNN 的效果。
结果:4 层效果最好—— 层数太少捕捉不到复杂关系,太多会过拟合。
A.12 提示词示例
展示了电影和书籍推荐的具体提示词—— 证明实验设置很具体,不是瞎做的。
微信扫一扫,关注极客日志 微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
相关免费在线工具 加密/解密文本 使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
RSA密钥对生成器 生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
Mermaid 预览与可视化编辑 基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
curl 转代码 解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online