0%

Bert

目前大部分 NLP 任务深度学习任务中都会使用预训练好的词向量(Word2Vec等)进行网络初始化(而非随机初始化),从而加快网络的收敛速度。预训练词向量通常只编码词汇之间的关系,对上下文信息考虑不足,并且无法处理一词多义问题。如 bank 既可以表示银行,也可以表示岸边,却对应相同的词向量,这显然是不合理的。为了更好地考虑词上下文信息,Context2Vec 使用两个双向长短时记忆网络(Long Short Term Memory, LSTM)来分别编码单词左到右(Left to right),右到左(right to left)的上下文信息。这种使用预训练语言模型的词向量作为特征输入到下游目标任务的方法称为 feature-based。

另一种方法是微调(Fine-tuning),GPT、BERT 和后续预训练工作都属于这一范畴,直接在深层 Transformer 网络上进行语言模型训练,收敛后针对下游目标进行微调,不需要再为目标任务设计 Task-specific 网络重头训练。

BERT(Bidirectional Encoder Representations from Transformers)是基于 Transformer 的深度双向语言表征模型,本质上利用 Transformer 结构构造了一个多层双向的 Encoder 网络。Transformer 是 Google 2017 年提出的基于自注意力机制(self-attention)的深层模型,在包括机器翻译在内的多项 NLP 任务上效果显著,超过 RNN 且训练速度更快。不到一年时间内,Transformer已经取代RNN成为神经网络机器翻译的State-Of-The-Art(SOTA)模型。

输入表示

针对不同的任务,BERT模型的输入可以是单句或者句对。对于每一个输入的Token,它的表征由其对应的词表征(Token Embedding)、段表征(Segment Embedding)和位置表征(Position Embedding)相加产生。

  • 对于英文模型,使用了Wordpiece模型来产生Subword从而减小词表规模;对于中文模型,直接训练基于字的模型。
  • 模型输入需要附加一个起始Token,记为[CLS],对应最终的Hidden State(即Transformer的输出)可以用来表征整个句子,用于下游的分类任务。
  • 模型能够处理句间关系。为区别两个句子,用一个特殊标记符[SEP]进行分隔,另外针对不同的句子,将学习到的Segment Embeddings 加到每个Token的Embedding上。
  • 对于单句输入,只有一种Segment Embedding;对于句对输入,会有两种Segment Embedding。

参考资料

  1. 【NLP】彻底搞懂BERT
  2. 美团BERT的探索和实践