谷歌 BERT 在环信 NLP 中的应用

  • 时间:
  • 浏览:0

Google 的 BERT 模型一经发布便点燃了 NLP 各界的欢腾,Google Brain 的资深研究科学家 Thang Luong 曾给出其“开启了 NLP 新时代”的角度定义,国内外有些公司及开发者对其进行了研究及应用,本文作者及其团队对 BERT 进行了应用探索。

随着 Google 推出的 BERT 模型在多种 NLP 任务上取得 SOTA,NLP 技术真正进入了大规模应用阶段,环信总是 致力于帮助企业应用先进的AI技术提高生产下行数率 ,对于 BERT 的探索你们都儿总是 走在了行业前列。

训练模型

  • 训练数据

训练有些模型时你们都儿可能性标注了极少量的训练数据,主要把类似于句对分为三类来标注:

不类似于(0)、相关(0.5)、类似于(1)

全都,训练 BERT 模型时就也能 “拿来主义”了。

  • 模型修改

你们都儿的主要应用点是类似于度计算,期望模型返回的结果是有有两个多多概率(分值)而总要每个类别的概率。当然可能性模型给的结果是每有有两个多多类别的概率,依否则能 通过加权求和输出有有两个多多分值,但原先是总要又多样化了。

全都你们都儿在官方代码上做了点小的修改(将最后的 softmax 改为了 sigmoid)使得模型输出是有有两个多多分值,这名 分值也可是我你们都儿要的类似于度了。

  • 模型训练

你们都儿使用完后 标注的数据集在 GeForce GTX 1070 上训练(Fine-Tune),离米 训练了 8 个小时左右。

  • 模型导出

模型训练之后产生几条 Checkpoint,哪些地方地方 Checkpoint 是不也能直接在工程中使用的,还要导出成 PB 文件,也能 使用 Estimator 的 export_savedmodel 法律方式 导出。

模型使用

通过调研,主要有五种法律方式 :

  • Java JNI:基于你们都儿的 GPU 编译[1]有有两个多多离米 的 libtensorflow 和libtensorflow_jni_gpu(可能性你的配置和官方一致就不还要此人 编译 了,此人 编译太多坑,这里有一份经过验证的编译环境配置[2])打成 jar 包并加入到工程依赖,使用 TensorFlow 提供的 Java API 加载 BERT 模型,在你的 Java 工程中使用[3]。

  • Docker + Nvidia-docker + Tensorflow Serving:还要有有两个多多离米 的 Tensorlfow Serving 的 image,这里有一份官方做好的 image 列表[4],当然你也也能 此人 做有有两个多多。

这五种法律方式 各有优缺点,你们都儿主要考虑以下几条方面:

  • 性能:你们都儿对五种方案做了实验,Tensorflow Serving 是 C++ 写成的服务,对于 batch 做过优化[6],性能优于 Java JNI。

  • 多模型支持能力:方案 2 是支持多模型的,也可是我多个模型共用有有两个多多 GPU,方案 1 不支持。

  • 简单好部署:五种方案总要多样化。

  • 与现有服务开发和运维体系兼容性:方案 1 更有优势。

另外,方案 2 不仅支持多模型还支持多版本、模型的冷启动和热加载。综合考虑下,你们都儿使用了方案 2 进行模型部署。

效果对比

你们都儿用有些典型客户的数据构建了测试环境,抽取哪些地方地方客户的真实访客数据,对现有模型和 BERT 模型做了对比实验,BERT 模型的效果相比于对照模型提高了超过 10%。

调用图

这是你们都儿的调用时序图:

FAQ 服务->类似于度计算服务:说说 1 和 说说 2 类似于度是几条 ?

类似于度计算服务->TensorflowServing: 说说 1 和 说说 2 类似于度是几条 ?

Note right of TensorflowServing: bert 模型预测

TensorflowServing->类似于度计算服务: 说说 1 和 说说 2 类似于度是 xx

类似于度计算服务->FAQ 服务: 说说 1 和 说说 2 类似于度是 xx

这里抽象出有有两个多多类似于度计算服务,是可能性你们都儿集成了多种类似于度计算法律方式 。

优化

  • 后防止

这名 模型的有有两个多多主要问題是:模型太多能完美防止所有问題,总是 总会有 bad case 出先。一旦模型上线,可能性有问題你们都儿无法及时防止(训练模型和上线总要消耗极少量时间)。为此你们都儿增加了后防止,以便于你们都儿的训练师也能及时干预,防止问題。

  • 预训练

BERT 预训练的模型使用的数据来源于维基百科,与你们都儿的主要应用场景不一致。你们都儿也能 猜想可能性在 BERT 原有 Pre-Training 模型的基础上,使用客服里的数据再次进行 Pre-Training 应该会更好,事实上你们都儿也的确原先做了。结论是影响不大,可能性是数据存在问题多,新的训练实验还在进行中。

  • 数据标注

GPT 2.0 的出先再次证明了要想得到好的模型,不仅要有数据量,还要提高数据的品质。你们都儿新的标注也在进行中,相信会对模型效果有所提高。

  • 有些应用

你们都儿在产品中还提供了意图识别的服务,意图识别服务要求还要也能在线训练。可能性直接使用  BERT 来做意图识别,这麼满足在线训练的要求(BERT 训练太慢了)。为此你们都儿使用了简单的模型来支持在线训练,并把 Fine-tune 模型的倒数第二层作为社会形态,增强意图识别的效果。

BERT 的近邻

最近 Google 又携 XLnet 屠榜了,从实验效果看对比 BERT 人太好有比较大的提升,你们都儿也在关注中,实验的小手可能性蠢蠢欲动了。可能性在你们都儿的场景实验效果好说说,相信你们都儿环信的客户放慢便会体验到。