论文学习:基于知识图谱的RAG进行客服问答

1.简介

文章名称: Retrieval-Augmented Generation with Knowledge Graphs for Customer Service Question Answering(基于知识图谱的RAG进行客服问答)

2.摘要ABSTRACT

在客户服务技术支持中,迅速准确地检索相关的过往问题对于有效解决客户查询至关重要 【1.前景提要】。在大型语言模型(LLMs)的检索增强生成(RAG)中,传统的检索方法将大量过往问题跟踪工单视为普通文本,忽略了关键的问题内部结构和问题间关系,从而限制了性能 【2.老方法】。我们引入了一种新颖的客户服务问答方法,将RAG与知识图谱(KG)相结合。我们的方法从历史问题中构建知识图谱以用于检索,保留了问题内部结构和问题间关系 【3.新方法】。在问答阶段,我们的方法解析消费者查询,并从知识图谱中检索相关子图以生成答案。这种知识图谱的整合不仅通过保存客户服务结构信息提高了检索准确性,还通过减轻文本分割的影响提高了回答质量。 【4.新方法的过程和好处】 通过在我们的基准数据集上进行实证评估,利用关键检索(MRR、Recall@K、NDCG@K)和文本生成(BLEU、ROUGE、METEOR)指标,我们的方法在MRR方面比基准线提高了77.6%,在BLEU方面提高了0.32。我们的方法已在领英的客户服务团队中部署了大约六个月,将单个问题的中位解决时间缩短了28.6%。

摘要内容: 利用知识图谱增强RAG检索增强的能力,主要过程是对用户的Query进行解析,然后将解析到的实体通过知识图谱进行检索生成答案。【通过Query的关键词检索内容,提高了准确性以及减轻了文本分割提高了回答质量(因为有些内容是无需分割的,分割关键内容即可)】

3.引言INTRODUCTION

在客户服务中,有效的技术支持是产品成功的基石,直接影响客户满意度和忠诚度。鉴于客户查询经常与先前解决的问题相似,快速准确地检索相关的过往实例对于高效解决此类询问至关重要。最近,嵌入式检索(EBR)、大型语言模型(LLMs)和检索增强生成(RAG)的进步显著提升了技术支持客户服务的检索性能和问答能力。这一过程通常分为两个阶段:首先,将历史问题票据视为纯文本,分段为较小的块以适应嵌入模型的上下文长度约束;然后,将每个块转换为嵌入向量以进行检索。第二,在问答阶段,系统检索最相关的块,并将其作为上下文提供给大型语言模型,以生成对查询的答案。尽管这种方法显得简单直接,但仍存在一些限制。【原RAG的流程】

“限制1 - 由于忽略结构而导致检索准确性受损:问题跟踪文档,如Jira,具有固有结构,并且彼此之间相互连接,其引用如“问题A与问题B相关/复制自/由问题B引起”。将文档压缩成文本块的传统方法导致关键信息的丢失。我们的方法将问题工单解析为树状结构,并进一步连接单个问题工单以形成一个互相关联的图形,维护了这些实体之间的固有关系,从而实现了高检索性能。【将问题解析为树的结构,形成一个互相关联的图形,提高检索能力】

• 限制2 - 由于分段而导致答案质量降低:将庞大的问题工单分割为固定长度的段以适应嵌入模型的上下文长度限制可能导致相关内容的断开,从而造成回答不完整。例如,一个问题工单描述了问题的开始和解决方案的结尾,在文本分段过程中可能会被分割,导致解决方案的关键部分被遗漏。我们的基于图形的解析方法通过保持工单部分的逻辑连贯性来克服这一问题,确保提供完整高质量的回复。【由于嵌入模型的上下文长度限制,问题如果较长会背分割成固定长度的段落,可能会导致相关内容被分开,导致语义出现错误,这里利用LLMs或者模板方法解析语义的关键部分并在图谱中检索】

引言总结: 通过知识图谱构建树的结构增强检索效果,并通过语义关键词拆分与匹配增强检索内容的匹配性。

4.相关工作

使用知识图谱(KG)进行问题回答(QA)可以被广泛分类为检索型基于模板语义解析型方法。检索型方法利用关系提取或分布表示从知识图谱中获取答案,但在涉及多个实体的问题上面临困难。基于模板的策略依赖于手动创建的模板来编码复杂查询,但受可用模板范围限制。语义解析方法将文本映射到包含知识图谱中谓词的逻辑形式。最近大型语言模型(LLMs)与知识图谱(KGs)的整合取得了显著进展。Jin等人对此整合进行了全面回顾,将LLMs的角色分类为预测器、编码器和对齐器。针对基于图的推理,Think-on-Graph和Reasoning-on-Graph通过整合知识图谱提升LLMs的推理能力。Yang等人提出利用知识图谱跨多个训练阶段增强LLMs的事实推理。对于基于LLM的问题回答,Wen等人的Mindmap和Qi等人利用知识图谱在医学和食品等专业领域增强LLMs的推理能力。这些贡献突显了LLM与KG组合在增强信息检索和推理任务中的日益有效性。(总结一下相关工作里的具体内容)

相关工作的内容:

  • 基于模板的方法:预先设计好一系列的模板,来处理和回答用户的查询。这些模板是一些固定的模式或格式,可以填入特定的信息来生成答案。
    在这里插入图片描述
  • 语义解析方法:将用户的自然语言查询转换为计算机可以理解的逻辑形式。这种方法利用知识图谱中的谓词(关系和属性)来解析和回答问题。
    在这里插入图片描述
    总结:
  1. 基于模板的方法:通过预先设计的模板快速生成答案,简单高效但受模板数量限制。
  2. 语义解析方法:将自然语言查询解析为逻辑形式,灵活强大但实现复杂,需要高质量的知识图谱和解析算法。

5.方法Methods

我们介绍了一种基于LLM的客服问答系统,它将召回增强生成(RAG)与知识图谱(KG)无缝集成在一起。我们的系统(见图1)包括两个阶段:首先,在知识图谱构建阶段,我们的系统从历史客服问题工单中构建一个全面的知识图谱。它将每个问题构建成树状结构表示,并基于关系上下文相互链接。它还为每个节点生成嵌入以便后续语义搜索。其次,在答疑阶段,我们的方法解析消费者查询以识别命名实体和意图。然后在知识图谱中导航以找到相关子图来生成答案。

图1知识图谱增强RAG流程
第一阶段:知识图谱构建
在这个阶段,我们的系统从历史客户服务问题工单中构建一个全面的知识图谱。具体流程如下:

  • 树状结构表示:将每个问题构建成树状结构表示,保留问题的层次结构和详细信息。
  • 问题间链接:基于关系上下文将不同的问题相互链接。例如,一个问题可能是从另一个问题克隆而来,或者与其他问题相似。
  • 节点嵌入生成:为每个节点生成嵌入,这些嵌入用于后续的语义搜索,帮助系统在回答问题时快速找到相关信息。

第二阶段:问答
在这个阶段,我们的方法解析消费者查询【核心在于解析Query->实体+意图】,以识别命名实体和意图。具体流程如下:

  • 实体检测:系统首先检测查询中的关键命名实体。
  • 意图分类:确定查询的意图,例如是想要了解问题的解决步骤。
  • 子图导航:在知识图谱中导航,找到与查询相关的子图。这些子图包含了回答查询所需的关键信息。
  • 答案生成:根据找到的相关子图,生成并提供答案给消费者。

总结: 图1展示了这个系统的详细流程。左侧部分是知识图谱的构建过程,包括如何将历史问题工单解析成树状结构并进行链接,以及如何生成嵌入。右侧部分展示了问答过程,包括解析查询、导航知识图谱和生成答案的步骤。

3.1 知识图谱结构

3.1.1 图结构定义。在为历史问题表示定义知识图结构时,我们采用一个双层架构,将问题内部和问题间关系分开,如图1所示。问题内部树T𝑖(N,E,R)将每个工单𝑡𝑖建模为一棵树,其中每个节点𝑛∈N,由唯一组合(𝑖,𝑠)标识,对应于工单𝑡𝑖的不同部分𝑠,每个边𝑒∈E和𝑟∈R表示这些部分之间的层次连接和关系类型。问题间图G(T,E,R)代表不同工单之间的连接网络,包括显式链接Eexp(在问题跟踪工单中定义)和隐式连接Eimp(由工单标题间语义相似性导出)。对于隐式连接,我们利用工单标题嵌入向量的余弦相似度,这种方法可以适用于特定用例。例如,图1描述了工单ENT-22970作为树结构,节点表示诸如摘要、描述和优先级等部分。它展示了与PORT-133061的直接克隆关联,表示显式的克隆关系。此外,由于语义相似性,它与ENT-1744和ENT-3547隐式连接。【总结:主要讲述了利用双层架构进行图结构的定义,通过双层架构将问题内部的树状结构(节点包括工单的摘要、描述等)和问题间的连接(工单之间的连接)分开处理,保留了工单的层次信息和问题间的关系。】

3.1.2 知识图构建。图构建分为两个阶段:问题内部解析和问题间连接。1) 问题内部解析阶段:此阶段将每个基于文本的工单𝑡𝑖转换为树表示T𝑖。我们采用混合方法,最初利用基于规则的提取预定义字段,例如通过关键字识别的代码部分。随后,对于无法按规则解析的文本,我们使用LLM进行解析。LLM由YAML模板Ttemplate指导,该模板将客户支持常用的工单部分在图中表示。2)
问题间连接阶段:在这里,各自的树T𝑖被合并成一个综合图G。显式连接Eexp根据工单中特定指定的字段定义,例如在Jira中的指定字段。隐式连接Eimp根据工单标题之间的文本语义相似性推断,使用嵌入技术和阈值机制来识别每个问题工单的最相关工单。【总结:主要讲述的是对于Query的解析以及关键字的识别(基于模板提取/LLM解析),采用方法为:语义解析方法】

𝑡𝑖 = 𝑡𝑖,rule ∪ 𝑡𝑖,llm T𝑖 = RuleParse(𝑡𝑖,rule) +
LLMParse(𝑡𝑖,llm, Ttemplate, prompt) Eexp = {(T𝑖,T𝑗) | T𝑖 显式连接至
T𝑗} Eimp = {(T𝑖,T𝑗) | cos(embed(T𝑖),embed(T𝑗)) ≥ 𝜃"

3.2 检索和问答

3.2.1 查询实体识别和意图检测
在这一步骤中,我们从每个用户查询q中提取命名实体P(类型为Map(N → V))和查询意图集I。具体方法如下:
解析查询:将每个查询q解析成键值对,其中每个键n在查询中提及,对应于图模板Ttemplate中的元素,值v表示从查询中提取的信息。
提取意图:同时,查询意图I包括查询中提及的图模板Ttemplate中的实体。
使用LLM解析:利用大型语言模型(LLM)和合适的提示词进行解析。例如,给定查询q = “How to reproduce the login issue where a user can’t log in to LinkedIn?”,提取的实体是P = Map(“issue summary” → “login issue”, “issue description” → “user can’t log in to LinkedIn”),意图集I=Set(“fix solution”)。
这个方法展示了通过利用LLM的广泛理解和解释能力,能够灵活适应各种查询形式。

3.2.2 基于嵌入的子图检索
我们的方法从知识图谱中提取与用户提供的具体信息(如“问题描述”和“问题摘要”)以及用户意图(如“解决方案”)相关的子图。这个过程分为两个主要步骤:

  1. 基于EBR的工单识别: 步骤描述:通过利用用户查询中派生的命名实体集P,识别最相关的历史问题工单(top Kticket)。
  2. 计算相似度:对于每对实体(k, v) ∈ P,计算实体值v与所有图节点n对应于部分k的预训练文本嵌入的余弦相似度。
  3. 得分聚合:通过将属于相同工单的节点贡献得分相加,聚合这些节点级别的得分到工单级别。 LLM驱动的子图提取:
  4. 重新调整查询:系统首先重新调整原始查询q以包含检索到的工单ID;调整后的查询q’被转换为图数据库语言,例如用于问题回答的Neo4j的Cypher。
  5. 示例:例如,原始查询q=“how to reproduce the issue where user saw ‘csv upload error in updating user email’ with major priority due to a data issue”,被重新调整为"how to reproduce ‘ENT-22970’",并转化为Cypher查询MATCH (j
    {ticket_ID: ‘ENT-22970’})-[ ]->(description )-[ ]->(steps_to_reproduce
    ) RETURN steps_to_reproduce.value。
    该方法灵活性足够,可以跨越子图中不同树提取信息,无论它们来源于同一棵树还是知识图谱中的不同树。

3.2.3 答案生成
答案生成通过将检索到的数据与初始查询结合来实现。LLM作为解码器,用于根据检索到的信息生成答案。为了确保回答的健壮性,系统可以退回到基于文本的基准方法来验证生成的回答。

举个例子解释一下3.2的检索和问答

  • 步骤描述: 目的是对每个用户查询Query中提取出实体关键词和查询意图等,然后将这些特征提取出来以供于提取最相关的历史工单。
  • 计算相似度: 对每个实体(K,V)∈P,计算实体的值V与所有的图节点n计算相似度。
  • 得分聚合: 将相同工单(相似度最高那一组)的贡献得分相加,找到与之最相关的工单。【类似于多重属性附身的实体,基于它的多个属性找到实体本身,提高了精确度】
  • 重新调整查询: 找到对应的目标后用Cypher语句查询对应的Answer。

思路拓展:得分聚合的重要性
这个步骤的主要目的是将与同一个工单相关的多个节点的相似度得分进行整合,从而更准确地衡量整个工单与用户查询的相关性。【考虑到了一个事物它本身的多个维度,更加全面地反映了工单地整体情况,可靠性较高,并且更加稳健,因为综合了多个节点地信息】

<think>好的,我现在需要帮助用户了解如何基于RAG架构构建知识库并生成思维导图的最佳实践。首先,我得回顾一下RAG的基本概念,确保自己理解正确。RAG结合了检索和生成,通过外部知识库增强模型的生成能力,这在引用[1]和[2]中都有提到。用户可能已经知道RAG的大致原理,但具体步骤和工具可能需要详细说明。 接下来,构建知识库的方法。根据引用[1],MongoDB Atlas和LangChain是常用的工具,可能涉及数据预处理、向量化存储和检索。我需要分步骤讲解:数据准备、向量化、存储、检索增强。同时,用户提到生成思维导图,这部分可能需要结合知识库的结构,将关键节点可视化,比如使用XMind或ProcessOn。 然后,思维导图的生成部分。这里可能需要解释如何从知识库中提取关键信息,组织成层次结构,再导入到工具中。或许需要提到自动化工具或脚本,将RAG中的知识图谱转换为导图格式。还要考虑最佳实践,比如模块化设计、更新机制等,确保导图与知识库同步。 用户可能还关心实际应用中的挑战,比如数据更新、检索效率,或者如何确保生成内容的准确性。需要结合引用中的案例,比如医疗问答系统,说明不同场景下的调整。同时,引用[1]提到的向量搜索是关键,可能需要详细说明向量数据库的作用。 最后,检查是否需要覆盖所有用户需求,包括方法步骤、工具选择、思维导图的具体实践,以及可能的问题和解决方案。确保回答结构清晰,步骤明确,引用相关文献,并自然添加引用标识。还要生成相关问题,帮助用户深入探索。</think>### 基于RAG架构构建知识库及生成思维导图的实践指南 #### 一、RAG架构构建知识库的核心步骤 1. **数据准备与向量化** - 收集结构化/非结构化数据(如文档、问答对、专业文献),通过文本分块(chunking)和嵌入模型(如BERT、GPT-Neo)转换为向量表示[^1]。 - 示例工具链: ```python from langchain.text_splitter import RecursiveCharacterTextSplitter text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50) chunks = text_splitter.split_documents(documents) ``` 2. **向量数据库构建** - 使用MongoDB Atlas向量搜索或FAISS存储向量化数据,支持高效相似性检索。关键公式: $$ \text{similarity} = \cos(\theta) = \frac{\mathbf{A} \cdot \mathbf{B}}{\|\mathbf{A}\| \|\mathbf{B}\|} $$ 其中$\mathbf{A}$和$\mathbf{B}$为查询与文档的向量[^1]。 3. **检索增强生成流程** - 用户提问时,系统执行: (1) 检索Top-K相关文档片段 (2) 将片段与问题拼接输入大模型 (3) 生成基于上下文的精准回答(如图1流程)[^2]。 #### 二、生成思维导图的最佳实践 1. **知识图谱构建** -RAG知识库提取实体关系,使用Neo4j或NetworkX构建图结构。例如医疗领域: ```mermaid graph LR 症状-->疾病诊断 疾病诊断-->治疗方案 治疗方案-->药物配伍 ``` 2. **自动化导图生成** - 通过Python库(如py2neo)导出图数据,结合XMind API生成可编辑导图。关键代码逻辑: ```python from xmindparser import xmind_to_dict def export_to_xmind(nodes): for node in knowledge_graph: xmind.add_topic(node.parent, node.name) ``` 3. **持续更新机制** - 建立监听器(Watcher)跟踪知识库变更,触发导图增量更新(如图2架构)。 #### 三、典型应用场景 1. **医疗问答系统** - 通过RAG整合临床指南、药品说明书,生成诊断路径思维导图[^2] 2. **企业知识管理** - 将内部文档库转换为可检索知识库,自动生成部门职能关系导图 #### 四、关键优化策略 1. **混合检索模式** 结合关键词搜索(BM25)与向量检索,提升召回率 2. **动态分块策略** 根据文本类型(如论文/手册)调整chunk_size和overlap 3. **多模态扩展** 支持图片/表格的向量化存储(CLIP模型)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fairy要carry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值