Google的BERT改变了NLP格局
我们在自然语言处理中写了很多有关开放问题的文章。在NLP项目上工作时,我们会抱怨很多。我们选择了不同模型的不准确性和公然错误。但是我们需要承认的是,自然语言处理已经发生了变化,新的模型已经解决了我们记忆中仍然存在的问题。此类突破性发展之一就是Google推出了来自Transformers或BERT模型的双向编码器表示形式,该模型因其在各种任务中的优越性能而被称为有史以来最好的NLP模型。
Google研究人员提出了一种深层双向Transformer模型,该模型可解决11个NLP任务,并且在具有挑战性的问题解答领域甚至超过了人类的表现,它被视为NLP / NLU中的游戏规则改变者。
BERT模型一目了然
BERT有两种尺寸:可与OpenAI Transformer媲美的BERT BASE和负责所有惊人结果的模型BERT LARGE。
BERT巨大,具有24个Transformer块,1024个隐藏层和340M参数。
BERT在一个33亿字的语料库上经过了40个时期的预训练,包括BooksCorpus(8亿字)和English Wikipedia(25亿字)。
BERT在16个TPU吊舱上进行训练。
作为输入,BERT接收一系列单词,这些单词一直在堆栈中向上流动。每一层都进行自我关注,并将其结果通过前馈网络传递,然后将其传递给下一个编码器。
每个位置的输出是一个大小为hidden_??size(在BERT Base中为768)的向量。此向量可用作所选分类器的输入。
针对不同数据集的微调模型将GLUE基准提高到80.5%(绝对提高7.7%),MultiNLI准确性提高到86.7%(绝对提高4.6%),SQuAD v1.1问答测试F1达到93.2(绝对提高1.5)。 ,等等,总共11种语言任务。
底下的理论
BERT建立在一些已经在NLP社区近期向上冒泡巧妙的构思之上-包括但不限于半监督序列学习(由安德鲁·戴和富国乐),剖成前培训,埃尔莫(由马修·彼得斯以及来自AI2和UW CSE的研究人员,ULMFiT(由快速AI创始人Jeremy Howard和Sebastian Ruder负责),OpenAI变压器(由OpenAI研究人员Radford,Narasimhan,Salimans和Sutskever负责)和Transformer(由Vaswani等人负责)。但是,与以前的模型不同,BERT是第一个深度双向,无监督的 语言表示,仅使用纯文本语料库进行了预训练。
AI NLP
BERT的两个支柱
BERT基于两个关键思想,这些思想为NLP的许多最新进展铺平了道路:
变压器架构,以及
无人监督的培训。
变压器架构
该变压器是内放弃RNN年代顺序结构的序列模型完全基于注意力的方法。与递归
神经网络架构相比,在长距离序列上欠缺优势,变压器在捕获远距离依赖方面既拥有训练效率,又具有出色的性能。使BERT与OpenAI GPT(从左至右的Transformer)和ELMo(由独立训练的从左至右和从右至左的LSTM的串联)不同的原因在于,该模型的体系结构是一种深层的双向Transformer编码器。
双向编码器由两个独立的编码器组成:一个编码正常序列,另一个编码反向序列。输出状态和最终状态被串联或求和。深层双向编码器是另一种双向编码器,其中,在将每一层的输出馈送到下一层之前,将其相加(或级联)。但是,仅通过将每个单词的前一个单词和第二个单词作为条件来训练双向模型是不可能的接下来的单词,因为这将使被预测的单词间接地在多层模型中“看到自己”,这一问题使研究人员无法将双向编码器引入其模型。BERT克服障碍的解决方案是使用简单的技术来屏蔽输入中的某些单词,然后双向调节每个单词以预测被屏蔽的单词。
无人监督的预训练
几乎不可能将BERT的两侧分开。除了双向以外,BERT还经过预训练。首先在一种语言建模目标上训练模型体系结构,然后针对有监督的下游任务进行微调。该模型的权重是通过以下两个无监督任务预先学习的:蒙版语言建模(在蒙版语言模型(MLM)方法中,根据给定的左右上下文预测缺少的单词)和二值化的下一句预测(预测一个句子是否跟随另一个句子) 。因此,不需要为每项新任务从头训练BERT。而是对其重量进行了微调。
为什么这种组合很重要?
艾琳研究科学家塞巴斯蒂安·鲁德(Sebastian Ruder)在他的博客中说,预训练的模型可能对NLP的影响与“预训练的ImageNet模型对计算机视觉的影响相同”。然而,预先训练表示是不均质:他们可以是上下文无关的或情境,以及上下文表示还可以是单向或双向的。而诸如word2vec或GloVe之类的上下文无关模型会生成单个单词嵌入对于词汇表中每个单词的表示,上下文模型会基于句子中的其他单词生成每个单词的表示。BERT中的双向方法从深度神经网络的最底层开始,使用其上一个和下一个上下文来表示每个单词,从而使其成为双向。
然后,可以在小数据NLP任务(如问题解答和情感分析)上对预训练的模型进行微调,与从头开始训练相比,该模型可以显着提高准确性。
可视化BERT
众所周知,
深度学习模型通常是不透明的,并且已经开发出各种可视化 工具来帮助理解它们。为了了解BERT的工作原理,可以借助Tensor2Tenso r 可视化注意力。
<图>可视化BERT
该工具将注意力可视化为连接正在更新的位置(左)和正在关注的位置(右)的线。颜色标识相应的关注头,线条粗细反映关注点。在工具的顶部,用户可以选择模型层以及一个或多个关注头(通过单击顶部的色块代表12个头)。
开源的
在描述模型的论文发布后不久,该团队还开源了该模型的代码,并提供了已经在大量数据集上进行过预训练的模型下载版本。它们涵盖了BERT Base和BERT Large,以及英语,中文等语言,以及涵盖Wikipedia训练的102种语言的多语言模型。多亏了这笔宝贵的礼物,现在任何人都可以构建一个涉及语言处理的
机器学习模型,以将该强大的功能用作易于使用的组件-节省时间,精力,知识和资源。
直接试用BERT的最好方法是通过在Google Colab上托管的带有Cloud TPU笔记本的BERT FineTuning。此外,这是尝试Cloud TPU 的良好起点。
之后,您可以继续进行BERT 仓库和BERT的PyTorch实现。最重要的是,AllenNLP库使用此实现允许对任何模型使用BERT嵌入。
BERT在实践中
BERT是CALLv3共享任务(实际上是我们赢得的文本子任务)中的最佳选择之一。语音CALL共享任务是一项为具有语音功能的CALL(计算机辅助语言学习)系统创建开放式挑战数据集的计划。它基于从启用语音的在线工具中收集的数据,该工具可帮助瑞士德国青少年练习英语会话技能。任务是将对标记为“接受”或“拒绝”,接受语法和语言正确的回答。
我们使用BERT嵌入将学生的短语分类为正确还是错误。更具体地说,我们使用了在Wikipedia和BookCorpus上训练的multi_cased_L-12_H-768_A-12模型。
从BERT,我们为数据集中的每个短语获取了768维矢量。我们使用通过Google翻译服务翻译的德语提示以及通过'|||'连接的相应英语答案作为输入。事实证明,这种方法在我们的案例中效果很好。与nnlm模型结合使用,BERT在我们的实验中显示了第二好的结果。此外,由于数据集的稀缺性,我们没有进行微调。但是,我们相信,在有足够的数据量的情况下,对BERT进行微调可以产生更好的结果。
我们的实验再次证明了BERT模型是一个功能强大的工具,可用于诸如问题回答和蕴涵之类的句子对任务中。
结语:未来是令人兴奋的
在我们撰写本文时,有消息称,Facebook AI团队发布了他们的XLM / mBERT预训练模型的代码,该模型涵盖了100多种语言。所有代码都建立在PyTorch之上,您可以直接使用提供的ipython笔记本开始使用模型。今年论文发表了一种称为XLM的新方法,它提供了一种基于流行的变形金刚技术来预训练跨语言模型的技术。因此,最新版本意味着您现在可以使用预训练的模型或训练自己的模型,以使用上述语言进行机器翻译和跨语言分类,并将其转换为资源贫乏的语言,从而解决了长期存在的问题

关注 CDA人工智能学院 ,回复“录播”获取更多人工智能精选直播视频!