使用transformers轻松调用bert模型生成中文词向量

transformers是huggingface提供的预训练模型库,可以轻松调用API来得到你的词向量。transformers的前身有pytorch-pretrained-bert,pytorch-transformers,原理基本都一致。本文主要介绍如何调用transformers库生成中文词向量。

envs

python == 3.7.3
tensorflow == 2.0.0
pytorch == 1.5.1
transformers == 3.0.2
(各版本的安装在此略过,库直接pip就好~)

pre-train model

使用的预训练模型是哈工大的,下载链接:传送门,可以根据他使用的训练数据来选择合适自己的模型。当然transformers库里有提供google的官方中文bert,但哈工大的中文模型更有针对性(此条没验证过,本人直接选择的是哈工大的RoBERTa-wwm-ext, Chinese模型)。

文档中提供tensorflow和pytorch两个版本的模型,本人先下载了tf版本的,再通过transformers库里的convert_tf_checkpoint_to_pytorch.py脚本将tf转化为pt版本,具体转换方法参考:传送门。也可以直接下载他的pt版本。下载的tf版本主要是体验bert-as-service 的使用效果,操作也是仅需几行代码即可得到词向量,但这期间需要单独开一个服务器端,个人觉得略嫌麻烦-_-
转换好的模型中需要更改**_config.json类型的文件名为config.json,避免调入时报错。

Input and Encode

写在前面:输入的句子不用自己加[CLS],[SEP]标签。可以单独生成一个句子的向量,也可两个句子得到上下文向量,示例如下:
input_ids = tokenizer(batch_sentences) #单个句子
input_ids = tokenizer(batch_sentences, batch_of_second_sentences) #一对句子
还有一个需要注意的点是,以上提供的中文模型都是基于Bert的,调用的API需为bert类,例如transformer.BertTokenizertransformer.BertModel
剩下的就是写代码了,代码细节就不描述了,详情可以查阅官方文档:传送门。

code

output

你可能感兴趣的:(使用transformers轻松调用bert模型生成中文词向量)