bert中文使用总结 | 您所在的位置:网站首页 › tensorflow预训练模型用pytorch加载 › bert中文使用总结 |
目录 一、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的中文模型:这个是谷歌google发布的唯一一个中文模型,可以在google官网上下载该模型,如下图。 下载后,包含如下图所示的几个文件: google开源了bert源码,并且要求是tensorflow的版本是1.11.0,因此可以训练模型进行微调。 这个是哈工大讯飞联合实验室发布的中文预训练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。 cd G:\Python\Lib\site-packages\transformers #进入到convert_tf_checkpoint_to_pytorch.py所在的路径 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文件,如下图: 接下来可以用transformers来调用bert模型,输入如下代码 import torch from transformers import BertTokenizer,BertModel tokenizer = BertTokenizer.from_pretrained('bert\chinese_L-12_H-768_A-12') model = BertModel.from_pretrained('bert\chinese_L-12_H-768_A-12') input_ids = torch.tensor(tokenizer.encode("自然语言处理")).unsqueeze(0) # Batch size 1 print(input_ids) outputs = model(input_ids) # last_hidden_states = outputs[0] # The last hidden-state is the first element of the output tuple sequence_output = outputs[0] pooled_output = outputs[1] print(sequence_output) print(sequence_output.shape) ## 字向量 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机器上既运行服务端又运行客户端。 pip install bert-serving-server # 服务端 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/如果启动成功,服务器端会显示,如下图所示: 可以在pycharm中编写代码获取词向量的表示 from bert_serving.client import BertClient bc = BertClient() 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 |
CopyRight 2018-2019 实验室设备网 版权所有 |