BERT由谷歌AI语言团队提出,与其他语言表示模型不同,BERT旨在通过联合调节所有层中的上下文来预先训练深度双向表示。因此,预训练的BERT表示可以通过一个额外的输出层进行微调,并适用于广泛任务的最先进模型的构建,比如问答任务和语言推理,而无需针对具体任务做大幅架构修改。下图1展示了三种预训练模型,其中 BERT 使用了双向的Transformer,OpenAI GPT使用从左到右的单向信息,而ELMo则是把单独训练的从左到右及从右到左的LSTM模型进行合并。这三种模型中只有BERT在所有层中考虑了左右的上下文语境信息。
图1:BERT、OpenAI GPT和ELMo三种预训练语言模型结构
为了克服单向语言模型的限制,受到Cloze 任务(Taylor, 1953)的启发,该论文采用了新的预训练目标:遮蔽语言模型(masked language model,MLM),来克服上文提到的单向性局限。MLM 随机遮蔽模型先是随机遮蔽输入中的一些 token,其目标在于仅基于遮蔽词的语境来预测其原始词汇 id。与从左到右的语言模型预训练不同,MLM 目标允许表征融合左右两侧的语境,从而预训练一个深度双向 Transformer。除了遮蔽语言模型之外,本文作者还引入了一个“下一句预测”(next sentence prediction)任务,可以和MLM共同预训练文本对的表示。
BERT的模型架构是基于Vaswani et al. (2017) 中描述的原始实现multi-layer bidirectional Transformer编码器,并在tensor2tensor库中发布。在这项工作中,论文将层数(即Transformer blocks)表示为L,将隐藏大小表示为H,将self-attention heads的数量表示为A。在所有情况下,将feed-forward/filter 的大小设置为 4H,即H = 768时为3072,H = 1024时为4096。论文主要报告了两种不同大小的BERT模型:
BERT输入表示(input representation)能够在一个token序列中明确地表示单个文本句子或一对文本句子(例如, [Question, Answer])。对于给定token,其输入表示通过对相应的token、segment和position embeddings进行求和来构造。下图2是输入表示的直观表示:
图2:BERT的输入表示。
具体如下:
(1)使用WordPiece嵌入(Wu et al., 2016)和30,000个token的词汇表。用##表示分词。
(2)使用学习的positional embeddings,支持的序列长度最多为512个token。
每个序列的第一个token始终是特殊分类嵌入([CLS])。对应于该token的最终隐藏状态(即,Transformer的输出)被用作分类任务的聚合序列表示。对于非分类任务,将忽略此向量。
(3)句子对被打包成一个序列。以两种方式区分句子。首先,用特殊标记([SEP])将它们分开。其次,添加一个learned sentence A嵌入到第一个句子的每个token中,一个sentence B嵌入到第二个句子的每个token中。
(4)对于单个句子输入,只使用 sentence A嵌入。
在BERT的预训练任务中有两个关键点:遮蔽语言模型和下一句预测任务。前者随机屏蔽(masking)部分输入token,然后只预测那些被屏蔽的token。但因为在finetuning期间从未看到 [MASK] token,预训练和finetuning之间会不匹配,为了解决这个问题,,BERT并不总是用实际的 [MASK] token替换被 “masked” 的词汇。相反,训练数据生成器随机选择15%的token。例如在这个句子“my dog is hairy”中,它选择的token是“hairy”。之后,执行以下过程:
80%的时间:用[MASK]标记替换单词,例如,my dog is hairy → my dog is [MASK]
10%的时间:用一个随机的单词替换该单词,例如,my dog is hairy → my dog is apple
10%的时间:保持单词不变,例如,my dog is hairy → my dog is hairy. 这样做的目的是将表示偏向于实际观察到的单词。
Transformer encoder不知道它将被要求预测哪些单词或哪些单词已被随机单词替换,因此它得保证每个输入的token是分布式语境表征(distributional contextual representation)。此外,因为随机替换只发生在所有token的1.5%(即15%的10%),因此概率上讲这并不会损害模型的语言理解能力。可是由于每个batch只预测了15%的token,模型可能需要更多的预训练步骤才能收敛。团队也证明了MLM的收敛速度略慢于 left-to-right的模型(预测每个token),但MLM模型在实验上获得的提升远远超过增加的训练成本。
关于第二个任务:下一句预测,BERT预先训练一个二进制化的下一句测任务,这一任务可以从任何单语语料库中生成。具体地说,当选择句子A和B作为预训练样本时,B有50%的可能是A的下一个句子,也有50%的可能是来自语料库的随机句子。例如:
输入= [CLS] the man went to [MASK] store [SEP]
he bought a gallon [MASK] milk [SEP]
标签 = IsNext
输入 = [CLS] the man [MASK] to the store [SEP]
penguin [MASK] are flight ##less birds [SEP]
标签 = NotNext
团队完全随机地选择了NotNext语句,最终的预训练模型在此任务上实现了97%-98%的准确率。
在实验结果方面,相比于OpenAI, ELMo和BiLSTM等,BERT在11项NLP任务中刷新了性能表现记录 (其中测试数据集有GLUE,SQuAD,CoNLL-2003,SWAG等):
图3:这些面向特定任务的模型是将BERT与一个额外的输出层结合而形成的,因此需要从头开始学习最小数量的参数。在这些任务中,(a)和(b)是序列级任务(sequence-level tasks),而(c)和(d)是token级任务 (token-level tasks)。在图中,E表示输入嵌入,T_i表示tokeni的上下文表示,[CLS]是用于分类输出的特殊符号,[SEP]是用于分隔非连续token序列的特殊符号。
描述来源:
机器之心,URL:https://www.jiqizhixin.com/articles/2018-10-30-13?from=synced&keyword=BERT
BERT论文: https://arxiv.org/abs/1810.04805
发展历史
描述
应用预训练语言表征在下游任务中有两种不同的策略:基于特征 (feature-based) 和fine-tuning。在几十年里,学习能广泛应用的词表示都一直是活跃的研究领域,其中包括非神经和神经方法。在基于特征方法中,预训练的词嵌入常被考虑进现在的NLP系统里,传统词嵌入学习到的表示被下游模型当作特征,其中,ELMo (Peters et al., 2017)提出从语言模型中抽取语境敏感特征(context-sentitive features),它将基于语境的词嵌入融合到特定任务的模型架构中,使得ELMo在多个NLP问题上有优异表现,例如问题回答,情感分析和命名实体识别。
除了以 ELMO 为代表的这种基于特征融合的预训练方法外,另外的fine-tuning方法先预训练语言模型,再将预训练模型在下游任务中fine-tuning,这种语言模型的迁移学习有个好处就是减少需要学习的参数,其中,OpenAI GPT(Radford et al., 2018)在多个句子层级的任务中有着良好的表现。
但是无论是ELMo还是OpenAI GPT都有各自的缺点,前者采用的LSTM抽取特征的能力远弱于Transformer,并且拼接方法双向融合特征的融合能力偏弱。后者的语言模型结构是从左到右单向的,导致在Transformer里自关注层(self-attention layers)中得每个token只看到了前面的tokens(Vaswani et al., 2017),这种限制对句子层级的任务来说,不是最优的选择,而且,当要在token级任务使用基于fine-tuning的方法会造成不好的影响。
BERT的出现很好地解决了上述的问题,它考虑了双向的语境信息,也使用了具有更强特征抽取能力的Transformer。BERT并不局限于某个特定的任务,而是在很多个NLP任务取到很好的成绩,例如:问答和语言推理等。
描述来源:
BERT论文: https://arxiv.org/abs/1810.04805
机器之心, URL:https://www.jiqizhixin.com/articles/2018-12-10-8?from=synced&keyword=%E8%AF%8D%E5%B5%8C%E5%85%A5
主要事件
年份 | 事件 | 相关论文/Reference |
1953 | Taylor的Cloze任务(其启发BERT中的MLM) | Taylor, W. L. (1953). “Cloze procedure”: A new tool for measuring readability. Journalism Bulletin, 30(4), 415-433. |
1953-2015 | 在相关语言预训练的研究方面,这段时间没有很有影响力的研究出现 | |
2015 | Dai和Le提出两种使用无标注数据去提高序列学习的方法,一个是NLP中的语言模型,另一个是序列自编码器。两种方法都结合了RNN并可作为预训练模型。 | Dai, A. M., & Le, Q. V. (2015). Semi-supervised sequence learning. In Advances in neural information processing systems (pp. 3079-3087). |
2016 | 该论文提到单向结构对于句子层级和token层级的任务来说都不是最优的选择 | Rajpurkar, P., Zhang, J., Lopyrev, K., & Liang, P. (2016). Squad: 100,000+ questions for machine comprehension of text. arXiv preprint arXiv:1606.05250. |
2018 | Peters等人提出基于特征的ELMo | Peters, M. E., Neumann, M., Iyyer, M., Gardner, M., Clark, C., Lee, K., & Zettlemoyer, L. (2018). Deep contextualized word representations. arXiv preprint arXiv:1802.05365. |
2018 | Radford等人提出基于fine-tuning的OpenAI GPT | Radford, A., Narasimhan, K., Salimans, T., & Sutskever, I. (2018). Improving language understanding with unsupervised learning. Technical report, OpenAI. |
2018 | BERT被提出 | Devlin, J., Chang, M. W., Lee, K., & Toutanova, K. (2018). Bert: Pre-training of deep bidirectional transformers for language understanding. arXiv preprint arXiv:1810.04805. |
发展分析
瓶颈
BERT的部分原因在于计算机硬件水平的提高,在论文中作者表示,训练BERT_BASE时。在Pod配置中使用了4个谷歌云TPU(即16个TPU chips),而训练BERT_LARGE时更是用了16云TPU(即64块TPU chips),每次在BooKsCorpus(800M词)和English Wikipeida(2,500词)合并的语料数据集上预训练需要花费4天才能完成。虽然训练数据量大,但也不难看出BERT对硬件的要求。
另外,由于BERT要减轻预训练和fine-tuning之间的不匹配,它采用随机选取15%token用 [MASK] 代替(不是之间替换,而是有不同百分比时间上的相应替换设置),也正因为MLM在每个batch中只有15%的token,这意味着需要更多的预训练去收敛模型,因此导致模型收敛速度变慢。
未来发展方向
BERT原论文中提到,尽管其实验结果表现很好,在某些情况下,甚至超过人类表现,但未来需要去研究语言学相关内容,因为这些语言系统距离真正理解语句或行文中的含义还有很长的路要走。
Contributor: Hongfeng Ai