Pytorch:BertModel使用

基本介绍

  • 环境: Python 3.5+, Pytorch 0.4.1/1.0.0
  • 安装:
pip install pytorch-pretrained-bert
  • 必需参数:
    • --data_dir: "str": 数据根目录.目录下放着,train.xxx/dev.xxx/test.xxx三个数据文件.
    • --vocab_dir: "str": 词库文件地址.
    • --bert_model: "str": 存放着bert预训练好的模型. 需要是一个gz文件, 如"..x/xx/bert-base-chinese.tar.gz ", 里面包含一个bert_config.jsonpytorch_model.bin文件.
    • --task_name: "str": 用来选择对应数据集的参数,如"cola",对应着数据集.
    • --output_dir: "str": 模型预测结果和模型参数存储目录.

简单例子:

  • 导入所需包
import torch
from pytorch_pretrained_bert import BertTokenizer, BertModel, BertForMaskedLM
  • 创建分词器
tokenizer = BertTokenizer.from_pretrained(--vocab_dir)
  • 需要参数: --vocab_dir, 数据样式见此
  • 拥有函数:
    • tokenize: 输入句子,根据--vocab_dir和贪心原则切词. 返回单词列表
    • convert_token_to_ids: 将切词后的列表转换为词库对应id列表.
    • convert_ids_to_tokens: 将id列表转换为单词列表.
text = '[CLS] 武松打老虎 [SEP] 你在哪 [SEP]'
tokenized_text = tokenizer.tokenize(text)
indexed_tokens = tokenizer.convert_tokens_to_ids(tokenized_text)
segments_ids = [0, 0, 0, 0, 0, 0, 0,0,0,0, 1,1, 1, 1, 1, 1, 1, 1]
tokens_tensor = torch.tensor([indexed_tokens])
segments_tensors = torch.tensor([segments_ids])

这里对标记符号的切词似乎有问题([cls]/[sep]), 而且中文bert是基于字级别编码的,因此切出来的都是一个一个汉字:

['[', 'cl', '##s', ']', '武', '松', '打', '老', '虎', '[', 'sep', ']', '你', '在', '哪', '[', 'sep', ']']
  • 创建bert模型并加载预训练模型:
model = BertModel.from_pretrained(--bert_model)
  • 放入GPU:
tokens_tensor = tokens_tensor.cuda()
segments_tensors = segments_tensors.cuda()
model.cuda()
  • 前向传播:
encoded_layers, pooled_output= model(tokens_tensor, segments_tensors)
  • 参数:
    • input_ids: (batch_size, sqe_len)代表输入实例的Tensor
    • token_type_ids=None: (batch_size, sqe_len)一个实例可以含有两个句子,这个相当于句子标记.
    • attention_mask=None: (batch_size*): 传入每个实例的长度,用于attention的mask.
    • output_all_encoded_layers=True: 控制是否输出所有encoder层的结果.
  • 返回值:
    • encoded_layer:长度为num_hidden_layers的(batch_sizesequence_lengthhidden_size)的Tensor.列表
    • pooled_output: (batch_size, hidden_size), 最后一层encoder的第一个词[CLS]经过Linear层和激活函数Tanh()后的Tensor. 其代表了句子信息

参考

  • 7
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
PyTorch使用BERT(Bidirectional Encoder Representations from Transformers)是一种自然语言处理(NLP)模型,它基于Transformer架构,并且在预训练阶段使用了大量的无标签文本数据。下面是使用PyTorch实现BERT的一般步骤: 1. 安装PyTorch和Transformers库:首先,你需要安装PyTorch和Transformers库。可以通过pip命令来安装它们: ``` pip install torch pip install transformers ``` 2. 加载预训练的BERT模型:使用Transformers库中的`BertModel`类来加载预训练的BERT模型。你可以选择不同的预训练模型,如BERT-base或BERT-large。加载模型的代码如下: ```python from transformers import BertModel model = BertModel.from_pretrained('bert-base-uncased') ``` 3. 准备输入数据:BERT模型接受输入数据的格式是tokenized的文本序列。你需要将文本转换为对应的token,并添加特殊的标记,如[CLS]和[SEP]。可以使用Transformers库中的`BertTokenizer`类来完成这个任务: ```python from transformers import BertTokenizer tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') text = "Hello, how are you?" tokens = tokenizer.tokenize(text) input_ids = tokenizer.convert_tokens_to_ids(tokens) ``` 4. 输入数据编码:将输入数据编码为模型可以接受的形式。BERT模型需要输入的是token的索引序列,以及每个token的attention mask和segment mask。可以使用Transformers库中的`BertTokenizer`类的`encode_plus`方法来完成编码: ```python encoding = tokenizer.encode_plus( text, add_special_tokens=True, max_length=512, padding='max_length', truncation=True, return_attention_mask=True, return_token_type_ids=True, return_tensors='pt' ) input_ids = encoding['input_ids'] attention_mask = encoding['attention_mask'] token_type_ids = encoding['token_type_ids'] ``` 5. 使用BERT模型进行预测:将编码后的输入数据传递给BERT模型,即可进行预测。可以使用PyTorch的`torch.no_grad()`上下文管理器来关闭梯度计算,以提高推理速度: ```python with torch.no_grad(): outputs = model(input_ids, attention_mask=attention_mask, token_type_ids=token_type_ids) # 获取模型输出 last_hidden_state = outputs.last_hidden_state ``` 以上是使用PyTorch实现BERT的一般步骤。你可以根据具体的任务和需求对模型进行微调或进行其他操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值