BERT是怎样炼成的--词向量发展史

情到浓时终转凉″ 提交于 2019-12-02 21:57:38

基本原理和特性

词向量

预训练词向量对于很多计算机语言模型至关重要。如何得到优质的词向量是非常热门的研究主题。

什么是好的词向量?

  • 反映出语义和语法的复杂特征
  • 适应不同上下文进行变换

历史回顾-如何用向量表示词语?

one hot vector

有序词典V,包括n个单词。

每一个单词用长度为n的向量表示。这个向量仅于单词在V词典中索引序号位置为1,其余位置为0。这是一种非常稀疏的向量。

缺点:

1.维度非常高。
2.这种向量无法表示词与词之间的关系,无法衡量相似度。

word2vec

用低维度密集向量表示单词,通常维数为100-300。

在训练过程中,要求计算机学习根据当前单词预测其周围单词。或根据周围单词预测当前单词。

模型收敛后,得到单词与向量映射表。

优点:

1.相比one hot维度变低,利于计算。
2.词向量可以表达词语关系:相同上下文环境的词,会具有相似的向量值。
3.无需人工标注,可以利用丰富的语料库自动抽取特征。

缺点:

1.无法区分近义词与反义词,它们会具有相似的向量。
2.单词和向量是一一对应关系,而实际上单词在不同文本环境下,会具有不同的含义,向量无法适应上下文而变换。如下两句,词朝阳会被用相同的向量表达。
我在朝阳上班。
这是个朝阳行业。

ELMo

论文点我

动态词向量技术,词向量不再用固定的映射表来表达。

ELMo训练出一个神经网络模型,它接受输入一个句子,输出句子中每个单词的向量序列。

网络结构:

训练过程:输入句子 - embedding层(512) - 双向lstm层(2*512) - 双向lstm层(2*512) - softmax层(vocab_size)

预测过程:输入句子 - embedding层(512) - 双向lstm层(2*512) - 双向lstm层(2*512) - 拼接前三层各自的输出(3*1024)

训练任务:

分别从句子的正反两个方向encode,预测下一个单词。

我爱北京天安门。

正向:
输入 我 爱 北京 天安门
预测 爱 北京 天安门 。

反向:
输入 。 天安门 北京 爱
预测 天安门 北京 爱 我

优点:

1.继承了word2vec的所有优点
2.动态词向量,解决了不同上下文环境下向量不可变的问题。

缺点:

1.用两个单向模型(双向lstm)表示双向语言模型。每一个单向模型只能注意到它前面的所有词语,而无法接触到它后面的词语。

BERT

论文点我

为了弥补ELMo的不足,BERT真正实现了双向语言模型。

此外,BERT还增加了一个特性,使神经网络学习句子之间是否连贯的关系,最终能在智能问答等领域得到最佳结果。

网络结构:

训练过程:输入句子 - embedding层(768) - position_embedding层(768) - transformer层(768) * 12 - masked_lm层 - next_sentence层
预测过程:输入句子 - embedding层(768) - position_embedding层(768) - transformer层(768) * 12

训练任务:

1.遮蔽单词预测(masked lm)

在原句中随机选择单词做遮蔽处理。

由于训练过程,语料含有遮蔽的词,而训练后将模型应用于实际任务时,语料没有遮蔽词。这种不匹配问题,用下面的方式来解决:

挑选15%的词。这些被选中的词中,80%直接替换成[MASK],10%被随机替换成另一个语料中的词,10%不做任何处理。

Transformer编码器不知道最终要预测哪个词,更不知道输入句子对里哪个词是被随机替换成其他词了,所以它必须保留每个词语的语境表达分布信息。此外,这种随机替换的概率只有15%*10%=1.5%,因此它不会严重破坏语言模型的理解能力。

由于task1中只对15%的遮蔽词做预测,这样的任务需要更多的训练步骤才能达到收敛。但它对模型精度提升的收益远大于训练时间成本。

2.句子对[A, B]关系预测(next_sentence)
许多重要的下游任务,如问答(QA)和自然语言推理(NLI)都是基于理解两个句子之间的关系。通过上述语言模型,无法直接获得这种信息。

为了训练一个理解句子关系的模型,解决方法为:训练一个二分类任务,判断句子对[A,B]是否连贯的上下文。

生成句子对[A,B]时,50%概率是连贯的上下句,50%概率是随机摘取的不相关句子。

优点:

1.在NLP领域各项任务中取得突破性成绩。
2.训练完毕后,稍加调整即可用于具体任务。

缺点:

1.训练过程非常耗时,谷歌公布的训练时间是在4-16个TPU集群上训练了4天,如果用GPU训练可能需要一周以上。
好在谷歌开源了训练好的中文模型。
2.模型参数量大,约为110M,需占用11G显存(一整张显卡)。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!