BERT要解决的问题是,输入一些Character(e.g.英文单词、一个汉字),输出字符的Embedding。在BERT之前,one-hot编码、word Embddding也是用来做这件事,即提取特征,将Word转为向量。
对于文本,期望转成的向量,可以体现Word的语义以及Word之间的关联。
【问题1】一词(word type)多义(word token)的情况,如何更好的提取特征?

1.ELMO

ELMO(Embeddings from Language Model)是一个基于RNN的语言模型。
【输入】单词Character
【输出】预测单词的下一个词。

1.1Contextualized Word Embedding

【RNN隐藏层】完成输入输出的训练后,RNN隐藏层就是每个输入的单词对应的Embedding向量;这个Embedding的产生考虑了前文,所以即便是同一个词,在不同的文本中,也会产生不同的Embedding。
image.png

1.2ELMO网络结构

如果考虑上下文,就通过双向RNN共同生成Embedding(拼接起来),这样不同的上下文中,同样的词也会有不同的Embedding;多层双向RNN就生成了多个Embeddings(权重加和,生成最终的Embedding)。
e.g.“潮水 退了 就 知道 谁 没穿 裤子。”
image.png
image.png
image.png

2.BERT

BERT(Bidirectional Encoder Representions from Transformers),BERT的网络结构就是Transformer的Encoder部分。
因为Transformer网络的任务是输入一个句子产生一个句子(Seq2seq),训练时需要给出真实的标注作为输出(e.g.机器翻译的训练需要给出答案),而BERT只是Encoder部分,训练时不需要给出标注,只需要学习一大堆文本。
【输入】单词Character(one-hot编码)。
【输出】单词对应的Embedding。
【问题2】如何训练,产生单词的Embedding?
以下两种训练方式可以同时使用。

2.1训练方式一:预测Masked Word

掩盖(Mask)住原始输入内容中的部分单词,通过输出后接线性分类器进行预测。
线性分类器是一个弱模型,BERT就充当了强模型,只有BERT部分提取出好的特征(更好更有用的表示),才能在分类时更准确。
image.png image.png

2.2训练方式二:预测句子

预测两个句子是不是可以被放在一起,放在一起后可以表达一个合理的意思。
【问题3】为什么CLS要放在网络的开始?
BERT是Transformer中Encoder的部分,内部使用了Self-Attention结构,而Self-Attention可以兼顾到整个输入(远处近处都可以兼顾到),所有CLS放在开头并没有影响。
image.png

2.3BERT的应用

2.3.1文本分类

image.png

2.3.2词分类

image.png

2.3.3语言推理(Inference)

【输入】e.g.句子1:前提 + 句子2:结论
【输出】两个句子搭配在一起,是否成立。
image.png

2.3.4问与答

机器读一篇文章,然后回答问题,假设问题的答案都可以从原文中找出。
image.png
【输入】问题和文章的单词。
【输出】每个单词对应的Embedding。
在训练过程中,加入两个向量一起学习,一个用于预测答案开始的单词索引s,一个用于预测答案结束的单词索引e
image.png

3.GPT

GPT(Generative Pre-training)网络内部使用了Self-Attention结构:
image.png

3.1模型参数对比

模型 参数大小
ELMO 94M
BERT 340M
GPT-2 1542M

来源: 1.台大李宏毅《机器学习》2019