使用bert将中文文本转化成词向量的方法

方法一:

https://github.com/hanxiao/bert-as-service 详情参考该github

使用肖涵博士的bert-as-service,这里笔者使用的为python3.5,tensorflow1.13版本,同时还需要pip安装如下几个包,

pip install  bert-serving-server

pip install bert-serving-client

因为bert还需要调用预训练好的中文模型,因此也需要下载,这里给一个下载的百度云盘

链接:https://pan.baidu.com/s/1ijpQ5urwW5T2wH6FqKYIvg 
提取码:9v0a 
随后在cmd进入bert-serving-start.exe所在的文件夹,一般这个文件夹在python安装路径下的Scripts文件夹下

如上所示随后再输入bert-serving-start  -model_dir E:/chinese_L-12_H-768_A-12 

这样就开启了bert-as-service,但是注意这个cmd窗口千万不要关闭,之后的操作将转到pycharm中进行,自己创建一个py文件然后输入如下代码,如果产生了向量矩阵则说明配置成功。

from bert_serving.client import BertClient

扫描二维码关注公众号,回复: 5851076 查看本文章

bc = BertClient()

bc.encode([‘你好‘])

即可输出“你好”的词向量表示,但是我们一般情况下是使用一个txt文本来直接转化词向量的,所以仅仅这样是不够的

笔者这里用如下代码来转化词向量:

这样可以将1.txt中的每一行文字转化成词向量表示的矩阵,但是仍然有一个问题,bert默认最大句子的长度为32,去除首尾CLS和SEP则只剩下30个字符,因此这里在处理文本时会出现只能处理一行30个字符的情况,超过30个部分则不会算进去,所以如何在cmd下修改这个bert-as-service的参数是一个问题。

方法二:

另外还有另外一种将文本转化成词向量的方法,即通过自己download  Bert源码来修改代码完成操作

通过在源码中直接调用Bert.encode方法来完成词向量的转化,同时可以在args.py这个配置文件中修改配置来使得上述提到的问题得以解决,如下所示修改序列的最大长度。

这个方法暂时还有一点问题,当输入的文本资源过大时会使得程序报错,因此这里只是给出一个想法,大家可以自己试试,笔者将在之后解决后再更新。

猜你喜欢

转载自blog.csdn.net/qq_29660957/article/details/88683823