如何使用bert

1.什么是bert

  1. bert原文中文翻译版,论文地址
  2. 腾讯一篇对bert解读的文章,从零构建BERT,文章地址

2.bert的使用

uer-py

  1. UER-py全称是Universal Encoder Representations,UER-py是一个在通用语料预训练以及对下游任务进行微调的工具包。github项目地址
  2. uer的一些教程,知乎教程(bert做情感分类、序列标注)。
  3. uer分类代码的介绍,参考uer-py/run_classifier.py。
    • args参数介绍。
      pretrained_model_path--------原始的bert模型地址。
      output_model_path-------------分类模型的保存地址。
      vocab_path-----------------------词表文档的地址。注意每一个预训练bert模型都要有相对应的vocab_path,config文件。vocab的作用用于把输入的一句话转化为一个tokens。
      config_path----------------------关于bert一些超参数的设置。
      seq_length-----------------------设置输入的句长,这里注意一点bert的句长并无限制,模型里也没有句长的超参数,这里设置句长是设置输入时token的最大长度,超过长度的会自动截断。
      embedding、encoder--------这里是由于uer是一个通用的工具,选择不同的embedding、encoder和target即可构成不同的模型,在这里我们使用bert即可。
      subword option----------------这里是指要不要使用更细粒度的表示,由于一般的bert是基于字的,所以后面的一系列参数是没用的。
      tokenizer------------------------是指转换sequence到token的方法,这里选用bert。
      后面是一些优化器的参数,warm up是指在学习的前k%的轮数采用较低的学习率进行学习。
  #bert加载的关键代码
  model = build_model(args)
  # Load or initialize parameters.
   if args.pretrained_model_path is not None:
       # Initialize with pretrained model.
       model.load_state_dict(torch.load(args.pretrained_model_path), strict=False)  
   else:
       # Initialize with normal distribution.
       for n, p in list(model.named_parameters()):
           if 'gamma' not in n and 'beta' not in n:
               p.data.normal_(0, 0.02)
   #这是model就是一个已经把预训练权重全部加载好了的模型了。
   #我们先使用model.embedding 把token转化为embedding,然后调用model.encoder
   #进行bert编码。
   #在这个模型中,把加载好的bert model作为参数传入了自己建立的分类模型。

pytroch_pretrained_bert

  1. 为什么可以加载bert模型呢?
    实际上就是和我们平时保存加载模型一样,网上发布的模型通常是他们在大规模语料上训练的模型的权重,只要我们实现了和网上权重对应的bert模型,就可以把相应的参数load进去,下面我们介绍下一个pytorch上的bert模型。
  2. 项目名称 pytorch-pretrained-bert.
    这个项目时fork一个项目transformer的一个实现,里面的实现也是基本差不多,不过transformer封装的更好,类间的关系的复杂,代码的冗余比较低,但我还没有怎么看tranformer的用法。这个项目有个好处,每一个类的实现比较完整,比较方便自己去改动。
  3. 如何安装,建议使用源码安装,pip直接安装会报错。
#进入到下载的github项目根目录下,运行
pip install --editable .
# 注意最后面的 . 不能省略。
  1. 官网的使用教程(由于官网下载的网络比较差,我就把模型换成了,上述uer的预训练模型)
    项目目录如下
    bert的目录
    上述的pytorch_model.bin就是模型的权重(一定要命名成pytorch_model.bin,否则会报错,vocab和config也是一样必须要安装这样来命名,还有一点,如果是使用uer上下载的bert模型,必须要在里面加上一个参数vocab_size)然后在同级目录下建立一个bert_test的demo。
 import torch
from pytorch_pretrained_bert import BertTokenizer, BertModel, BertForMaskedLM

#Load pre-trained model tokenizer (vocabulary)
tokenizer = BertTokenizer.from_pretrained('bert/bert-base-chinese-vocab.txt')
model = BertModel.from_pretrained('bert')
#这样就可以加载模型权重了。详细的使用教程可以参考github上的示例。

uer-py预训练bert

在自己的数据集上进行bert任务的学习,可以进一步把权重学的更好,使用方法,数据要处理成这种格式
在这里插入图片描述
然后依次运行preprocess.py 和 pretrain.py即可,这里遇到一个问题,在使用gpu时实验室的服务器会报错,我在自己的电脑是可以正常运行的,猜测是由于pytorch的版本造成的问题。
pytorch_pretrained_bert如何进行预训练,在examples文件中有一个run_lm_finetuning.py文件。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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的一般步骤。你可以根据具体的任务和需求对模型进行微调或进行其他操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值