【预训练语言模型】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语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

Go语言代码格式化的技巧分享

《Go语言代码格式化的技巧分享》在Go语言的开发过程中,代码格式化是一个看似细微却至关重要的环节,良好的代码格式化不仅能提升代码的可读性,还能促进团队协作,减少因代码风格差异引发的问题,Go在代码格式... 目录一、Go 语言代码格式化的重要性二、Go 语言代码格式化工具:gofmt 与 go fmt(一)

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

Go语言中Recover机制的使用

《Go语言中Recover机制的使用》Go语言的recover机制通过defer函数捕获panic,实现异常恢复与程序稳定性,具有一定的参考价值,感兴趣的可以了解一下... 目录引言Recover 的基本概念基本代码示例简单的 Recover 示例嵌套函数中的 Recover项目场景中的应用Web 服务器中

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

Go语言中使用JWT进行身份验证的几种方式

《Go语言中使用JWT进行身份验证的几种方式》本文主要介绍了Go语言中使用JWT进行身份验证的几种方式,包括dgrijalva/jwt-go、golang-jwt/jwt、lestrrat-go/jw... 目录简介1. github.com/dgrijalva/jwt-go安装:使用示例:解释:2. gi