使用Fairseq微调预训练模型

  • 1. 先决条件
  • 2. 流程
      • 简化流程
    • 2.1 数据集处理
    • 2.2 划分数据集
    • 2.3 二值化数据
    • 2.4 继续预训练

1. 先决条件

  • 从源码安装Fairseq
  • 安装transformers

脚本在https://github.com/jazzisfuture/FineTuningXLM-R
平行语料 https://www.aliyundrive.com/s/nBX6YRA
pretrained模型 xlmr-base xlmr-large

2. 流程

简化流程

  1. script/tokenize_para.py
  2. script/split_file.sh
  3. script/gen.sh
  4. 修改config文件内的data和pretraing模型位置
  5. script/finetuning.sh

2.1 数据集处理

使用huggingface transformers的tokenizer进行数据处理

XLM-R TLM 训练时模型的输入形式为

为了对模型进行继续预训练我们要将平行语料处理为
<s> a</s></s>b</s>的形式
Transformers的tokenizer提供了这将两个句子处理为TLM输入的能力

tokenizer.tokenize(the_data,add_special_tokens=True)

处理语料的core code

def xlm_tok(data,fout):fout = open(fout, 'w', encoding='utf-8')tok = AutoTokenizer.from_pretrained("xlm-roberta-base")for line in tqdm(data):word_pieces = tok.tokenize(line,add_special_tokens=True)new_line = " ".join(word_pieces)fout.write('{}\n'.format(new_line))fout.close()

2.2 划分数据集

valid 与 test 各为5k句 剩下的为train
脚本来自facebookresearch/XLM

pair=zh-en
PARA_PATH=where/is/you/data# 随机划分数据集
split_data() {get_seeded_random() {seed="$1"; openssl enc -aes-256-ctr -pass pass:"$seed" -nosalt </dev/zero 2>/dev/null};NLINES=`wc -l $1  | awk -F " " '{print $1}'`;echo "NLINES: $NLINES"NTRAIN=$((NLINES - 10000));NVAL=$((NTRAIN + 5000));echo $NTRAIN $NVALshuf --random-source=<(get_seeded_random 42) $1 | head -$NTRAIN             > $2;shuf --random-source=<(get_seeded_random 42) $1 | head -$NVAL | tail -5000  > $3;shuf --random-source=<(get_seeded_random 42) $1 | tail -5000                > $4;
}
split_data $PARA_PATH/$pair.spm.all $PARA_PATH/$pair.train $PARA_PATH/$pair.valid $PARA_PATH/$pair.test

2.3 二值化数据

使用Fairseq的二值化

base=/where/is/your/data
fairseq-preprocess \--only-source \--srcdict $base/xlmr.base/dict.txt \--trainpref $base/data/zh-en.train \--validpref $base/data/zh-en.valid \--testpref $base/data/zh-en.test \--destdir data-bin/fintuning \--workers 20

2.4 继续预训练

使用fairseq的继续预训练需要从源码构建fairseq
使用pip安装的fairseq无法使用fairseq-hydra-train
使用fairseq-hydra-train需要一个config文件
如果提示没有yaml包的话 需要安装pyyaml

fairseq-hydra-train -m --config-dir /where/is/your/config/file \
--config-name finetuning_xlmr.yaml #config文件名
common:fp16: truelog_format: jsonlog_interval: 200model:_name: roberta # 使用robeta的原因时XLMR也是基于RoBERTamax_positions: 512dropout: 0.1attention_dropout: 0.1checkpoint:no_epoch_checkpoints: true# 需要继续预训练或微调的模型文件restore_file: /home/featurize/finetuningXlmr/xlmr.base/model.pttask:_name: masked_lm# 二值化数据后的目录data: /home/featurize/finetuningXlmr/data-bin/fintuningsample_break_mode: completetokens_per_sample: 512criterion: masked_lmdataset:batch_size: 16# max_tokens: 50ignore_unused_valid_subsets: trueskip_invalid_size_inputs_valid_test: trueoptimizer:_name: adamweight_decay: 0.01adam_betas: (0.9,0.98)adam_eps: 1e-06lr_scheduler:_name: polynomial_decaywarmup_updates: 10000optimization:clip_norm: 0lr: [0.0005]max_update: 125000update_freq: [16]

更多的微调config详见https://github.com/pytorch/fairseq/tree/main/examples/roberta

使用Fairseq微调预训练模型相关推荐

  1. 用huggingface.transformers在文本分类任务(单任务和多任务场景下)上微调预训练模型

    诸神缄默不语-个人CSDN博文目录 transformers官方文档:https://huggingface.co/docs/transformers/index AutoModel文档:https: ...

  2. 预训练模型微调 | 一文带你了解Adapter Tuning

    来源: AINLPer微信公众号(每日干货分享!!) 编辑: ShuYini 校稿: ShuYini 时间: 2022-10-23 引言  前几天的一篇文章,给大家介绍了预训练模型的微调方法Promp ...

  3. Pytorch:NLP 迁移学习、NLP中的标准数据集、NLP中的常用预训练模型、加载和使用预训练模型、huggingface的transfomers微调脚本文件

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) run_glue.py微调脚本代码 python命令执行run ...

  4. 预训练模型-从BERT原理到BERT调包和微调

    一.BERT原理 BERT取名来自 Bidirectional Encoder Representations from Transformers.架构为:预训练 + fine-tuning(对于特定 ...

  5. 直播 | ACL 2021论文解读:基于对抗学习的事件抽取预训练模型

    「AI Drive」是由 PaperWeekly 和 biendata 共同发起的学术直播间,旨在帮助更多的青年学者宣传其最新科研成果.我们一直认为,单向地输出知识并不是一个最好的方式,而有效地反馈和 ...

  6. 谈谈NLP下一个主战场:万亿参数的预训练模型!

    自从BERT诞生以来,各大互联网巨头之间就展开了预训练语言模型军备竞赛,XLNet.ERNIE.RoBERTa.T5.GPT-3.... 但当事情进展到号称自己是zero-shot learner的G ...

  7. BERT预训练模型的使用

    当下NLP中流行的预训练模型 BERT GPT GPT-2 Transformer-XL XLNet XLM RoBERTa DistilBERT ALBERT T5 XLM-RoBERTa BERT ...

  8. Hugging Face 中文预训练模型使用介绍及情感分析项目实战

    Hugging Face 中文预训练模型使用介绍及情感分析项目实战 Hugging Face 一直致力于自然语言处理NLP技术的平民化(democratize),希望每个人都能用上最先进(SOTA, ...

  9. 《智源社区周刊:预训练模型》第2期:Facebook用“预微调”改进预训练性能、再议GPT-3中的东方主义偏见...

    超大规模预训练模型是当前人工智能领域研究的热点,为了帮助研究与工程人员了解这一领域的进展和资讯,智源社区整理了第2期<智源社区周刊:预训练模型>,从论文推荐.研究动态.热点讨论等几个维度推 ...

最新文章

  1. opencv 修改图像数值_opencv 修改图像数值_Python中使用OpenCV读取像素
  2. ATSS : 目标检测的自适应正负anchor选择,很扎实的trick | CVPR 2020
  3. python 在互联网应用是如此强大
  4. 将MongoDB与Morphia结合使用
  5. html网页制作图案,巧用CSS滤镜做图案文字-网页设计,HTML/CSS
  6. 2018程序员最佳ssh免费登陆工具
  7. java get与post区别_HTTP请求(GET与POST区别)和响应
  8. 索引的使用规则和设计考虑
  9. 基于范围的for循环
  10. proe把零件转化为stl在unity中使用注意事项
  11. matlab 图像噪声去除,基于Matlab的图像去除噪声的研究
  12. 谷歌浏览器下载更新(附带谷歌安装包百度云)
  13. SpringBoot非官方教程 | 终章:文章汇总(转载https://blog.csdn.net/forezp/article/details/70341818 本文出自方志朋的博客)
  14. Isight多学科参数优化软件模块构成
  15. 暴力破解带有密码的压缩文件
  16. 我是如何一步步获取房东的WiFi后台管理密码的【社工思路】
  17. Win7屏幕显示方向怎么调整为竖屏显示操作教学分享
  18. 【Spring】Spring教程入门到精通
  19. 红帽企业Linux发行日期
  20. 图像处理学习笔记之——绪论

热门文章

  1. SiTime硅晶振 高性能MEMS时钟方案在5G中的应用
  2. 林斯坦 小学生学计算机,技术支持下的小学生数学有意义学习研究.doc
  3. 电销行业通讯难题的解决方案出来了!
  4. Windows Workflow Foundation(1)- Windows Workflow Foundation 概述
  5. crmeb打通版开源微信公众号小程序商城框架源码
  6. 【按键精灵源码】一个稍微复杂点的脚本界面
  7. 微信个人号客服系统淘宝客发单机器人sdk服务端接口列表
  8. pdf文件流转图片流方法(PDF文档所有页全部转换为图片 )
  9. IDEA中pom.xml文件图标变红,而不是蓝问题
  10. excel一个表格分成多个怎么做?