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.BertTokenizer
、transformer.BertModel
。
剩下的就是写代码了,代码细节就不描述了,详情可以查阅官方文档:传送门。