双向预训练语言模型BERT

栏目: 编程工具 · 发布时间: 6年前

内容简介:Google AI Language在2018.10发布的论文,提出一种预训练语言模型,在十多个NLP任务中取得了SOTA的效果。两种使用语言模型的方法:Feature-based,Word2Vec、Glove、ELMo,把预训练好的语言模型当做一个feature加到word embedding中。

Google AI Language在2018.10发布的论文,提出一种预训练语言模型,在十多个NLP任务中取得了SOTA的效果。

1.现有的LM

两种使用语言模型的方法:

Feature-based,Word2Vec、Glove、ELMo,把预训练好的语言模型当做一个feature加到word embedding中。

fine-tuning,OpenAI-GPT,尽量不改动预训练的语言模型,加输出层并在下游的任务上fine-tune。

他们的共同点:

1.在预训练的时候用的是同一个目标函数;

2.使用单向语言模型学习语言表示。其中,GPT在预训练的时候,预测下一个词只使用其左侧的上下文,相当于使用了Transformer的Decoder的结构。而ELMo等语言模型虽然得到了双向表示,但是是两个独立的目标函数下得到的双向表示直接拼接起来。

2.亮点

结构:

每层都是双向Context-Dependency。

目标函数:MLM(Masked Language Model) + Next Sentence Prediction。

结果:

不需要调整模型结构,只需要在预训练的LM上加上一层输出层并fine-tune就能应用在多种NLP任务。

3.细节

(1)输入:

由词向量+位置向量+Seg向量三个部分组成,

词向量,第一个词是CLS,如果是分类任务这个token对应的embedding可以作为学习到的句子表示。

可学习的位置向量,用来改善self-attention的效果。

对于Sentence-Pair输入类型,采用和GPT类似的方式concat两个句子,以Seg向量区分token所在的句子。

双向预训练语言模型BERT

(2)Train Objective:

MLM:

为了改善单向LM问题,如果直接使用多层双向那么模型相当于直接看到了答案,所以使用类似Cloze的Masked Language Model。

训练的时候如果只是把输入中的一些单词mask为一个特殊字符然后预测它们,那么和使用的时候差别太大。为了减轻这个影响,使用了一些策略(mask 15%的单词):80%的概率mask为mask字符,10%的概率替代为特殊字符,10%的概率使用原有单词。

Next Sentence Prediction:

另一个pre-train的目标,预测句子之间是否是相邻关系。这样使LM在需要理解句子之间关系的下游任务中表现更好。

(3)Pre-train过程:

BookCorpus+Wiki数据的文档级别的语料,抽取出两个sentence(50%抽取相邻句子,50%抽取段落中随机句子)。

(4)Fine-Tune过程:

对于句子级别的分类过程,取第一个token的最后一层作为表示,再加上一个全连接层。

对于span级别的分类过程(比如SQuAD),增加了一个Start Vector:

和End Vector:

,用这两个向量与所有token点乘的softmax作为每个token作为span的概率。

4.缺陷

MLM每个batch只需要预测15%的Mask Token,所以比之前的LM收敛要慢。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

WEBMASTER技术手册

WEBMASTER技术手册

斯潘奥尔 / 斯潘奥尔 / 清华大学出版社 / 2004-4 / 63.0

本书的第三版升级到Apache PHP和Java Script 最新的版本上。同是它还包含了关于mod_perl更为详尽的信息以及提高Web 性能的方法。书中的内容涉及到HTML4.01、CSS、XML和XSLT、JavaScript1.5 、HTTP1.1、A pache2.0等等。一起来看看 《WEBMASTER技术手册》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换