如何应用 BERT :Bidirectional Encoder Representations from Transformers

上一篇文章介绍了 Google 最新的BERT (Bidirectional Encoder Representations from Transformers) ,这个模型在 11 个 NLP 任务上刷新了纪录。

Google 还开源了 BERT 的代码:https://github.com/google-research/bert

大家可以下载在维基百科语料上使用 TPU 预训练好的模型,包括中文 BERT 预训练模型。

BERT 模型的训练分为预训练(Pre-training)和微调(Pre-training)两步。

预训练过程耗时又耗钱,Google 对 BERT 的预训练一般需要 4 到 16 块 TPU 和一周的时间才可以完成。幸好多数情况下我们可以使用 Google 发布的预训练模型,不需要重复构造,

微调时可以根据不同的任务,对模型进行相应的扩展,例如对句子进行情感分类时,只需要在 BERT 的输出层的句向量上面加入几个 Dense 层。所以可以固定 BERT 的参数,将它的输出向量当做一个特征用于具体任务。


那么要如何应用 BERT 呢?

这里介绍一下 bert-as-service ,项目地址:https://github.com/hanxiao/bert-as-service

这个项目将预训练好的 BERT 模型作为一个服务独立运行,很简单地用几行代码就可以调用服务获取句子、词级别上的向量,然后将这些向量当做特征信息输入到下游模型。在做具体 NLP 任务时,不需要将整个 BERT 加载到 tf.graph 中,或者可以直接在 scikit-learn, PyTorch, Numpy 中使用 BERT。

这个项目的作者是肖涵博士,他的 Fashion-MNIST 数据集大家应该比较熟悉,现在已成为机器学习基准集,在 Github 上超过 4.4K 星。


使用方法很简单:

  1. 下载 Google 的预训练 BERT 模型,可以选择 BERT-Base, Chinese 等任意模型:

https://github.com/google-research/bert#pre-trained-models

解压到某个路径下,例如:/tmp/english_L-12_H-768_A-12/

  1. 开启 BERT 服务

python app.py -model_dir /tmp/english_L-12_H-768_A-12/ -num_worker=4

这个代码将开启一个 4 进程的 BERT 服务,即最高处理来自 4 个客户端的并发请求。如果在某时刻多余 4 个的并发请求,将被暂时放到一个负载均衡中等待执行。

  1. 使用客户端获取句子向量编码

唯一需要的文件就是 service/client.py ,从中导入 BertClient 。

from service.client import BertClient
bc = BertClient()
bc.encode(['First do it', 'then do it right', 'then do it better'])

然后就可以得到一个 3 x 768 的 ndarray 结构,每一行代表了一句话的向量编码。也可以通过设置,返回 Python 类型的 List[List[float]] 。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏新智元

10 亿图片仅需 17.7微秒:Facebook AI 实验室开源图像搜索工具Faiss

【新智元导读】Facebook的 FAIR 最新开源了一个用于有效的相似性搜索和稠密矢量聚类的库,名为 Faiss,在10亿图像数据集上的一次查询仅需17.7 ...

45050
来自专栏H2Cloud

A星路径搜索

摘要:   在人工智能中有一类问题是有确定解的,如路径、五子棋等,这样的问题非常适合使用搜索来解决。 路径搜索是一个很有趣的问题,在人工智能中算是很基础的问题。...

56040
来自专栏XAI

Java分布式神经网络库Deeplearning4j 环境搭建和运行一个例子

DeeplearningforJava简单介绍: deeplearning4j是一个Apache 2.0-licensed,开源的,分布式神经网络库编写的jav...

47280
来自专栏AI研习社

运用 MXNet Scala API 接口进行图像分类(附代码)

随着 MXNet 1.2.0 版本的发布,新的 MXNet Scala API 接口也发布了。这次发布的 Scala,里面的推理应用程序致力于优化开发者体验。S...

11210
来自专栏机器之心

教程 | 如何在浏览器使用synaptic.js训练简单的神经网络推荐系统

39540
来自专栏SIGAI学习与实践平台

【免费线上实践】动手训练模型系列:条件GAN

从无序的输出到按照类别输出,Conditional Generative Neural Networks到底借助了什么样的魔(xin)法(xi)?点击下方小程序...

14250
来自专栏用户2442861的专栏

Caffe学习:Blobs, Layers, and Nets

-注意:网络结构是设备无关的,Blob和Layer=隐藏了模型定义的具体实现细节。定义网络结构后,可以通过Caffe::mode()或者Caffe::set_m...

7300
来自专栏AI科技大本营的专栏

重磅消息 | 深度学习框架竞争激烈 TensorFlow也支持动态计算图

今晨 Google 官方发布消息,称 TensorFlow 支持动态计算图。 原文如下: 在大部分的机器学习中,用来训练和分析的数据需要经过一个预处理过程,输入...

27850
来自专栏小詹同学

人脸识别(二)——训练分类器

上一篇简单整理了下人脸识别的相关基础知识,这一篇将着重介绍利用pencv(2.4.9)已有的模型进行分类器训练。 一、关于ORL人脸数据库 ORL是一个40个...

61150
来自专栏人工智能LeadAI

从学习 Paddle 开始学习深度学习

优点 灵活性:PaddlePaddle支持广泛的神经网络结构和优化算法,很容易配置复杂的模型,如基于注意力(Attention)机制或复杂的内存(Memory)...

37230

扫码关注云+社区

领取腾讯云代金券