pytorch_transformers使用之获取bert词向量

本文详细介绍了如何在PyTorch环境下搭建BERT模型,包括安装pytorch-transformers库,下载并转换BERT预训练模型,以及使用BERT模型进行文本编码的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之所以使用pytorch_transformers,有两个原因,
第一:pytorch_transformers确实很赞,被称为最先进的自然语言处理预训练模型库
第二:kashgarikeras_bertbert-serving-server不支持tensorflow2.0
我使用的版本是:
TensorFlow version: 2.0.0b1
torch version: 1.2.0+cpu
Python version: 3.7.3

第一步:安装pytorch

进入pytorch官网,选择自己的系统和python版本进行配置,拷贝Run this Command里的内容,在cmd里安装。
在这里插入图片描述

第二步:安装pytorch-transformers,详情请见 https://pypi.org/project/pytorch-transformers/
pip install pytorch-transformers
第三步:下载自己需要的bert预训练模型,解压到对应的目录下

下载链接:https://github.com/google-research/bert#pre-trained-models
在这里插入图片描述

第四步:将bert预训练模型转换为PyTorch版本(非常重要)

使用convert_tf_checkpoint_to_pytorch.py脚本,将TensorFlow checkpoint(以bert_model.ckpt开头的三个文件)和相关的配置文件(bert_config.json)作为输入,并为此配置创建PyTorch版本模型。
详情请见 https://www.cnblogs.com/jfdwd/p/11233477.html

convert_tf_checkpoint_to_pytorch.py 所在的路径 \Python\Lib\site-packages\pytorch_transformers
1. 在cmd里cd G:\Python\Lib\site-packages\pytorch_transformers,进入对应路径下;

2. 输入python convert_tf_checkpoint_to_pytorch.py --tf_checkpoint_path=E:/code/NLP/chinese_L-12_H-768_A-12/bert_model.ckpt --bert_config_file=E:/code/NLP/chinese_L-12_H-768_A-12/bert_config.json --pytorch_dump_path=E:/code/NLP/chinese_L-12_H-768_A-12/pytorch_model.bin
*注:E:/code/NLP/chinese_L-12_H-768_A-12 是bert预训练模型解压后的目录路径*

3. 运行一次这个转换脚本,可以得到一个PyTorch版本模型。可以忽略TensorFlow checkpoint(以bert_model.ckpt开头的三个文件),但要保留配置文件(bert_config.json)和词汇表文件(vocab.txt),因为PyTorch模型也需要这些文件。将bert_config.json复制粘贴重命名为config.json,否则执行pytorch_transformers代码会报错。

在这里插入图片描述
在这里插入图片描述

第五步:敲代码
import torch
from pytorch_transformers import BertTokenizer,BertModel

tokenizer = BertTokenizer.from_pretrained('E:/code/NLP/chinese_L-12_H-768_A-12')
model = BertModel.from_pretrained('E:/code/NLP/chinese_L-12_H-768_A-12')
input_ids = torch.tensor(tokenizer.encode("自然语言处理")).unsqueeze(0)  # Batch size 1
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)      ## 句向量

在这里插入图片描述

评论 43
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值