论文学习:基于知识图谱的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。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/37266.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt Creator创建一个用户登录界面

目录 1 界面设计 2 代码 2.1 登录界面 2.2 注册界面 2.3 登陆后的界面 3 完整资源 这里主要记录了如何使用Qt Creator创建一个用户登录界面,能够实现用户的注册和登录功能,注册的用户信息存储在了一个文件之中,在登录时可以比对登录信息…

Go 常用文件操作

查找文件/目录 os.Stat(String)组合路径 dir, _ : homedir.Dir() filename : args[0] path : filepath.Join(dir, filename)homedir.Dir()为home根目录。 filepath.Join 会自动处理分隔符,将目录和文件名组合成文件路径。 检查是否含有后缀.json strings.HasSu…

【深度学习】常用命令行指令汇总

这些指令对于管理深度学习环境、监控资源使用、调试程序等方面 查看显卡使用情况 要实时监控NVIDIA显卡的状态,可以使用命令: nvidia-smi -l 1这条命令会每秒刷新一次显卡的使用情况,包括GPU利用率、显存使用情况等。 查看当前Python环境 查看当前使用的Python环境,可…

堆排序(手写堆)

堆排序 输入一个长度为 n的整数数列,从小到大输出前 m小的数。 输入格式 第一行包含整数 n和 m。 第二行包含 n个整数,表示整数数列。 输出格式 共一行,包含 m个整数,表示整数数列中前 m小的数。 数据范围 1≤m≤n≤105&…

【运维】如何在Ubuntu中设置一个内存守护进程来确保内存不会溢出

文章目录 前言增加守护进程1. 编写监控脚本2. 创建 systemd 服务文件3. 启动并启用服务4. 验证服务是否运行注意事项 如何修改守护进程1. 修改监控脚本2. 重新加载并重启服务3. 验证服务是否运行总结 如何设置一个日志文件来查看信息1. 修改监控脚本以记录日志方法一&#xff1…

利用代理IP实现高效大数据抓取的策略与技巧

在当今信息爆炸的时代,数据对于各行各业都至关重要。而数据的获取往往需要通过网络爬取。然而随着网络安全意识的提高和反爬虫机制的加强,传统的数据爬取方式可能会受到限制。在这种情况下,代理IP技术的应用就显得尤为重要。本文将探讨代理IP…

C语言 | Leetcode C语言题解之第204题计数质数

题目&#xff1a; 题解&#xff1a; int countPrimes(int n) {if (n < 2) {return 0;}int isPrime[n];int primes[n], primesSize 0;memset(isPrime, 0, sizeof(isPrime));for (int i 2; i < n; i) {if (!isPrime[i]) {primes[primesSize] i;}for (int j 0; j < …

C++ | Leetcode C++题解之第203题移除链表元素

题目&#xff1a; 题解&#xff1a; class Solution { public:ListNode* removeElements(ListNode* head, int val) {struct ListNode* dummyHead new ListNode(0, head);struct ListNode* temp dummyHead;while (temp->next ! NULL) {if (temp->next->val val) {…

arco disign vue 日期组件的样式穿透

问题描述: 对日期组件进行样式穿透. 原因分析: 如图,日期组件被展开时它默认将dom元素挂载到body下, 我们的页面在idroot的div 里层, 里层想要穿透外层是万万行不通的. 解决问题: 其实官网提供了参数,但是并没有提供例子, 只能自己摸索着过河. 对于日期组件穿透样式,我们能…

【TensorFlow深度学习】自我编码器的演变:从基础AE到变分AE模型

自我编码器的演变&#xff1a;从基础AE到变分AE模型 一、基础自我编码器&#xff1a;维度的压缩与重构二、变分自我编码器&#xff1a;从确定性到概率性三、理论与实践的桥梁&#xff1a;变分推理与KL散度四、变分AE的应用拓展五、结论 自我编码器&#xff08;Autoencoder, AE&…

GEO数据挖掘-富集分析、TinyArray简化流程、多组样本分析more

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 富集分析一些理论知识具体代码 富集不到的补救措施更多资料---问题数据和常见错误分析Part4-复杂数据及其分析多分组数据分析流程 tinyarray简化版本分析流程多分组…

如何高效安全的开展HPC数据传输,保护数据安全?

高性能计算&#xff08;HPC&#xff09;在多个行业和领域中都有广泛的应用&#xff0c;像科学研究机构、芯片IC设计企业、金融、生物制药、能源、航天航空等。HPC&#xff08;高性能计算&#xff09;环境中的数据传输是一个关键环节&#xff0c;它涉及到将数据快速、安全地在不…

DJYGUI AI低代码图形编程开发平台:开启嵌入式软件图形编程新纪元

在科技高速发展的当今时代&#xff0c;软件开发行业对创新和高效的需求日益增长。DJYGUI AI低代码图形编程开发平台的出现&#xff0c;为智能屏、物联屏、串口屏等嵌入式显示设备领域带来了全新的机遇。该平台由都江堰操作系统 AI 代码自动生成平台研发&#xff0c;具有显著的优…

Java中如何使用正则表达式进行字符串匹配和替换?

在Java中&#xff0c;你可以使用java.util.regex包中的正则表达式功能进行字符串匹配和替换。以下是一些基本的使用方法&#xff1a; ### 字符串匹配 你可以使用Pattern和Matcher类来进行正则表达式匹配。下面是一个简单的例子&#xff1a; java import java.util.regex.Patt…

匈牙利命名法,类变量

类变量指的是生存周期在类里的变量&#xff0c;除了这个类就没人认它。网上有很多说的和匈牙利命名法不一致&#xff0c;说静态变量和类变量就是差不多的&#xff0c;其实不是。【面向对象-05】什么是类变量、实例变量、以及区别_类变量和实例变量区别-CSDN博客

【嵌入式操作系统(Linux篇)】实验期末复习(1)

以下是关于嵌入式操作系统&#xff08;Linux篇&#xff09;的实验汇总&#xff0c;大概率都是会考的 特别是shell程序和文件IO的操作 嵌入式操作系统实验小结—涉及期末大题 &#xff08;一&#xff09;Linux操作系统的使用实验 1、认识Linux操作系统的目录结构 请进入自己…

代理IP如何助力旅游信息聚合?

在数字化时代&#xff0c;旅游信息聚合对于提升服务质量、优化用户体验起着至关重要的作用。随着在线旅游预订的普及&#xff0c;旅游信息的采集、整合和呈现成为了一个复杂而关键的过程。在这个过程中&#xff0c;代理IP技术以其独特的优势&#xff0c;为旅游信息聚合提供了强…

APP项目测试 之 开发模型和发布

项目客户端一般分为&#xff1a;浏览器端和APP端 APP端分为&#xff1a;手机端&#xff08;安装在手机上的软件&#xff09;和PC端&#xff08;安装在电脑上的软件&#xff09; 1.开发模型 项目迭代速度不同&#xff1a;开发模型不一样 传统行业&#xff1a;瀑布模型 互联网行业…

[数据集][目标检测]水面垃圾水面漂浮物检测数据集VOC+YOLO格式3749张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;3749 标注数量(xml文件个数)&#xff1a;3749 标注数量(txt文件个数)&#xff1a;3749 标注…

MySQL 死锁处理

查询是否锁表 SHOW OPEN TABLES WHERE In_use > 0; 查看正在锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; 查看等待锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS; 查看进程信息 SHOW PROCESSLIST; 或者 SELECT * FROM INFORMATION_SCHE…