如期而至!谷歌开源 BERT 模型源代码

  自上个月谷歌公开 BERT 模型以来,BERT 模型以其双向、深层等特点,成功在 11 项 NLP 任务中取得 state of the art 的结果,赢得自然语言处理学界的一片赞誉之声。惊鸿一瞥后,人们都在期待谷歌何时会放出 BERT 模型源代码。

  直至今日,谷歌终于一鼓作气发布了包括 BERT 模型 TensorFlow 代码、BERT-Base 与 BERT-Large 模型的预训练检查点、微调实验结果的自动化复现 TensorFlow 代码、预训练数据生成和数据训练的代码在内的「BERT 模型大礼包」。雷锋网 AI 科技评论将通过本文分享 BERT 模型的源代码开源网址,以及源代码页面 Readme 的部分简介内容(已译成中文),以飨读者。

  BERT 是一种对语言表征进行预训练的方法,换句话说,是经过大型文本语料库(如维基百科)训练后获得的通用「语言理解」模型,该模型可用于我们最在乎的 NLP 下游任务(如问答)。BERT 之所以表现得比过往的方法要好,是因为它是首个用于进行 NLP 预训练的无监督、深度双向系统。

  无监督意味着 BERT 仅使用文本语料库进行训练,这点很重要,因为在网络上存在着大量公开的多语言文本数据。

  预训练表征可能无上下文语境,也可能有上下文语境,有上下文语境的系统可以进一步划分成单向的或者双向的。以 word2vec ( ) 和 GloVe ( )为例,无上下文语境的模型为词汇表中的每个单词生成单个「词嵌入」表征,因此「 bank 」在「 bank deposit 」和「 river bank 」中可能存在同样的表征。反之,有上下文语境的模型会根据整句话生成词的表征。

  BERT 建立在近期一些上下文预训练语境表征工作的基础上,包括半监督序列学习( )、预训练生成模型( )、ELMo ( )以及 ULMFit ( ),但以上模型要么是单向的,要么是浅层双向的,这意味着每个单词只能与其左边(或右边)的单词进行语境化结合。以「 I made a bank deposit 」为例,由于是单向表示,「 bank 」只能基于左边「 I made a 」而不是与关联性更强的「 deposit 」生成语境。过去有一些工作试图打造出一个能够结合上下文语境的生成模型,然而这些工作目前看来都较「 浅层 」。BERT 真正做到了结合上下文语境来生成「 bank 」,兼顾到「 I made a 」和「 deposit 」,从深度神经网络的最底层开始,拥有深度双向属性。

  BERT 的方法很简单:一开始先屏蔽掉输入词汇的 15%,然后通过深度双向的 Transformer 编码器运行整个序列,最后预测屏蔽的单词。举个例子:

  为了让模型学习到句子之间的关系,我们特意将模型放在可以从任意单语语料库里生成的简单任务中进行训练:给出两个句子 A 和 B,句子 B 究竟是句子 A 的下一个衔接句,亦或者只是语料库中随机生成的句子?

  最后,我们在一个大型语料库(维基百科 + BookCorpus )中对一个较大的模型(12 - 24 层的 Transformer 编码器 )进行了长时间训练,最终得到 BERT。

  预训练阶段的费用不菲(在 4-16 个 TPU 上训练需要花上4天),好在每个语种的训练都能一次性搞定(目前模型只支持英语,多语言模型会在不久的将来发布)。我们正在陆续发布一些论文中提及的预训练模型。大多数 NLP 研究人员日后再无需从头预训练自己的模型。

  微调阶段的费用很便宜。只要一开始使用同样的预训练模型,论文中所有的成果只需在单个TPU 中训练 1 个小时就能复现(在单个 GPU 上也只需几个小时就能复现)。以 SQUAD 为例,只要在单个 TPU 上将模型训练 30 分钟,就能获得 91.0% 的 Dev F1 得分,这是单系统目前所能达到的最好水准。

  BERT 的另外一个优势是能够轻松适用多种类型的 NLP 任务。论文中我们展示了BERT在句子级别(如 SST-2 )、句对级别(如 MultiNLI )、单词级别(如 NER )以及长文本级别(如 SQuAD )任务上的最新结果,几乎没有对模型进行特定修改。

  重要事项:文中的所有结果都是在 64GB 内存的单个 TPU 上进行微调。我们目前无法在 12GB - 16GB 内存的 GPU 上来复现 BERT-Large 的大部分结果,因为其支持的最大 batch 数太小了。为此,我们正努力在库中添加一段可以在 GPU 上进行更大 batch 数训练的代码。请在“内存不足问题”章节()查阅详情。

  此代码使用了 TensorFlow 1.11.0 进行测试。此外,也使用了 Python2 和 Python3 进行测试(使用最多的还是 Python2 ,因为这是谷歌内部正在使用的)。

  使用 BERT-Base 模型进行微调的代码正常情况下可以在给定超参数、拥有 12GB 内存以上的 GPU 上运行。



分享到:

猜你喜欢

微交易系统那一家做分分时时彩规律的好?

2019-01-07 @ 技术教程

瑛夫科技始于2008年,一直坚持“科技让企业更高效”的理念,我们提供微交易系统、股票期货软件开发、金融app开发、微信端程序开发等。1、分分时时彩规律客户在了解微盘之前,首先不

开发微交易系统、微盘系统最快多久?

2019-01-07 @ 技术教程

主要经营计算机网络服务,设计、制作、代理、发布国内各类广告,健康信息咨询。1、客户在了解微盘之前,首先不是问价格,而是要了解是PHP开发语言还是JAVA开发语言,再做价格对比。

微软宣布完成75亿美元收购开源代码库GitHub交易

2019-01-07 @ 技术教程

腾讯科技讯今年年中,微软公司宣布了一个令外界颇为吃惊的收购计划,即将斥资75亿美元收购全世界最大的开源软件代码库和开发工具服务商GitHub。据外媒最新消息,周五,微软公司宣布

8岁魔方高手3天学会 三阶速拧最好成绩847秒

2019-01-07 @ 技术教程

从开始接触魔方到学会“玩魔方”,他只用了不到3天的时间;从练习魔方速拧,到获2016年WCA太原魔方公开赛季军,他仅用了4个月的时间;再到获得2017年WCA太原魔方公开赛三阶

UU快三《孙氏魔方还原教程》之短公式法还原三阶魔方

2019-01-07 @ 技术教程

魔方还原方法之短公式法是层先法的一种,UU快三与层先法的区别在于顶层角块和棱换的处理顺序不同。除此之外,其公式较短也是区别于层先法的特征之一。在本教程里,公式部分采用三种公式标