前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >pytorch中文语言模型bert预训练代码

pytorch中文语言模型bert预训练代码

作者头像
朴素人工智能
发布于 2020-07-24 07:06:35
发布于 2020-07-24 07:06:35
4.2K00
代码可运行
举报
文章被收录于专栏:朴素人工智能朴素人工智能
运行总次数:0
代码可运行

ACL2020 Best Paper有一篇论文提名奖,《Don’t Stop Pretraining: Adapt Language Models to Domains and Tasks》。这篇论文做了很多语言模型预训练的实验,系统的分析了语言模型预训练对子任务的效果提升情况。有几个主要结论:

  • 在目标领域的数据集上继续预训练(DAPT)可以提升效果;目标领域的语料与RoBERTa的原始预训练语料越不相关,DAPT效果则提升更明显。
  • 在具体任务的数据集上继续预训练(TAPT)可以十分“廉价”地提升效果。
  • 结合二者(先进行DAPT,再进行TAPT)可以进一步提升效果。
  • 如果能获取更多的、任务相关的无标注数据继续预训练(Curated-TAPT),效果则最佳。
  • 如果无法获取更多的、任务相关的无标注数据,采取一种十分轻量化的简单数据选择策略,效果也会提升。

虽然在bert上语言模型预训练在算法比赛中已经是一个稳定的上分操作。但是上面这篇文章难能可贵的是对这个操作进行了系统分析。大部分中文语言模型都是在tensorflow上训练的,一个常见例子是中文roberta项目。可以参考

https://github.com/brightmart/roberta_zh

使用pytorch进行中文bert语言模型预训练的例子比较少。在huggingface的Transformers中,有一部分代码支持语言模型预训练(不是很丰富,很多功能都不支持比如wwm)。为了用最少的代码成本完成bert语言模型预训练,本文借鉴了里面的一些现成代码。也尝试分享一下使用pytorch进行语言模型预训练的一些经验。主要有三个常见的中文bert语言模型

  1. bert-base-chinese
  2. roberta-wwm-ext
  3. ernie

1 bert-base-chinese

(https://huggingface.co/bert-base-chinese)

这是最常见的中文bert语言模型,基于中文维基百科相关语料进行预训练。把它作为baseline,在领域内无监督数据进行语言模型预训练很简单。只需要使用官方给的例子就好。

https://github.com/huggingface/transformers/tree/master/examples/language-modeling

(本文使用的transformers更新到3.0.2)

方法就是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python run_language_modeling.py \
    --output_dir=output \
    --model_type=bert \
    --model_name_or_path=bert-base-chinese \
    --do_train \
    --train_data_file=$TRAIN_FILE \
    --do_eval \
    --eval_data_file=$TEST_FILE \
    --mlm

其中$TRAIN_FILE 代表领域相关中文语料地址。

2 roberta-wwm-ext

(https://github.com/ymcui/Chinese-BERT-wwm)

哈工大讯飞联合实验室发布的预训练语言模型。预训练的方式是采用roberta类似的方法,比如动态mask,更多的训练数据等等。在很多任务中,该模型效果要优于bert-base-chinese。

对于中文roberta类的pytorch模型,使用方法如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import torch
from transformers import BertTokenizer, BertModel
tokenizer = BertTokenizer.from_pretrained("hfl/chinese-roberta-wwm-ext")
roberta = BertModel.from_pretrained("hfl/chinese-roberta-wwm-ext")

切记不可使用官方推荐的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tokenizer = AutoTokenizer.from_pretrained("hfl/chinese-roberta-wwm-ext")
model = AutoModel.from_pretrained("hfl/chinese-roberta-wwm-ext")

因为中文roberta类的配置文件比如vocab.txt,都是采用bert的方法设计的。英文roberta模型读取配置文件的格式默认是vocab.json。对于一些英文roberta模型,倒是可以通过AutoModel自动读取。这就解释了huggingface的模型库的中文roberta示例代码为什么跑不通。https://huggingface.co/models?

如果要基于上面的代码run_language_modeling.py继续预训练roberta。还需要做两个改动。

  • 下载roberta-wwm-ext到本地目录hflroberta,在config.json中修改“model_type”:"roberta"为"model_type":"bert"。
  • 对上面的run_language_modeling.py中的AutoModel和AutoTokenizer都进行替换为BertModel和BertTokenizer。

再运行命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python run_language_modeling_roberta.py \
    --output_dir=output \
    --model_type=bert \
    --model_name_or_path=hflroberta \
    --do_train \
    --train_data_file=$TRAIN_FILE \
    --do_eval \
    --eval_data_file=$TEST_FILE \
    --mlm

3 ernie

(https://github.com/nghuyong/ERNIE-Pytorch)

ernie是百度发布的基于百度知道贴吧等中文语料结合实体预测等任务生成的预训练模型。这个模型的准确率在某些任务上要优于bert-base-chinese和roberta。如果基于ernie1.0模型做领域数据预训练的话只需要一步修改。

  • 下载ernie1.0到本地目录ernie,在config.json中增加字段"model_type":"bert"。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python run_language_modeling.py \
    --output_dir=output \
    --model_type=bert \
    --model_name_or_path=ernie \
    --do_train \
    --train_data_file=$TRAIN_FILE \
    --do_eval \
    --eval_data_file=$TEST_FILE \
    --mlm

最后,huggingface项目中语言模型预训练用mask方式如下。仍是按照15%的数据随机mask然后预测自身。如果要做一些高级操作比如whole word masking或者实体预测,可以自行修改transformers.DataCollatorForLanguageModeling。

本文实验代码库。拿来即用!

https://github.com/zhusleep/pytorch_chinese_lm_pretrain

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 朴素人工智能 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
中文预训练ALBERT模型来了:小模型登顶GLUE,Base版模型小10倍、速度快1倍
谷歌ALBERT论文刚刚出炉一周,中文预训练ALBERT模型来了,感兴趣的同学可以直接尝鲜试用。
AI科技大本营
2019/10/10
3.8K0
中文预训练ALBERT模型来了:小模型登顶GLUE,Base版模型小10倍、速度快1倍
Transformers2.0让你三行代码调用语言模型,兼容TF2.0和PyTorch
最近,专注于自然语言处理(NLP)的初创公司 HuggingFace 对其非常受欢迎的 Transformers 库进行了重大更新,从而为 PyTorch 和 Tensorflow 2.0 两大深度学习框架提供了前所未有的兼容性。
机器之心
2019/09/29
1K0
手把手教 | 使用Bert预训练模型文本分类(内附源码)
Bert模型是Google在2018年10月发布的语言表示模型,Bert在NLP领域横扫了11项任务的最优结果,可以说是现今最近NLP中最重要的突破。Bert模型的全称是Bidirectional Encoder Representations from Transformers,是通过训练Masked Language Model和预测下一句任务得到的模型。关于Bert具体训练的细节和更多的原理,有兴趣的读者可以去看在[arXiv](https://arxiv.org/abs/1810.04805)上的原文。本篇文章从实践入手,带领大家进行Bert的中文文本分类和作为句子向量进行使用的教程。
数据派THU
2019/05/09
16.2K1
手把手教 | 使用Bert预训练模型文本分类(内附源码)
自然语言预训练模型大总结​
先来一张图。 本文主要援引复旦大学邱锡鹏教授的论文:NLP预训练模型综述,对预训练模型进行了一些梳理
机器学习之禅
2022/07/11
8550
自然语言预训练模型大总结​
MiniRBT中文小型预训练模型:结合了全词掩码技术和两段式知识蒸馏技术,加快推理速度
在自然语言处理领域中,预训练语言模型(Pre-trained Language Models)已成为非常重要的基础技术。为了进一步促进中文信息处理的研究发展,哈工大讯飞联合实验室(HFL)基于自主研发的知识蒸馏工具TextBrewer,结合了全词掩码(Whole Word Masking)技术和知识蒸馏(Knowledge Distillation)技术推出中文小型预训练模型MiniRBT。
汀丶人工智能
2023/08/06
8660
MiniRBT中文小型预训练模型:结合了全词掩码技术和两段式知识蒸馏技术,加快推理速度
20项任务全面碾压BERT,全新XLNet预训练模型
这是继BERT发布以来又一个令广大NLPer兴奋的消息, CMU 与谷歌大脑提出的 XLNet 在 20 个任务上超过了 BERT 的表现,并在 18 个任务上取得了当前最佳效果。
昱良
2019/06/21
1.5K0
20项任务全面碾压BERT,全新XLNet预训练模型
应用实践:Paddle分类模型大集成者[PaddleHub、Finetune、prompt]
相关文章: [Paddlenlp之UIE模型实战实体抽取任务【打车数据、快递单】](https://blog.csdn.net/sinat_39620217/article/details/12582
汀丶人工智能
2022/11/11
3940
哈工大讯飞联合实验室发布基于全词覆盖的中文BERT预训练模型
下载地址:https://github.com/ymcui/Chinese-BERT-wwm
代码医生工作室
2019/07/05
4.6K0
哈工大讯飞联合实验室发布基于全词覆盖的中文BERT预训练模型
RoBERTa中文预训练模型,你离中文任务的「SOTA」只差个它
对于中文领域的预训练语言模型,我们最常用的就是 BERT 了,这并不是说它的效果最好,而是最为方便。昨天,国内开发者 brightmart 开源了最新的 RoBERTa 中文预训练语言模型,开发社区又有新的中文模型可以用了。
机器之心
2019/09/08
1.7K0
ELECTRA中文预训练模型开源,仅1/10参数量,性能依旧媲美BERT
在去年11月份,NLP大神Manning联合谷歌做的ELECTRA一经发布,迅速火爆整个NLP圈,其中ELECTRA-small模型参数量仅为 BERT-base模型的1/10,性能却依然能与BERT、RoBERTa等模型相媲美。
AI科技评论
2020/03/30
1.1K0
快递单信息抽取【二】基于ERNIE1.0至ErnieGram + CRF预训练模型
2.快递单信息抽取【二】基于ERNIE1.0至ErnieGram + CRF预训练模型
汀丶人工智能
2022/11/08
5150
transformers示例
「重要」 :要运行示例的最新版本,你必须从源代码安装并为示例安装一些特定要求。在新的虚拟环境中执行以下步骤:
磐创AI
2020/03/31
1.7K0
手把手教你用 Transformers 和 Tokenizers 从头训练新语言模型
在过去的几周里,我们对 transformers 和 tokenizers 库进行了一些改进,目的是让从头开始训练新的语言模型变得更加容易。
AI研习社
2020/02/25
6K0
打造自己的 PTM!新词挖掘+预训练
因此,大家常会使用开源的预训练模型,然后根据下游任务数据来fine tuning。其中最出名的就是哈工大讯飞实验室推出的一系列中文PTMs[1],他们是用维基百科的中文语料来做的预训练。
NewBeeNLP
2021/12/04
1.7K0
打造自己的 PTM!新词挖掘+预训练
中文预训练模型泛化能力挑战赛Baseline
自从2017年具有划时代意义的Transformer模型问世以来,短短两年多的时间内,如雨后春笋般的出现了大量的预训练模型,比如:Bert,Albert,ELECTRA,RoBERta,T5,GPT3等等。然而之前的基准评测体系存在两个缺陷:评测强度不够,模型不通用。评测强度不够指的是选手只提交结果,不提交inference的代码。模型不通用指的是预训练模型不能保证在相同超参数情况下在所有任务上都获得比较好的性能。以上两点极大限制了预训练技术的应用和发展。如果我们能通过算法实现泛化能力强的中文预训练模型,这将提高下游业务的准确性,从而提升企业的核心竞争力,并为企业创造更多的价值。
听城
2021/03/02
8150
中文预训练模型泛化能力挑战赛Baseline
谷歌最强NLP模型BERT官方中文版来了!多语言模型支持100种语言
上周,谷歌AI团队开源了备受关注的“最强NLP模型”BERT的TensorFlow代码和预训练模型,不到一天时间,收获3000多星!
新智元
2018/12/07
4.4K0
训练BERT,我只花了一半的时间
相信很多人都知道Hugging Face,也都用过它的Transformers预训练语言模型,但你们有没有觉得它训练的有点太慢了呢?
godweiyang
2021/07/19
9770
Huawei Nezha实践指南
华为的哪吒模型已经面世有一阵子了,而网上一直没有关于哪吒模型的实践文章,所以我打算通过这份指南教会你如何使用nezha进行文本分类。(官网上有一份文本分类的示例代码,但是上千行的代码实在是不利用快速上手)
luxuantao
2021/03/28
1.3K0
PaddleHub实战篇{词法分析模型LAC、情感分类ERNIE Tiny}训练、部署【三】
【一】ERNIE:飞桨开源开发套件,入门学习,看看行业顶尖持续学习语义理解框架,如何取得世界多个实战的SOTA效果?_汀、的博客-CSDN博客_ernie模型
汀丶人工智能
2022/12/21
7460
PaddleHub实战篇{ERNIE实现文新闻本分类、ERNIE3.0 实现序列标注}【四】
【一】ERNIE:飞桨开源开发套件,入门学习,看看行业顶尖持续学习语义理解框架,如何取得世界多个实战的SOTA效果?_汀、的博客-CSDN博客_ernie模型
汀丶人工智能
2022/12/21
8430
PaddleHub实战篇{ERNIE实现文新闻本分类、ERNIE3.0 实现序列标注}【四】
推荐阅读
相关推荐
中文预训练ALBERT模型来了:小模型登顶GLUE,Base版模型小10倍、速度快1倍
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档