谷歌开源BERT不费吹灰之力轻松训练自然语言模型
作者头像
  • 龙洋梅
  • 2018-11-15 19:51:33 0

谷歌开源BERT:轻松训练自然语言模型

目前,自然语言处理(NLP)模型已成为人工智能的重要领域,它们是许多AI系统与用户交互的关键接口。然而,NLP发展的主要障碍在于对高质量标注数据的高度依赖。由于语言的通用性,很难找到特定领域的注释数据来训练模型。针对这一问题,NLP模型开始采用大量未标注数据进行语言规则的预训练。知名的预训练模型包括Word2Vec、GloVe和FastText。尽管如此,这些模型仍面临上下文关联表达的挑战。

最近,Google AI语言团队发布了BERT项目的源代码,这是一个用于预训练语言表达的库,训练效果显著。

上下文检索与双向性

你可能会好奇BERT与其它预训练模型有何不同。理论上,NLP预训练技术可以是上下文无关的,也可以是上下文检索的。上下文无关的模型如Word2Vec或GloVe,它们通过单个词汇生成词嵌入表示。例如,“足球”这个词在句子“我去了足球比赛”和“我遇到了一些来自皇家马德里的足球球员”中具有相同的含义。

相比之下,上下文检索模型则根据句子中其他单词的不同方向生成表达。在我们的例子中,上下文检索模型会根据短语“我去…”或“我遇到了…”来定义“足球”的含义,而不是根据“比赛”或“皇家马德里的球员”。因此,预训练模型可以是上下文无关的,也可以是上下文检索的,甚至可以是单向的或双向的。

BERT的创新之处

BERT通过根据前后单词的意义创建上下文检索表达,扩展了之前的预训练模型方法。实现双向、上下文检索的语义表达并不容易。最大的挑战在于,在训练模型时,不能简单地将一个单词的前后单词作为上下文,这可能导致单词在多层模型中寻找自身。Google BERT通过巧妙的架构设计解决了这一难题。

架构设计

BERT的模型架构基于多层双向变换编码器,与Tensor2Tensor库中的架构相似。与OpenAI GPT或ELMo等其他预训练模型相比,BERT在转换器之间采用了双向连接。

BERT的最大贡献在于使用了两个独特的无监督预测任务来解决上述挑战,使单词能够在上下文中“认出自己”。这两个任务分别是:

  1. 掩码任务:大约15%的输入单词被遮盖,然后在整个句子中运行,仅预测被遮盖的单词。
  2. 下一句预测:通过生成语料库中的简单语句,学习句子间的联系。

这两个任务的结合使得BERT在几乎所有NLP任务中都能提供更丰富、更双向的语义表达。

使用BERT的过程

使用BERT分为两个阶段:预训练和微调。

  • 预训练:虽然相对昂贵(需要在4到16个云TPUs上运行4天),但每个语言只需运行一次。为了缓解这一问题,Google发布了多个预训练模型供NLP场景使用。
  • 微调:相对便宜,可以在一个云TPU上一小时内完成,或者使用GPU需要几个小时。从相同的预训练模型开始。

BERT的实际应用

Google使用BERT作为其他优秀NLP系统的基准,取得了显著的成果。例如,在SQuAD v1.1中,BERT取得了93.2%的F1分数,超过了之前的模型91.6%和人工翻译的91.2%。此外,BERT还提升了GLUE基准测试7.6%,这是一个包含9种自然语言理解任务的集合。

语言模型的迁移学习近期带来了大量经验上的提升,表明大规模无监督预训练模型在众多语言理解系统中扮演着重要角色。BERT展示了在NLP预训练模型中获取双向上下文语言表达的可能性。目前,TensorFlow实现了BERT,使得开发者能够将其前沿技术应用于NLP场景,同时控制计算成本。

    本文来源:图灵汇
责任编辑: : 龙洋梅
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
自然语言不费吹灰之力开源模型训练轻松谷歌BERT
    下一篇