bert实战:安装与跑demo

Bert介绍

Bert模型是Google在2018年10月发布的语言表示模型,Bert在NLP领域横扫了11项任务的最优结果,可以说是现今最近NLP中最重要的突破。Bert模型的全称是Bidirectional Encoder Representations from Transformers,是通过训练Masked Language Model和预测下一句任务得到的模型。关于Bert具体训练的细节和更多的原理,有兴趣的读者可以去看在arXiv上的原文。本篇文章从实践入手,带领大家进行Bert的中文文本分类和作为句子向量进行使用的教程。

准备工作

1.下载bert

1
git clone https://github.com/google-research/bert.git

2.下载bert预训练模型

Google提供了多种预训练好的bert模型,从下方链接下载 Google 发布的预训练模型,解压到某个路径下,比如: /tmp/english_L-12_H-768_A-12/

你可以使用包括 BERT-Base, Multilingual 和 BERT-Base, Chinese 在内的任意模型。

开启 BERT 服务

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

这个代码将开启一个 4 进程的 BERT 服务,意味着它可以最高处理来自 4 个客户端的并发请求。虽然同一时刻连接服务的客户端数量没有限制,但在某时刻多余 4 个的并发请求将被暂时放到一个负载均衡中,等待执行。

3.(可选项)安装bert-as-service,这是一个可以利用bert模型将句子映射到固定长度向量的服务。

1
2
pip install bert-serving-server # server
pip install bert-serving-client # client, independent of 'bert-serving-server'

该服务要求tensorflow的最低版本为1.10。

bert-as-service 将 BERT模型作为一个独立的句子编码(sequence encoding/embedding)服务,在客户端仅用两行代码就可以对句子进行高效编码

无论下游是什么任务,对于 NLP 研究者来说,最重要的就是获取一段文字或一个句子的定长向量表示,而将变长的句子编码成定长向量的这一过程叫做 sentence encoding/embedding。bert-as-service 正是出于此设计理念,将预训练好的 BERT 模型作为一个服务独立运行,客户端仅需通过简单的 API 即可调用服务获取句子、词级别上的向量。在实现下游任务时,无需将整个 BERT 加载到 tf.graph 中,甚至不需要 TensorFlow 也不需要 GPU,就可以在 scikit-learn, PyTorch, Numpy 中直接使用 BERT。

 

以句子向量的形式使用Bert

如果想要将bert模型的编码和其他模型一起使用,将bert模型作为句子向量使用很有意义。我们可以使用bert-as-service来完成这个目标。

安装完bert-as-service以后,就可以利用bert模型将句子映射到固定长度的向量上。在终端中用一下命令启动服务:

1
bert-serving-start -model_dir /media/ganjinzero/Code/bert/chinese_L-12_H-768_A-12 -num_worker=4

model_dir后面的参数是bert预训练模型所在的文件夹。num_worker的数量应该取决于你的CPU/GPU数量。

这时就可以在Python中调用如下的命令:

1
2
3
from bert_serving.client import BertClient
bc = BertClient()
bc.encode(['一二三四五六七八', '今天您吃了吗?'])

最好以列表的形式,而非单个字符串传给bc.encode()参数,这样程序运行的效率较高。

在启动了bert-as-service服务之后,客户端也可以从另一台机器上连接 BERT 服务,只需要一个 IP 地址和端口号:

from bert_serving.client import ConcurrentBertClient
bc = ConcurrentBertClient(port=5555, port_out=5556)

res = bc.encode(query)
res_sum = res[0].tolist()

 

 

 

参考链接:

重点说了官网上的demo怎么跑,讲的水了点

https://zhuanlan.zhihu.com/p/50582974

重点将了两个demo任务,该博主还有其他一系列将bert的文章可以一起看

https://www.jianshu.com/p/3d0bb34c488a

安装部分讲的比较详细,后面讲自己的数据怎么跑

https://ganjinzero.github.io/2019/02/28/%E7%AE%80%E6%98%93%E6%95%99%E7%A8%8B%EF%BC%9A%E4%BD%BF%E7%94%A8Bert%E9%A2%84%E8%AE%AD%E7%BB%83%E6%A8%A1%E5%9E%8B%E6%96%87%E6%9C%AC%E5%88%86%E7%B1%BB/

理论讲解比较多

https://www.jiqizhixin.com/articles/2018-11-01-9

  • 6
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一杯拿铁go

你的打赏是我更新最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值