BERT:从Transformer中获得上下文的编码表示.
- paper:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
- arXiv:link
Bidirectional Encoder Representations from Transformers(BERT)是通过在未标注语料上进行自监督学习获得单词的较好特征表示的方法,其结构是Transformer的Encoder。在下游任务中,可以直接使用BERT的特征表示作为该任务的词嵌入特征,并进行微调。BERT提供了两个模型,对应的超参数如下:
- $\text{BERT}_{BASE}$:层数$L=12$,特征维度$H=768$,自注意力头数量$A=12$;参数量$110$M
- $\text{BERT}_{LARGE}$:层数$L=24$,特征维度$H=1024$,自注意力头数量$A=16$;参数量$340$M
作者比较了ELMo,GPT和BERT,只有BERT能够直接获取每一个token的相邻上下文信息,这也是其名称中bidirectional的由来。
1. BERT的预训练过程
BERT是一个多任务模型,由两个自监督任务组成。
Task #1. Masked Language Model (MLM)
训练时,对输入序列的一部分word加上mask,预测这些word。 共有$15\%$的token会被随机mask,确定要mask掉的单词之后,$80\%$的概率会直接替换为\([Mask]\),$10\%$的概率将其替换为其它任意单词,$10\%$的概率会保留原始token。 具体做法是把mask位置的词向量喂入一个简单的线性多元分类网络,同时训练BERT和这个简单的网络:
Task #2. Next Sentence Prediction (NSP)
训练时,把两个句子用\([SEP]\)连接,首部加上\([CLS]\),判断这两个句子是否有连接关系。 训练数据的生成方式是从语料库中随机抽取连续的两句话,其中$50\%$的概率保留抽取的两句话,$50\%$的概率随机从语料库中提取第二句话。 具体做法是把\([CLS]\)位置的词向量喂入一个简单的线性二元分类网络,同时训练BERT和这个简单的网络:
由于BERT的输入句子形如[CLS]句子1[SEP]句子2
,因此输入的编码向量使用三种嵌入向量之和:
- 词嵌入向量:使用WordPiece将单词划分成一组有限的公共子词单元,能在单词的有效性和字符的灵活性之间取得平衡。例如‘playing’被拆分成‘play’和‘ing’;
- 分割嵌入:用于区分两个句子是否具有上下文关系。对于具有上下文关系的句子对,第一个句子的特征值是$0$,第二个句子的特征值是$1$。
- 位置嵌入:将单词的位置信息编码成特征向量。
BERT在训练时,同时使用上述两种方法。
2. BERT的微调过程
BERT在训练完成后,便可以针对不同的下游任务进行微调。
1. Sentiment analysis & Document Classification
- input: single sentence
- output: class
2. Slot filling
- input: single sentence
- output: class of each word
3. Natural Language Inference
- input: two sentences (premise + hypothesis)
- output: class (T/F/ unknown)
4. Extraction-based Question Answering(QA)
- input: two sentences (question + document)
- output: 答案在文本中的起始和终止位置
训练两个向量,橙色向量寻找起始位置,蓝色向量寻找终止位置:
Enhanced Representation through Knowledge Integration(ERNIE)是为中文设计的$BERT$模型: