BERT提取句子特征——Bert-as-server的实际操作(Windows10)

引言

笔者最近接到一个任务——使用Bert模型提取句子的特征,得到其输出的特征向量。Bert模型在网上已有许多解读,本文聚焦于如何将Bert模型作为一个工具对句子的特征进行提取。
查阅多方资料后,笔者发现谷歌公司已经将Bert模型开源,并且在官网提供了部分已经完成预训练的模型。但是笔者遇到的问题是,Bert官网提供的代码在笔者本地环境中无法正常运行,多次调试环境仍无果。因此,笔者尝试使用Bert-as-server调用预训练的Bert模型进行特征提取。
完成本次任务参考了CSDN上许多大佬的文章,这部分文章会在文末给出链接,感谢前辈的无私分享。笔者这篇文章只是想记录一下初学者是怎样使用Bert-as-server,并将自己踩过的坑记录下来。

详细步骤

1、Anaconda创建虚拟环境(Python3.6)

Anaconda创建虚拟环境有多种途径,笔者习惯在Anaconda Navigator,这个图形界面窗口中创建虚拟环境。
BERT提取句子特征——Bert-as-server的实际操作(Windows10)_第1张图片BERT提取句子特征——Bert-as-server的实际操作(Windows10)_第2张图片BERT提取句子特征——Bert-as-server的实际操作(Windows10)_第3张图片

如上图所示,弹出窗口后,虚拟环境命名为 tf1_11, Python版本选择3.6, 点击Create即可创建虚拟环境(答主的按键是灰色是因为已经创建对应的虚拟环境)。

注意:如果此时出现报错,或者出现长时间无法创建虚拟环境的情况,那么大概率是网络问题——创建虚拟环境或下载某些python的包都可能出现这个问题,因为此时需要连接国外的服务器。出现这种情况,要么多试几次,要么连接学术机构或高校的公用网络再试,要么尝试使用镜像。

2、安装TensorFlow(版本为1.11.0)

(1)打开命令提示符(cmd),使用以下命令查看自己本地的环境。

conda info --envs

BERT提取句子特征——Bert-as-server的实际操作(Windows10)_第4张图片
如图,我们已经成功创建名为 tf1_11 的虚拟环境。

(2)安装TensorFlow 1.11.0

首先使用以下命令激活环境

activate tf1_11

结果如下
在这里插入图片描述

接下来使用如下命令安装TensorFlow 1.11.0(CPU版)

conda install tensorflow=1.11.0

由于笔者已经安装了有关环境,此处不继续演示。在输入命令后,命令行中会提示是否确定安装,此时键入 y 并回车即可。
接下来等待系统安装TensorFlow。如果报错或者网速很慢,解决方法也是,要么连接研究机构或高校的公用网络进行安装,要么使用镜像安装。

3、安装Bert-as-server需要的包

在确保仍处于环境 tf1_11 的情况下
在这里插入图片描述
分别使用如下命令安装需要的包

pip install bert-serving-server
pip install bert-serving-client

安装过程与TensorFlow的安装类似,可能出现的问题也类似,解决方法也类似。

4、下载Bert预训练模型

前往Bert官网(Bert官网)下载所需的模型。
BERT提取句子特征——Bert-as-server的实际操作(Windows10)_第5张图片按自己的需要下载模型即可。笔者下载的是方框内的模型,并存到自己喜欢的,自己找得到的文件夹中即可。
(笔者的文件夹是F:\Python\working\ECCV\BERT\uncased_L-12_H-768_A-12)

5、输入命令,启动服务端

经过笔者的实验,Windows的命令提示符仍然可以充当服务端的功能。打开命令提示符,激活环境。

BERT提取句子特征——Bert-as-server的实际操作(Windows10)_第6张图片
接下来输入命令

bert-serving-start -model_dir=F:\Python\working\ECCV\BERT\uncased_L-12_H-768_A-12 -num_worker=1 -cpu 

敲击回车键后,将会出现很多提示。注意两个节点。
第一,当命令行出现 build graph… 时,若直接报错,则是因为TensorFlow版本过高。
在这里插入图片描述

第二,当出现如下语句,说明服务端创建成功。
在这里插入图片描述

在此过程中,可能出现其他错误。例如出现MermoryError,则将cpu线程数(即-num_worker)减少。例如出现终端一直等待的情况,这种情况原因不明,建议重启终端或重启电脑后,再次尝试。

6、启动客户端

笔者使用Pycharm运行代码时,总是出现报错—— DLL load failed: 找不到指定的模块。输出显示是numpy的版本问题,但笔者调整numpy版本后,服务端便无法正常启动(直接给我死锁了)。
于是,笔者使用Jupyter Notebook运行代码,即可正常运行。
测试代码如下:

from bert_serving.client import BertClient
import numpy as np

bc = BertClient()
doc_vec = bc.encode(['first do it', 'then do it right', 'first do it then do it right'])

print(doc_vec)
print()
print(doc_vec.shape)

以上代码中,数据集是一个列表,放入encode()函数中。输出如下:

BERT提取句子特征——Bert-as-server的实际操作(Windows10)_第7张图片

7、参考资料

bert-as-service简单使用
Bert- as-service安装和使用教程

你可能感兴趣的:(bert,深度学习,人工智能)