浅谈 Knowledge-Injected BERTs

本文探讨了如何通过引入外部知识改进BERT模型,包括SpanBERT的phrase-level mask策略,WKLM与ERNIE-baidu的entity信息利用,以及K-BERT与ERNIE-thu的模型结构创新。这些方法在预训练任务设计和模型性能上带来了显著提升,特别是在NLP任务如NER和QA中。
摘要由CSDN通过智能技术生成

作者丨张成蹊

学校丨北京大学硕士生 / 字节跳动AI-Lab实习生

研究方向丨自然语言处理、命名实体识别

在当下的 NLP 领域,BERT 是一个绕不过的话题。 

自从 2018 年底横空出世以来,它以势不可挡的态势横扫了整个 GLUE 榜单,将基准推进到 80% 的水平线,在 SQuAD1.1 中全部指标超越人类水平。在使用其预训练的参数后,几乎所有的下游任务都获得了相当的增益(当然,大量参数随之带来的也有运算效率的下降),自此开创了大语料无监督任务的预训练模型时代,自成一个山门,史称 Bertology。 

从任务本身来看,BERT 本质上是一个通用的语言模型(Language Representation Model),在进行预训练时,我们希望它能够学习到词表中每个词的向量表示,即对我们平时所接触的自然语言进行编码(encode),使之转化成模型能理解的语言。 

这样的设定本身存在一个小问题:通过模型编码之后的语言向量,人类无法理解,那如何才能确保模型正确地学到我们希望的知识?一个解决方案是,我们将模型的输出映射到原来的词表,然后将概率最大的单词作为模型的预测结果。如果这个单词就是与我们模型的输入一致,即意味着模型确实知道了这个单词的含义。 

BERT 将上述解决方案巧妙地实现为一个完形填空的过程,即随机遮住一些单词,只给模型上下文信息,让模型去预测这些单词的表示。此外,为了让模型对句子之间的段落关系有更好的理解,我们也可以让它去尝试预测两个句子之间的关系:是否连续——我们只需要留出一个 token 的空位来进行这个二分类训练就可以。

这些设计保证了模型能够同时建模句子内部的词法信息与外部的关系信息,而输入的数据本身除了一个预先定义好的词表外,不需要任何多余的监督信号,所以能在大量语料上进行预训练。合理的任务设计+大量语料的支持,让 BERT 有了超越同侪的效果。 

随着对任务理解的加深,有些人开始提出了这样的问题: 

“如果完型填空任务中遮住的不是一个单词,而是一个短语,是不是 BERT 就能够更好的对短语进行辨析?如果我们增加可以学习到更多知识的任务,BERT 会不会变得更好?——如果我们设计一些任务不停地训练它,让它一直学习下去呢?”

从直觉上来说,如果我们遮住一个短语(phrase),而非一个单词(word),即便 BERT 在大部分任务中并没有变好,我们也有理由相信它会在一些需要短语知识的任务中变好(比如 NER);而如果我们增加更多的任务,尝试给它灌输更多的知识(并且它的复杂度本身又足以支撑它在诸多任务的填鸭式教育中不会头昏)的话,它将同时编码更多方面的信息。 

上面的思路似乎值得一试,然而大部分的想法都需要外部知识的支持。例如:如果我们在一个句子的随机位置遮住一个随机长度的短语,这个短语大部分情况下不会具有值得学习的实质性意义(虽然 SpanBERT [1] 就是这么做的)——而如果我们有办法将结构化的信息注入到大量的原始语料中去,我们就能知道哪些短语是有意义的了,以此就可以进行更多的探索性实验。 

这也是本文将关注的重点:将外部知识注入到预训练语言模型中。具体而言,我将探讨下面三个问题: 

  • 我们可以把哪些信息引入到 BERT 的预训练语料中,以使 BERT 在某些或者全部的任务上有更好的表现? 

  • 如何根据这些信息的内容,针对性地设计有意义又易于实现的预训练任务? 

  • 这些信息的加入是否能带来我们预期的模型提升? 

值得注意的是,本文仅探讨(至少在建模预期上)着眼于对通用 NLP 任务提升的 paper。在 arXiv 上也有相当一部分的 paper 尝试了将结构化的知识注入到 BERT 中,随后进行一些特定领域的应用(大部分基于 Commonsense 的 QA 任务,少部分的文档分类或药品推荐任务),有感兴趣的读者可以自行搜索阅读。 

我将默认读者已经对 BERT 的结构与任务具有一定的了解,不花时间介绍相关的背景知识。对于想了解这些知识的同学,我觉得 BERT 的原文 [2]、 BERT 中的核心结构:Transformer [3],以及 Transformer 的图形化解读 [4] 这三个资料值得一读。

Knowledge Enhanced BERTs

Overview

正如上文所说,如果要对 BERT 进行改动,最易于尝试的方法就是将 mask 这个行为从 token level 提升到 phrase level,SpanBERT [1] 就进行了这样的一次尝试。鉴于此,尽管 SpanBERT 中并没有使用到任何外部的知识,我也会对它的预训练策略进行简单的论述——而在了解 SpanBERT 的思路以后,对于一些殊途同归的实体mask策略(如 WKLM / ERNIE-baidu / ERNIE-thu 等)就更容易理解了。

▲ 图1. Knowledge-injected BERTs的思路简图

我总结了大部分模型在进行知识注入时所采用的策略(见图 1),它们或多或少地修改了传统 BERT 的任务与结构。 

其中,大部分的 paper 旨在修改模型的预训练任务:与传统BERT的预训练策略不同的是,现在我们能够根据手头上已有的外部知识,来更加精确地选择我们的 mask 目标——也就是特定的实体了(WKLM [5] / ERNIE-baidu [6]);此外,我们也能人工设计一些预训练任务,来针对性地提高 BERT 在词法、语法或句法方面的表现(LIBERT [7])。 

ERNIE-thu [8] 做得更深一步,在增加一项预训练目标的基础上修改了部分的模型结构,将其中一半的 transformer 层用来同时编码 token 与实体,并注入实体信息到所对齐的 token 上。 

K-BERT [9] 在输入的 embedding 上做了尝试:它直接使用知识库中的信息扩展了原有的输入,然后使用 soft-position 来对齐插入单词与原有单词之间的距离。由于在绝对位置上,插入的单词仍然影响到了整体的 self-attention 计算,所以 K-BERT 也修改了部分的模型结构,以纠正这个负面影响。 

最后,尽管没有出现在图中,ERNIE2.0-baidu [10] 将预训练任务数量扩展到了 7 个,然后采用多任务序贯训练模式,来保证模型在所有任务上都有很好的效果。截止本文写作之时(2020.01.20),ERNIE2.0 仍然居于 GLUE benchmark 榜首,紧随其后的是前几天阿里达摩院的 Alice v2。 

下面,我将按我个人的理解对这些模型进行简单的归类,然后通过循序渐进的方式来详细说明这些模型提出的思路与采用的训练模式。希望大家在看过总结之后,能够根据自己想完成的任务设计更具针对性的预训练 task。

毕竟,无论是否要用到外部的知识,设计一个数据友好、功能有效的策略,总比调参或组件的堆叠更有成就感一些。相信如果 Bi-LSTM 看到我们所做的努力,也会在天上给我们竖起一个大拇指吧。 

一次简单的试探:SpanBERT

遥记得两个月前参加实习生面试的时候,现在的 leader 提出了一个有

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值