论文学习:基于知识图谱的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.rhkb.cn/news/363617.html

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

相关文章

【干货】微信小程序免费开源项目合集

前言 2024年了,还有小伙伴在问微信小程序要怎么开发,有什么好的推荐学习项目可以参考的。今天分享一个收集了一系列在微信小程序开发中有用的工具、库、插件和资源:awesome-github-wechat-weapp。 开源项目介绍 它提供了丰富的资源列表&…

【每日一练】python运算符

1. 算术运算符 编写一个Python程序,要求用户输入两个数,并执行以下运算:加法、减法、乘法、求余、除法、以及第一个数的第二个数次方。将结果打印出来。 a input("请输入第一个数:") b input("请输入第二个数&…

【Java】字节数组 pcm 与 wav 格式互转 (附原理概述)

前言 最近实现了一个文字转语音的功能,语音引擎返回的是pcm格式的数据。需要转化成wav格式前端才能播放。本文首先会给出解决方案,后续会讲背后的原理。 场景 git 仓库 https://github.com/ChenghanY/pcm-wav-converter 1. pcm wav 转化工具类 入参和…

人脑计算机技术与Neuroplatform:未来计算的革命性进展

引言 想象一下,你在某个清晨醒来,准备开始一天的工作,而实际上你的大脑正作为一台生物计算机的核心,处理着大量复杂的信息。这并非科幻电影的情节,而是人脑计算机技术即将带来的现实。本文将深入探讨FinalSpark公司的…

明明设置允许跨域,为什么还会出现跨域请求的问题

一、问题 在微服务项目中,明明已经设置允许跨域访问: 为什么还会出现跨域请求问题? 二、为什么 仔细查看错误提示信息:When allowCredentials is true, allowedOrigins cannot contain the special value "*" since t…

pytest测试框架pytest-html插件生成HTML格式测试报告

Pytest提供了丰富的插件来扩展其功能,pytest-html插件帮助我们生成HTML格式的测试报告,为我们提供直观、有效的测试结果展示。 为了使用 pytest-html,需要满足以下条件: Python 3.6 或更高版本 pytest-html安装 使用pip命令安…

【Linux】服务器被work32病毒入侵CPU占用99%

文章目录 一、问题发现二、问题解决2.1 清楚病毒2.2 开启防火墙2.3 修改SSH端口2.4 仅使用凭据登录(可选) 一、问题发现 我的一台海外服务器,一直只运行一项服务(你懂的),但是前不久我发现CPU占用99%。没在…

【漏洞复现】宏景HCM人力资源信息管理系统——任意文件读取漏洞

声明:本文档或演示材料仅供教育和教学目的使用,任何个人或组织使用本文档中的信息进行非法活动,均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 宏景HCM人力资源信息管理系统是一款全面覆盖人力资源管理各模块…

“Hello, World!“ 历史由来

布莱恩W.克尼汉(Brian W. Kernighan)—— Unix 和 C 语言背后的巨人 布莱恩W.克尼汉在 1942 年出生在加拿大多伦多,他在普林斯顿大学取得了电气工程的博士学位,2000 年之后取得普林斯顿大学计算机科学的教授教职。 1973 年&#…

Java--回顾方法的定义

1.修饰符 public 公共的 修饰String类型 2.返回类型 返回的值得类型 返回值为String(字符串)类型 3.break continue return的区别 break,结束整个循环 continue,结束本次循环 return,结束整…

21、matlab生成脉冲序列:pulstran()函数

1、matlab生成脉冲序列简介 MATLAB生成脉冲序列通常涉及到使用MATLAB中的函数或编程来创建具有特定时间间隔和幅度的脉冲信号。脉冲序列通常用于数字信号处理、通信系统测试等应用中。 生成脉冲序列可以采用以下方法之一: 使用MATLAB中的函数,例如squ…

mfc140.dll怎么安装?mfc140.dll丢失安装详细解决方法

当电脑出现找不到mfc140.dll丢失问题,我们需要怎么办?怎么解决mfc140.dll丢失问题?mfc140.dll到底是什么?下面我给大家详细介绍与分析,最重要的是mfc140.dll的解决方法! 一、文件丢失原因分析 在分析mfc14…

expandtabs()方法——tab符号转为空格

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 expandtabs()方法把字符串中的tab(\t)符号转为空格,tab(\t)符号默认的空格数是…

TS_开发一个项目

目录 一、编译一个TS文件 1.安装TypeScript 2.创建TS文件 3.编译文件 4.用Webpack打包TS ①下载依赖 ②创建文件 ③启动项目 TypeScript是微软开发的一个开源的编程语言,通过在JavaScript的基础上添加静态类型定义构建而成。TypeScript通过TypeScript编译器或…

Keil5中:出现:failed to execute ‘...\ARMCC\bin\ArmCC‘

点三个点,去自己的磁盘找自己的ARM\ARMCC\bin

HBuilder X 小白日记01

1.创建项目 2.右击项目&#xff0c;可创建html文件 3.保存CtrlS&#xff0c;运行一下 我们写的内容&#xff0c;一般是写在body里面 注释的快捷键&#xff1a;Ctrl/ h标签 <h1> 定义重要等级最高的(最大)的标题。<h6> 定义最小的标题。 H标签起侧重、强调的作用…

《数据结构与算法基础 by王卓老师》学习笔记——1.4算法与算法分析

一、算法 1.1算法的研究内容 1.2算法的定义 1.3算法的描述 以下是算法的自然语言描述 以下是算法的传统流程图表示 以下是NS流程图表示 1.4算法和程序的区别与联系 1.5算法的五个特性 1.6算法设计的要求 Robustness也称为鲁棒性 二、算法分析 2.1算法时间效率的度量 2.1.1事…

【C++课程设计——演讲比赛系统】

文章目录 前言一、演讲比赛程序需求二、每个功能模块的实现1. 创建管理类(.h文件)2.1. 创建管理类(.cpp文件)3.创建参赛选手类(.h)4.将整体逻辑进行封装 测试项目总结 前言 在学习完C的stl容器后&#xff0c;我们来写一下小项目对其进行应用&#xff01; 项目名称为&#xff1…

[渗透测试] 任意文件读取漏洞

任意文件读取漏洞 概述 漏洞成因 存在读取文件的功能&#xff08;Web应用开放了文件读取功能&#xff09;读取文件的路径客户端可控&#xff08;完全控制或者影响文件路径&#xff09;没有对文件路径进行校验或者校验不严格导致被绕过输出文件内容 漏洞危害 下载服务器中的…

入门机器视觉的正确打开方式——徒手撸一个python+opencv实现的机器视觉简易调试工具(下)

目录 1.引言2.框架思路3.图像处理流程化的实现3.1如何解析图像流程数据结构3.2 使用networkx网络图库3.3 python实现 4.结论5.python源码PS.扩展阅读ps1.六自由度机器人相关文章资源ps2.四轴机器相关文章资源ps3.移动小车相关文章资源 1.引言 在当今AI时代&#xff0c;关于视觉…