【预训练语言模型】K-BERT: Enabling Language Representation with Knowledge Graph

本文主要是介绍【预训练语言模型】K-BERT: Enabling Language Representation with Knowledge Graph,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【预训练语言模型】K-BERT: Enabling Language Representation with Knowledge Graph

核心要点:

  • 融合KG到BERT,并非是embedding融合,而是将KG和原始文本结合形成sentence-tree;
  • 根据sentence tree提出soft-position和visible matrix以避免knowledge noise;
  • K-BERT在中文领域上先预训练(不加KG),然后在fine-tuning(加KG)

简要信息:

序号属性
1模型名称K-BERT
2发表位置AAAI 2020
3所属领域自然语言处理、预训练语言模型
4研究内容知识增强的语言模型
5核心内容Knowledge-enhanced PLM
6GitHub源码https://github.com/autoliuweijie/K-BERT
7论文PDFhttps://ojs.aaai.org//index.php/AAAI/article/view/5681

一、动机

  • 现如今无监督的预训练语言模型在诸多任务上达到SOTA。但是这些方法忽略了引入domain knowledge。由于预训练和微调之间的领域差异(domain-discrepancy),在依赖于knowledge的任务上这些模型的表现并不很好;

Even though they can refresh the state-of-the-art of GLUE (Wang et al. 2018) benchmark by learning from open-domain corpora, they may fail in some domain-specific tasks, due to little knowledge connection between specific and open domain.

  • 引入知识图谱表征并与语言模型的表征进行融合可以实现增强。但是这种knowledge integration存在两个挑战:(1)实体的embedding和word embedding来自不同的语义空间,即异构嵌入空间(Heterogeneous Embed- ding Space,HES);(2)过多地引入knowledge可能会带来大量的噪声Knowledge Noise(KN);

二、方法

  本文提出一种知识增强的预训练语言模型,模型架构如下图所示:

  • Knowledge Layer:对输入的文本,检索相应的三元组,并结合原始文本,将输入转换为sentence tree;
  • Embedding Layer:将sentence tree喂入Emebdding Layer得到token-level embeddng;
  • Seeing Layer:将sentence tree喂入该模块得到visible matrix,对于每个token控制其可见范围,以控制语义的表示;
2.1 Knowledge Layer

  旨在将输入的文本以及对应的KG,将文本转换为sentence tree

  • K-Query:从KG中查询与当前输入文本有关的所有三元组: E = K Q u e r y ( s , K ) E=K_{Query}(s, \mathbb{K}) E=KQuery(s,K)
  • K-Inject:将检索到的三元组,根据其对应的entity mention的position,嵌入到原始的文本中,并生成sentence tree: t = K I n j e c t ( s , E ) t=K_{Inject}(s, E) t=KInject(s,E)
    sentence tree的样例如下图所示:
    在这里插入图片描述
2.2 Embedding Layer

  引入Knowledge Layer得到的是tree结构,因此需要将其转换为序列。转换的方法(re-arrangement):

In our re-arrange strategy, tokens in the branch are inserted after the corresponding node, while subsequent tokens are moved backwards.

例如下图:
在这里插入图片描述

  • Token embdding:选择BERT的embedding和分词方法;
  • Soft-position embedding:改进position embedding,将sentence tree上的节点也进行编号;
  • Segment embedding:与BERT一致;
2.3 Seen Layer

动机: The input to K-BERT is a sentence tree, where the branch is the knowledge gained from KG. However, the risk raised with knowledge is that it can lead to changes in the meaning of the original sentence

  因为将外部知识也直接插入到了原始文本中,避免模型在进行attention计算时,将没有相关联的实体进行计算,因此需要生成一个visible matrix以限制attention的计算范围:
在这里插入图片描述
  限制方法:如果token i i i j j j 属于同一个branch(即 w i ⊖ w j w_i\ominus w_j wiwj),则允许计算它们之间的attention,否则不计算attention。

例如:
● Cook和Apple在同一个分支上,则需要计算attention;
● Apple和China不在同一个分支上,不需要计算attention;
● Cook和Beijing在同一个分支(原始文本序列),需要计算attention

  根据visible matrix,对attention矩阵进行mask,计算过程如下所示:

三、实验

3.1 数据语料

Pre-trained Corpora
  使用两个中文语料:

  • WikiZh:https://dumps.wikimedia.org/zhwiki/latest/
  • WebtextZh:https://github.com/brightmart/nlp_chinese_corpus

Knowledge Graph

  • 复旦知识工场:http://kw.fudan.edu.cn/cndbpedia/intro/
  • HowNet:http://www.keenage.com/
  • MedicalKG:作者自己构建的中文医疗KG

3.2 实验设置

baseline

  • 原始的BERT;
  • 将BERT重新在WikiZh和WebtextZh上进行预训练;
    parameter
  • 所有参数与BERT保持一致;
  • K-BERT的预训练阶段不融入KG,在Fine-tuning和Inference阶段使用KG;

For K-BERT pre-training, all settings are consistent with (Devlin et al. 2018). One thing to emphasize is that we don’t add any KG to K-BERT during the pre-training phase. Be- cause KG binds two related entity names together, thus mak- ing the pre-trained word vectors of the two are very close or even equal and resulting in a semantic loss. Therefore, in the pre-training phase, K-BERT and BERT are equivalent, and the latter’s parameters can be assigned to the former. KG will be enabled during the fine-tuning and inferring phases.

3.3 实验结果

  在若干Open domain Task上进行fine-tuning的结果如下表所示:

在这里插入图片描述

  • KG对于情感分析类任务没有实质的增益;
  • 对于语义相似判断类的任务(NLI等),HowNet更优势;而对于QA和NER类任务,CN-DBpedia更优势;因此对于不同的任务,需要考虑选择相应的KG;

  在若干Specific-domain Task进行fine-tuning的结果如下表所示:

在这里插入图片描述

  • 可知引入KG可以有效提高P、R和F1值
3.4 消融实验:

这篇关于【预训练语言模型】K-BERT: Enabling Language Representation with Knowledge Graph的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/255442

相关文章

GO语言短变量声明的实现示例

《GO语言短变量声明的实现示例》在Go语言中,短变量声明是一种简洁的变量声明方式,使用:=运算符,可以自动推断变量类型,下面就来具体介绍一下如何使用,感兴趣的可以了解一下... 目录基本语法功能特点与var的区别适用场景注意事项基本语法variableName := value功能特点1、自动类型推

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作

Go语言使用Gin处理路由参数和查询参数

《Go语言使用Gin处理路由参数和查询参数》在WebAPI开发中,处理路由参数(PathParameter)和查询参数(QueryParameter)是非常常见的需求,下面我们就来看看Go语言... 目录一、路由参数 vs 查询参数二、Gin 获取路由参数和查询参数三、示例代码四、运行与测试1. 测试编程路

Go语言使用net/http构建一个RESTful API的示例代码

《Go语言使用net/http构建一个RESTfulAPI的示例代码》Go的标准库net/http提供了构建Web服务所需的强大功能,虽然众多第三方框架(如Gin、Echo)已经封装了很多功能,但... 目录引言一、什么是 RESTful API?二、实战目标:用户信息管理 API三、代码实现1. 用户数据

Go语言网络故障诊断与调试技巧

《Go语言网络故障诊断与调试技巧》在分布式系统和微服务架构的浪潮中,网络编程成为系统性能和可靠性的核心支柱,从高并发的API服务到实时通信应用,网络的稳定性直接影响用户体验,本文面向熟悉Go基本语法和... 目录1. 引言2. Go 语言网络编程的优势与特色2.1 简洁高效的标准库2.2 强大的并发模型2.

Go语言使用sync.Mutex实现资源加锁

《Go语言使用sync.Mutex实现资源加锁》数据共享是一把双刃剑,Go语言为我们提供了sync.Mutex,一种最基础也是最常用的加锁方式,用于保证在任意时刻只有一个goroutine能访问共享... 目录一、什么是 Mutex二、为什么需要加锁三、实战案例:并发安全的计数器1. 未加锁示例(存在竞态)

C语言自定义类型之联合和枚举解读

《C语言自定义类型之联合和枚举解读》联合体共享内存,大小由最大成员决定,遵循对齐规则;枚举类型列举可能值,提升可读性和类型安全性,两者在C语言中用于优化内存和程序效率... 目录一、联合体1.1 联合体类型的声明1.2 联合体的特点1.2.1 特点11.2.2 特点21.2.3 特点31.3 联合体的大小1

Go语言使用select监听多个channel的示例详解

《Go语言使用select监听多个channel的示例详解》本文将聚焦Go并发中的一个强力工具,select,这篇文章将通过实际案例学习如何优雅地监听多个Channel,实现多任务处理、超时控制和非阻... 目录一、前言:为什么要使用select二、实战目标三、案例代码:监听两个任务结果和超时四、运行示例五

C语言中%zu的用法解读

《C语言中%zu的用法解读》size_t是无符号整数类型,用于表示对象大小或内存操作结果,%zu是C99标准中专为size_t设计的printf占位符,避免因类型不匹配导致错误,使用%u或%d可能引发... 目录size_t 类型与 %zu 占位符%zu 的用途替代占位符的风险兼容性说明其他相关占位符验证示