当前位置:   article > 正文

bert中文使用总结_chinese_wwm_ext_pytorch

chinese_wwm_ext_pytorch

目录

一、bert的中文模型:

1.chinese_L-12_H-768_A-12

2.chinese_wwm_ext_pytorch

二、将google谷歌bert预训练模型转换为pytorch版本

1.运行脚本,得到pytorch_model.bin文件

2.写代码使用transformers调用bert模型

三、bert-as-service

1.安装方法

2.启动bert服务

3.在客服端获取词向量

四 使用bert做文本分类

参考链接


一、bert的中文模型:

1.chinese_L-12_H-768_A-12

这个是谷歌google发布的唯一一个中文模型,可以在google官网上下载该模型,如下图。

下载后,包含如下图所示的几个文件:

google开源了bert源码,并且要求是tensorflow的版本是1.11.0,因此可以训练模型进行微调。

2.chinese_wwm_ext_pytorch

这个是哈工大讯飞联合实验室发布的中文预训练bert模型,可以在官网链接下载,我下载的是pytorch版本,如下图红色框。

下载后,包含如下图几个文件:

下载 pytorch 版本的中文bert模型可以使用 transformers 库中的API快速使用bert模型,具体的API可以参考BERT-transformers官网。另外,Transformers is tested on Python 3.6+, and PyTorch 1.1.0+ or TensorFlow 2.0+。详情参考安装链接

注:使用 transformers 运行 bert 模型的时候,要把下载的 pytorch 版的模型的文件名字改一下,即把 bert_config.json 改名为 config.json,Transformers加载Pytorch模型时会自动调用,之后可以通过Transformers正常使用。

如果对transformers不太熟悉,可以看一下transformers的简介上transformers简介下

二、将google谷歌bert预训练模型转换为pytorch版本

1.运行脚本,得到pytorch_model.bin文件

使用convert_tf_checkpoint_to_pytorch.py脚本,该脚本下载链接,将TensorFlow checkpoint(以bert_model.ckpt开头的三个文件)和相关的配置文件(bert_config.json)作为输入,并为此配置创建PyTorch版本模型。

调用该代码的命令为,注:要运行这个特定的转换脚本,你需要安装TensorFlow和PyTorch。该库的其余部分只需要PyTorch。

  1. cd G:\Python\Lib\site-packages\transformers #进入到convert_tf_checkpoint_to_pytorch.py所在的路径
  2. python convert_tf_checkpoint_to_pytorch.py --tf_checkpoint_path=chinese_L-12_H-768_A-12/bert_model.ckpt --bert_config_file=chinese_L-12_H-768_A-12/bert_config.json --pytorch_dump_path=chinese_L-12_H-768_A-12/pytorch_model.bin

运行一次这个转换脚本,可以得到一个PyTorch版本模型。可以忽略TensorFlow checkpoint(以bert_model.ckpt开头的三个文件),但要保留配置文件(bert_config.json)和词汇表文件(vocab.txt),因为PyTorch模型也需要这些文件。将bert_config.json复制粘贴重命名为config.json,否则执行pytorch_transformers代码会报错valueerror:unable to parse /chinese_L-12_H-768_A-12/config.json as a url or as a local path。 

运行完脚本后,文件中生成了pytorch_model.bin文件,如下图:

2.写代码使用transformers调用bert模型

接下来可以用transformers来调用bert模型,输入如下代码

  1. import torch
  2. from transformers import BertTokenizer,BertModel
  3. tokenizer = BertTokenizer.from_pretrained('bert\chinese_L-12_H-768_A-12')
  4. model = BertModel.from_pretrained('bert\chinese_L-12_H-768_A-12')
  5. input_ids = torch.tensor(tokenizer.encode("自然语言处理")).unsqueeze(0) # Batch size 1
  6. print(input_ids)
  7. outputs = model(input_ids)
  8. # last_hidden_states = outputs[0] # The last hidden-state is the first element of the output tuple
  9. sequence_output = outputs[0]
  10. pooled_output = outputs[1]
  11. print(sequence_output)
  12. print(sequence_output.shape) ## 字向量
  13. print(pooled_output.shape) ## 句向量

运行结果如下图:

 

三、bert-as-service

谷歌google公开了tensorflow版本的预训练bert模型和代码,可以用于生成词向量。还有更简单的方法:直接调用封装好的库bert-as-service。bert-as-service是腾讯AI Lab 开源的一个bert服务,它让用户可以以调用服务的方式使用bert模型,而不需要关注bert的实现细节。bert-as-service分为客户端和服务端,用户可以从python代码中调用服务,也可以通过http方式访问。

1.安装方法

使用pip命令安装,客户端和服务端可以安装在一台机器上,也可以安装在不同的机器上。

本文采用的方法是在同一台机器上配置,虽然网上绝大部分资料都是在Linux环境下部署服务端,然后用户通过远程对服务端进行访问,从而完成交互。但是由于学校对Linux主机和本地的网络通讯进行了限制,Linux主机又都是生产机器,也不能轻易在上面进行尝试,所以只能在本地win10机器上既运行服务端又运行客户端。

  1. pip install bert-serving-server # 服务端
  2. pip install bert-serving-client # 客户端,与服务端互相独立

服务器的运行环境为 python >= 3.5 且 tensorflow >= 1.10

客户端可以运行于 python2 或 python3

2.启动bert服务

以谷歌google中文bert预训练模型即chinese_L-12_H-768_A-12为例

在服务器端使用bert-serving-start命令启动服务

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

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

如果启动后电脑很卡的话,可以去掉-num_worker参数,即输入如下命令启动服务:

bert-serving-start -model_dir chinese_L-12_H-768_A-12/

如果启动成功,服务器端会显示,如下图所示:

3.在客服端获取词向量

可以在pycharm中编写代码获取词向量的表示

  1. from bert_serving.client import BertClient
  2. bc = BertClient()
  3. vec = bc.encode(['你'])

服务端可以正常启动,但是在pycharm上运行客户端时一直没有反应,始终处于运行状态,未能把vec打印出来。

解决办法:虽然在同一机器上部署服务端和客户端,但是客户端也要明确的指出端口号,代码如下:

bc = BertClient(port=5555, port_out=5556, show_server_config=True, timeout=10000)

查看端口号的方法,在启动服务端的时候会给出下面的信息,其中包含有端口号,如下图:

timeout是为了避免客户端无限制的等待服务端而做的一个超时限定,timeout的大小视网络延迟情况而定,也可以不加。

四 使用bert做文本分类

在bert官网链接上下载源码后,需要对bert源码进行修改做文本分类的任务,可以参考博客链接进行修改,github。参考博客链接做多分类,github

参考链接

https://blog.csdn.net/qq_34832393/article/details/90414293

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/371138
推荐阅读
相关标签
  

闽ICP备14008679号