1.什么是bert
- bert原文中文翻译版,论文地址。
- 腾讯一篇对bert解读的文章,从零构建BERT,文章地址。
- UER-py全称是Universal Encoder Representations,UER-py是一个在通用语料预训练以及对下游任务进行微调的工具包。github项目地址。
- uer的一些教程,知乎教程(bert做情感分类、序列标注)。
- 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%的轮数采用较低的学习率进行学习。
- args参数介绍。
#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
- 为什么可以加载bert模型呢?
实际上就是和我们平时保存加载模型一样,网上发布的模型通常是他们在大规模语料上训练的模型的权重,只要我们实现了和网上权重对应的bert模型,就可以把相应的参数load进去,下面我们介绍下一个pytorch上的bert模型。 - 项目名称 pytorch-pretrained-bert.
这个项目时fork一个项目transformer的一个实现,里面的实现也是基本差不多,不过transformer封装的更好,类间的关系的复杂,代码的冗余比较低,但我还没有怎么看tranformer的用法。这个项目有个好处,每一个类的实现比较完整,比较方便自己去改动。 - 如何安装,建议使用源码安装,pip直接安装会报错。
#进入到下载的github项目根目录下,运行
pip install --editable .
# 注意最后面的 . 不能省略。
- 官网的使用教程(由于官网下载的网络比较差,我就把模型换成了,上述uer的预训练模型)
项目目录如下
文章图片
上述的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】在自己的数据集上进行bert任务的学习,可以进一步把权重学的更好,使用方法,数据要处理成这种格式
文章图片
然后依次运行preprocess.py 和 pretrain.py即可,这里遇到一个问题,在使用gpu时实验室的服务器会报错,我在自己的电脑是可以正常运行的,猜测是由于pytorch的版本造成的问题。
pytorch_pretrained_bert如何进行预训练,在examples文件中有一个run_lm_finetuning.py文件。
推荐阅读
- C语言学习|第十一届蓝桥杯省赛 大学B组 C/C++ 第一场
- paddle|动手从头实现LSTM
- pytorch|使用pytorch从头实现多层LSTM
- 推荐系统论文进阶|CTR预估 论文精读(十一)--Deep Interest Evolution Network(DIEN)
- pytorch|YOLOX 阅读笔记
- 前沿论文|论文精读(Neural Architecture Search without Training)
- 联邦学习|【阅读笔记】Towards Efficient and Privacy-preserving Federated Deep Learning
- OpenCV|OpenCV-Python实战(18)——深度学习简介与入门示例
- 深度学习|深度学习笔记总结
- 《繁凡的深度学习笔记》|一文绝对让你完全弄懂信息熵、相对熵、交叉熵的意义《繁凡的深度学习笔记》第 3 章 分类问题与信息论基础(中)(DL笔记整理