环境:

python 3.5
tensorflow 1.12.1
bert-serving-server 1.9.1
bert-serving-cline 1.9.1

官网上说要保证Python >= 3.5 with Tensorflow >= 1.10

1.安装BERT服务端和客户端

pip install bert-serving-server  # server
pip install bert-serving-client # client, independent of `bert-serving-server`

2.下载预训练的中文BERT模型

根据 NLP 任务的类型和规模不同,Google 提供了多种预训练模型供选择:

  1. BERT-Base, Chinese: 简繁体中文, 12-layer, 768-hidden, 12-heads, 110M parameters【我下载的是这个】
  2. BERT-Base, Multilingual Cased: 多语言(104 种), 12-layer, 768-hidden, 12-heads, 110M parameters
  3. BERT-Base, Uncased: 英文不区分大小写(全部转为小写), 12-layer, 768-hidden, 12-heads, 110M parameters
  4. BERT-Base, Cased: 英文区分大小写, 12-layer, 768-hidden, 12-heads , 110M parameters
  5. 中文效果更好的哈工大版 BERT:Chinese-BERT-wwm

下载成功后,解压

3.启动BERT服务端  

bert-serving-start -model_dir chinese_L-12_H-768_A-12 -num_worker=1

-model_dir 是预训练模型的路径,-num_worker 是线程数,表示同时可以处理多少个并发请求

BERT 模型对内存有比较大的要求,如果启动时一直卡在 load graph from model_dir 可以将 num_worker 设置为 1 或者加大机器内存。

4. 在客户端获取句向量

from bert_serving.client import BertClient
bc = BertClient(ip='localhost',check_version=False, check_length=False)
vec = bc.encode(['努力写大论文中'])
print(vec) # 维度(1,768)

vec 是一个 numpy.ndarray ,它的每一行是一个固定长度的句子向量,长度由输入句子的最大长度决定。如果要指定长度,可以在启动服务使用 max_seq_len 参数,过长的句子会被从右端截断。

在计算中文向量时,可以直接输入整个句子不需要提前分词。因为 Chinese-BERT 中,语料是以字为单位处理的,因此对于中文语料来说输出的是字向量。

举个例子,当用户输入:

bc.encode(['你好吗?'])

实际上,BERT 模型的输入是:  

tokens: [CLS] 你 好 么 ? [SEP]
input_ids: 101 872 1962 720 8043 102 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
input_mask: 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

5.获取词向量

启动服务时将参数 pooling_strategy 设置为 None :

bert-serving-start -pooling_strategy NONE -model_dir /root/zhihu/bert/chinese_L-12_H-768_A-12/

这时的返回是语料中每个 token 对应 embedding 的矩阵

bc = BertClient()
vec = bc.encode(['hey you', 'whats up?']) vec # [2, 25, 768]
vec[0] # [1, 25, 768], sentence embeddings for `hey you`
vec[0][0] # [1, 1, 768], word embedding for `[CLS]`
vec[0][1] # [1, 1, 768], word embedding for `hey`
vec[0][2] # [1, 1, 768], word embedding for `you`
vec[0][3] # [1, 1, 768], word embedding for `[SEP]`
vec[0][4] # [1, 1, 768], word embedding for padding symbol
vec[0][25] # error, out of index!

参考文献:

【1】bert-as-service三行代码使用bert模型 - accumulate_zhang的博客 - CSDN博客

【2】快速使用 BERT 生成词向量:bert-as-service - P01son的博客 - CSDN博客

BERT安装与使用的更多相关文章

  1. win10 + 独显 + Anaconda3 + tensorflow_gpu1.13 安装教程(跑bert模型)

    这里面有很多坑,最大的坑是发现各方面都装好了结果报错  Loaded runtime CuDNN library: 7.3.1 but source was compiled with: 7.4.1, ...

  2. java-1-java开发环境安装及配置-绝对权威

    1,下载安装jdk1.8u45 http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html 一般安装目录 ...

  3. 源代码安装-非ROOT用户安装软件的方法

    0.    前言 如果你没有sudo权限,则很多程序是无法使用别人编译好的文件安装的. 还有时候,没有对应你的主机配置的安装包,这时候需要我们自己下载最原始的源代码,然后进行编译安装. 这样安装的程序 ...

  4. Net-SNMP V3协议 安装配置笔记(CentOS 6.3/5.6)

    注意:snmp V3,需要需要关闭selinux和防火墙: 关闭selinux方法: #vi /etc/selinux/config 将文件中的SELINUX="" 为 disab ...

  5. 学习笔记44—Linux下安装freesurfer

    第一步:安装ubuntu (略过) 第二步:下载freesurfer:从freesurfer的官方网站上下载:http://surfer.nmr.mgh.harvard.edu/fswiki/Down ...

  6. Net-SNMP(V3协议)安装配置笔记(CentOS 5.2)(转)

    原出处:http://blog.ihipop.info/2010/03/722.html 为了这颗仙人掌(cacti),我必须先部署(Net-SNMP), 同时我为了安全因素,也为了简便考虑,决定采用 ...

  7. 基于Bert的文本情感分类

    详细代码已上传到github: click me Abstract:    Sentiment classification is the process of analyzing and reaso ...

  8. 使用modelarts部署bert命名实体识别模型

    模型部署介绍 当我们通过深度学习完成模型训练后,有时希望能将模型落地于生产,能开发API接口被终端调用,这就涉及了模型的部署工作.Modelarts支持对tensorflow,mxnet,pytorc ...

  9. 使用bert进行情感分类

    2018年google推出了bert模型,这个模型的性能要远超于以前所使用的模型,总的来说就是很牛.但是训练bert模型是异常昂贵的,对于一般人来说并不需要自己单独训练bert,只需要加载预训练模型, ...

随机推荐

  1. linux下如何查看自己都装了什么服务

    service --status-all 先把rabbitmq进程杀掉 ps -ef | grep rabbitmq | grep -v grep | awk '{print $2}' | xargs ...

  2. windows上安装python和python开发工具

    一.python安装: 登录python官网,下载需要的安装包:https://www.python.org/downloads/windows/.,一般就下载 executable installe ...

  3. 使用nexus搭建maven仓库(maven 本地私服)

    我们在使用maven的时候,对于项目所依赖的jar包,maven默认会在中央仓库下载jar包,到本地的磁盘目录(如果没有配置则是用户目录下/.m2/repository文件夹下).如果公司内部搭了一个 ...

  4. 1+x证书Web前端开发CSS3详细教程

    web 前端开发之 CSS3 新特性 http://blog.zh66.club/index.php/archives/189/ web 前端开发之 html5 新特性 http://blog.zh6 ...

  5. 《一起学mysql》5

    基准函数   用于评估不同机器之间的性能差别   MariaDB [jason]> select benchmark(10000000,md5('test')); +-------------- ...

  6. spring 注解aop调用invoke()

    public static void main(String[] args) { ClassPathXmlApplicationContext context = new ClassPathXmlAp ...

  7. 五、原子操作(CAS)

    原子操作(CAS) 一.CAS(Compare And Set) ​ Compare And Set(或Compare And Swap),CAS是解决多线程并行情况下使用锁造成性能损耗的一种机制,C ...

  8. 线代第六章定义&定理整理(持续更新中)

    Chapter 6 6.1 Inner Products and Norms Definition (inner product). Let V be a vector space over F. A ...

  9. Spring Security OAuth2 Demo —— 客户端模式(ClientCredentials)

    前情回顾 前几节分享了OAuth2的流程与其它三种授权模式,这几种授权模式复杂程度由大至小:授权码模式 > 隐式授权模式 > 密码模式 > 客户端模式 本文要讲的是最后一种也是最简单 ...

  10. JavaScript ES6新特性介绍

    介绍 ES6:ECMScript6 首先,一个常见的问题是,ECMAScript 和 JavaScript 到底是什么关系? ECMAScript是一个国际通过的标准化脚本语言: JavaScript ...