本文分享自华为云社区《知识图谱与大模型结合方法概述》,作者: DevAI 。

《Unifying Large Language Models and Knowledge Graphs: A Roadmap》总结了大语言模型和知识图谱融合的三种路线:1)KG增强的LLM,可在LLMs的预训练和推理阶段引入KGs;2)LLM增强KG,LLM可用于KG构建、KG embedding、KG补全、基于KG的文本生成、KBQA(基于图谱的问答)等多种场景;3)LLM+KG协同使用,主要用于知识表示和推理两个方面。该文综述了以上三个路线的代表性研究,探讨了未来可能的研究方向。

知识图谱(KG)和大语言模型(LLM)都是知识的表示形式。 KG是符号化的知识库,具备一定推理能力,且结果可解释性较好。但存在构建成本高、泛化能力不足、更新难等不足。LLM是参数化的概率知识库,具备较强语义理解和泛化能力,但它是黑盒模型,可能编造子虚乌有的内容,结果的可解释性较差。可见,将LLM和KG协同使用,同时利用它们的优势,是一种互补的做法。

LLM和KG的融合路线,可分为以下类型:

第一种融合路线是KG增强LLM,可在LLM预训练、推理阶段引入KG。以KG增强LLM预训练为例,一个代表工作是百度的ERNIE 3.0将图谱三元组转换成一段token文本作为输入,并遮盖其实体或者关系来进行预训练,使模型在预训练阶段直接学习KG蕴含的知识。

第二种融合路线是LLM增强KG。LLM可用于KG构建、KG embedding、KG补全、基于KG的文本生成、KBQA(基于图谱的问答)等多种场景。以KG构建为例,这是一项成本很高的工作,一般包含1) entity discovery 实体挖掘 2) coreference resolution 指代消解 3) relation extraction 关系抽取任务。LLM本身蕴含知识,且具备较强的语义理解能力,因此,可利用LLM从原始数据中抽取实体、关系,进而构建知识图谱。

第三种融合路线是KG+LLM协同使用,主要用于知识表示和推理两个方面。以知识表示为例,文本语料库和知识图谱都蕴含了大量的知识,文本中的知识通常是非结构化的,图谱里的知识则是结构化的,针对一些下游任务,需要将其对齐进行统一的表示。比如,KEPLER是一个统一的模型来进行统一表示,它将文本通过LLM转成embedding表示,然后把KG embedding的优化目标和语言模型的优化目标结合起来,一起作为KEPLER模型的优化目标,最后得到一个能联合表示文本语料和图谱的模型。示意图如下:

小结:上述方法都在尝试打破LLM和KG两类不同知识表示的边界,促使LLM这种概率模型能利用KG静态的、符号化的知识;促使KG能利用LLM参数化的概率知识。从现有落地案例来看,大模型对知识的抽象程度高,泛化能力强,用户开箱即用,体验更好。且如果采用大模型+搜索的方案,用户更新知识的成本也较低,往知识库加文档即可。在实际业务场景落地时,如果条件允许,优先考虑使用大模型。当前chatGPT火爆,也印证了其可用性更好。如遇到以下场景时,可以考虑将LLM和KG结合使用:

• 对知识可信度和可解释性要求高的场景,比如医疗、法律等,可以考虑再建设知识图谱来降低大模型回答错误知识的概率,提高回答的可信度和可解释性。

• 已经有一个蕴含丰富知识的图谱,再做大模型建设时。可以参考KG增强LLM的方法,将其知识融合到LLM中。

• 涉及基于图谱的多跳推理能力的场景。

• 涉及基于图谱可视化展示的场景,比如企查查、天眼查等。

文章来自:PaaS技术创新Lab,PaaS技术创新Lab隶属于华为云,致力于综合利用软件分析、数据挖掘、机器学习等技术,为软件研发人员提供下一代智能研发工具服务的核心引擎和智慧大脑。我们将聚焦软件工程领域硬核能力,不断构筑研发利器,持续交付高价值商业特性!加入我们,一起开创研发新“境界”!

PaaS技术创新Lab主页链接:https://www.huaweicloud.com/lab/paas/home.html

参考文献:

Unifying Large Language Models and Knowledge Graphs: A Roadmap https://arxiv.org/abs/2306.08302

点击关注,第一时间了解华为云新鲜技术~

知识图谱与大模型相结合的3种方法,1+1>2的更多相关文章

  1. 10.我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。 请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?

    我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形. 请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 是不是发现看不懂,哈哈:编程题就是这样,一定要归纳,手写过程: n ...

  2. 【转】Linux 中清空或删除大文件内容的五种方法(truncate 命令清空文件)

    原文: http://www.jb51.net/article/100462.htm truncate -s 0 access.log -------------------------------- ...

  3. 剑指offer10:2*1的小矩形横着或者竖着去覆盖2*n的大矩形,总共有多少种方法?

    1. 题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 2.思路和方法 思路:(下面说到的x*y的矩形,x是宽 ...

  4. 华为OJ机试题目:两个大整数相乘(纯C语言实现两个大整数相乘,两种方法实现大数相乘)

    题目描述: 输出两个不超过100位的大整数的乘积. 输入: 输入两个大整数,如1234567 123 输出: 输出乘积,如:151851741 样例输入: 1234567 123 样例输出: 1518 ...

  5. sklearn 中模型保存的两种方法

    一. sklearn中提供了高效的模型持久化模块joblib,将模型保存至硬盘. from sklearn.externals import joblib #lr是一个LogisticRegressi ...

  6. 矩形覆盖-我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?

    class Solution { public: int rectCover(int number) { ; ; ; ||number==) ; ) ; ;i<number+;i++){ res ...

  7. 动态规划之----我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?

    利用动态规划,一共有n列,若从左向右放小矩形,有两种放置方式: 第一种:横着放,即占用两列.此时第二行的前两个空格只能横着放,所有,总的放置次数变为1+num(2*(n-2)),其中2*(n-2)代表 ...

  8. Android基础知识02—安卓日志工具LogCat的五种方法

    --------Android 02-------- >>> Android的日志工具LogCat    五个方法,记录信息的级别不一样,从低到高为:    1.Log.v()-日志 ...

  9. Linux下清空或删除大文件内容的2种方法

    在Linux终端下处理文件时,有时候我们想要直接清空文件的内容时但又不用使用任何Linux命令行编辑器,去打开这些文件.那如何才能达到这个目的呢? 1.通过重定向到NULL来清空文件内容 清空或者让一 ...

  10. [译]在Linux中清空或删除大文件内容的5种方法

    原文来源: https://www.tecmint.com/empty-delete-file-content-linux/ 有时,在处理Linux终端中的文件时,您可能希望清除文件的内容,而无需使用 ...

随机推荐

  1. 【Azure API Management】实现在API Management服务中使用MI(管理标识 Managed Identity)访问启用防火墙的Storage Account

    问题描述 在Azure的同一数据中心,API Management访问启用了防火墙的Storage Account,并且把APIM的公网IP地址设置在白名单.但访问依旧是403 原因是: 存储帐户部署 ...

  2. IDEA:使用Test注解,控制台无法输入

    解决方案 步骤一: 点击help ===> Edit Custom VM Options... 步骤二: 添加文件末尾添加如下内容 -Deditable.java.test.console=tr ...

  3. jQuery真伪数组转换

    // 真数组转伪数组 [].push.apply(obj,arr); // 伪数组转真数组 [].slice.call(obj);

  4. NativeBuferring&mdash;&mdash;一种零分配的数据类型[上篇]

    之前一个项目涉及到针对海量(千万级)实时变化数据的计算,由于对性能要求非常高,我们不得不将参与计算的数据存放到内存中,并通过检测数据存储的变化实时更新内存的数据.存量的数据几乎耗用了上百G的内存,再加 ...

  5. 王道oj/problem15(用c++的引用精简代码)

    网址:http://oj.lgwenda.com/problem/15 思路:子函数的形参是指针的时候格式为 int*&p,且原函数实参为p 主函数使用fgets(字符串的指针,最大容量,st ...

  6. tf.feature_column.input_layer 特征顺序问题

    先说结论 tf.feature_column.input_layer()的api,会对传入的feature_columns进行排序,并不是按照输入顺序进行组织,排序依据基于feature_column ...

  7. [Go笔记] 基础-01: Golang发展简史、著名项目及基本使用

    引言 Golang,又称Go语言,是一门开源的静态类型编译型编程语言.自从2007年由谷歌的罗伯特·格里泽默(Robert Griesemer).罗布·派克(Rob Pike)和肯·汤普森(Ken T ...

  8. c++中unique_ptr 的使用和理解

    unique_ptr 的使用 std::unique_ptr是c++11起引入的智能指针,为什么必须要在c++11起才有该特性,主要还是c++11增加了move语义,否则无法对对象的所有权进行传递. ...

  9. Java不能操作内存?Unsafe了解一下

    前言 C++可以动态的分类内存(但是得主动释放内存,避免内存泄漏),而java并不能这样,java的内存分配和垃圾回收统一由JVM管理,是不是java就不能操作内存呢?当然有其他办法可以操作内存,接下 ...

  10. 关于package-lock.json

    前言 上篇文章我们了解了package.json,一般与它同时出现的还有一个package-lock.json,这两者又有什么关系呢?下面一起来了解吧. 介绍 package-lock.json 它会 ...