热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【预训练语言模型】WKLM:PretrainedEncyclopedia:WeaklySupervisedKnowledgePretrainedLanguageModel

【预训练语言模型】WKLM:PretrainedEncyclopedia:WeaklySupervisedKnowledge-PretrainedLanguageMo
【预训练语言模型】WKLM:Pretrained Encyclopedia: Weakly Supervised Knowledge-Pretrained Language Model

  知识增强的预训练语言模型旨在借助外部知识库的结构化知识,在对语言模型进行预训练的时候显式地让模型学习到结构事实知识。本文分享一篇来自ICLR 2020的知识增强预训练的工作。

核心要点:

  • 通过Replacement的策略引入外部知识:根据文本中的实体(entity mention),随机挑选知识库中同类型的其他实体作为替换;
  • 提出弱监督的预训练目标——判断实体是否被替换;
  • 方法优势:不需要太多的实体信息、不需要添加或修改预训练语言模型的结构;

简要信息:

序号属性
1模型名称WKLM
2发表位置ICLR 2020
3所属领域自然语言处理、预训练语言模型
4研究内容知识增强的语言模型
5核心内容Knowledge-enhanced PLM
6GitHub源码
7论文PDFhttps://openreview.net/pdf?id=BJlzm64tDH



一、动机


  • 预训练语言模型可以让模型学习到一个语言的语法和语义信息,并可以迁移到下游的其他任务;预训练语言模型也可以在一些需要语言推理的任务上达到不错的效果;然而原始的文本却无法完全包含明确的实体信息;

These tasks are carefully designed so that the text input alone does not convey the complete information for accurate predictions – external knowledge is required to fill the gap


  • 现有的预训练目标均是基于token-level,而并没有显式的对实体进行建模;

However, existing pretraining objectives are usually defined at the token level and do not explicitly model entity-centric knowledge.
encyclopedic knowledge about real-world entities

  WKLM在提出之际,市面上还只有ERNIE等少数的知识增强模型,作者提出的两个动机也完全符合当前对预训练的两方面考虑,即,如何能够让模型快速有效地学习到知识,以及避免引入过多参数模块。

  本文的主要贡献有:

  • 拓展了现有的知识补全(Knowledge Graph Completion)评测到预训练语言模型中,来测试预训练语言模型对常识知识的理解和表征能力;
  • 提出一种新的弱监督预训练方法来让从非结构化的文本中捕捉实体信息;

二、方法:Entity Replacement Training

  接下来详细讲解WKLM模型如何让模型学习到知识。
  首先,给定一个无监督的句子,使用一些分词工具识别出对应的entity mention,并与Wikipedia进行对齐。

因为语料和知识库全部采用英文Wikipedia,如何实现对Wikipedia的语料获取、数据处理以及知识库对齐,可参考博主的另一篇详解:

  作者基于一种假设,即使用实体链指工具认为是完全正确的,因此,所有从原始的文本中识别的实体都认为是正确的(positive statement),为了让模型可以训练,因此需要构建negative。具体的实现方法可以简单描述为:对某个识别出的实体(entity mention),选择具有相同entity type的其他entity进行替换。

我们以中文为例,假设句子是“中国的首都是北京”,其中“北京”属于城市类别的实体。在构建负样本时,则可以选择“上海”来替换“北京”,因为它们都属于城市类别的实体。

  构建好了负样本,我们则认为当前的句子存在错误的信息,因此我们期望模型能够根据整个上下文来判断句子中的每一个实体是否已经被替换。训练目标为:

Je,C=Ie∈E+log⁡P(e∣C)+(1−Ie∈E+)(1−log⁡P(e∣C))J_{e, \mathcal{C}}=\mathbb{I}_{e\in\mathcal{E}^+}\log P(e|C) + (1 - \mathbb{I}_{e\in\mathcal{E}^+})(1 - \log P(e|C))Je,C=IeE+logP(eC)+(1IeE+)(1logP(eC))

其中 E+\mathcal{E}^+E+ 表示所有正确的实体,Ie∈E+\mathbb{I}_{e\in\mathcal{E}^+}IeE+则表示如果当前句子中的某个实体eee是正确的,则对应系数为1,否则为0。C\mathcal{C}C则表示当前的句子。因此,上述的训练目标也可以认为是对每一个实体进行二分类。

  整个处理过程如下图所示:

在这里插入图片描述
(1)Replacement
  对于一个文本中,我们不替换相邻entity mention。 换句话说,任何两个被替换的实体之间必须至少有一个未被替换的实体。 这减少了我们替换同一句子中的所有实体并且结果句子碰巧引入正确实体的情况

(2)Model
  完全选择BERT-base的架构,并自己在完成了预训练过程;
预测部分:选择entity mention boundary representation(entity before和after部分的representation进行拼接),并喂入MLP中进行二分类;

(3)Training Objectives

  • 依然使用Masked Language Modeling任务,但确保不在entity mention上进行mask;

When masking tokens, we restrict the masks to be outside the entity spans.


  • 随机挑选5%的token进行mask;

We use a masking ratio of 5% instead of 15% in the original BERT to avoid mask- ing out too much of the context


  • 训练时,为多任务训练:MLM+entity replacement binary classification,batch_size=128

三、实验

  实验评估包括知识图谱补全、问答和多粒度实体分类。

(1)知识补全(Fact Completion)
  为每个三元组构建为文本描述,例如 {Paris, CapitalOf, France} → the capital of France is Paris。并随机mask一个实体,让模型进行预测。10个relations分别构建1000个样本。评价指标选择Hits@10。
  本文选择Wikidata作为知识库(Wikidata是较为成熟的基于英文Wikipedia的知识图谱补全评测任务,数据集下载地址:https://deepgraphlearning.github.io/project/wikidata5m),实验效果如下图所示:

在这里插入图片描述
(2)问答(Question Answering)
  问答主要包括抽取式阅读理解、多跳问答(知识图谱问答)。本文挑选了4个不同的问答数据集,包括WebQuestion、TriviaQA、Quasar-T和SearchQA。实验结果如下所示:

在这里插入图片描述
从实验可以发现,纯粹的WKLM对问答数据集的增益并不明显,在部分数据集上并不如先前工作。而主要的提升则取自于设计的后处理ranking score。
  作者也对SQuAD进行了评测,如下所示:
在这里插入图片描述
同base级别的模型对比,发现提升约1个点左右。

关于Question Answering任务有关的更多细节,可参考博主的相关解读专栏:问答系统

(3)实体分类(Entity Typing)
  实体分类旨在给定一个句子,以及句子中的一个实体mention,任务的目标是对指定的实体进行分类。作者选择FIGER数据集进行评测,实验结果如下图所示:

在这里插入图片描述


总结:

  • WKLM开创了一种知识增强预训练的先河,即相比百度ERNIE模型提出的entity masking或whole word masking,WKLM引入entity replacement的策略,即让模型去判断实体是否是被替换的(或认为实体是否正确)。此任务相比MLM会更加简单,因为搜索空间只有2分类的大小。事实上,这种replacement的思想也被如今的DeBERTa所借鉴,成为较为简单却有效的提升模型性能的策略。
  • 当然WKLM也有不足之处,例如其基于了一种假设,即现有的链指工具所识别的实体一定是正确的。但是对于中文等领域很难实现对文本中的实体进行准确的挖掘(目前中文领域尚未出现类似TagMe的开源工具)。另外,随机的负采样也无法保证采样出来的实体一定是错误的,即存在假负例问题,可以作为未来改进的部分。

推荐阅读
  • Gitlab接入公司内部单点登录的安装和配置教程
    本文介绍了如何将公司内部的Gitlab系统接入单点登录服务,并提供了安装和配置的详细教程。通过使用oauth2协议,将原有的各子系统的独立登录统一迁移至单点登录。文章包括Gitlab的安装环境、版本号、编辑配置文件的步骤,并解决了在迁移过程中可能遇到的问题。 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • 本文介绍了使用C++Builder实现获取USB优盘序列号的方法,包括相关的代码和说明。通过该方法,可以获取指定盘符的USB优盘序列号,并将其存放在缓冲中。该方法可以在Windows系统中有效地获取USB优盘序列号,并且适用于C++Builder开发环境。 ... [详细]
  • Summarize function is doing alignment without timezone ?
    Hi.Imtryingtogetsummarizefrom00:00otfirstdayofthismonthametric, ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • 本文介绍了Windows Vista操作系统中的用户账户保护功能,该功能是为了增强系统的安全性而设计的。通过对Vista测试版的体验,可以看到系统在安全性方面的进步。该功能的引入,为用户的账户安全提供了更好的保障。 ... [详细]
  • Python15行代码实现免费发送手机短信,推送消息「建议收藏」
    Python15行代码实现免费发 ... [详细]
author-avatar
魅客网小魅
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有