使用Fairseq微调预训练模型
使用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. 流程
简化流程
- script/tokenize_para.py
- script/split_file.sh
- script/gen.sh
- 修改config文件内的data和pretraing模型位置
- 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微调预训练模型相关推荐
- 用huggingface.transformers在文本分类任务(单任务和多任务场景下)上微调预训练模型
诸神缄默不语-个人CSDN博文目录 transformers官方文档:https://huggingface.co/docs/transformers/index AutoModel文档:https: ...
- 预训练模型微调 | 一文带你了解Adapter Tuning
来源: AINLPer微信公众号(每日干货分享!!) 编辑: ShuYini 校稿: ShuYini 时间: 2022-10-23 引言 前几天的一篇文章,给大家介绍了预训练模型的微调方法Promp ...
- Pytorch:NLP 迁移学习、NLP中的标准数据集、NLP中的常用预训练模型、加载和使用预训练模型、huggingface的transfomers微调脚本文件
日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) run_glue.py微调脚本代码 python命令执行run ...
- 预训练模型-从BERT原理到BERT调包和微调
一.BERT原理 BERT取名来自 Bidirectional Encoder Representations from Transformers.架构为:预训练 + fine-tuning(对于特定 ...
- 直播 | ACL 2021论文解读:基于对抗学习的事件抽取预训练模型
「AI Drive」是由 PaperWeekly 和 biendata 共同发起的学术直播间,旨在帮助更多的青年学者宣传其最新科研成果.我们一直认为,单向地输出知识并不是一个最好的方式,而有效地反馈和 ...
- 谈谈NLP下一个主战场:万亿参数的预训练模型!
自从BERT诞生以来,各大互联网巨头之间就展开了预训练语言模型军备竞赛,XLNet.ERNIE.RoBERTa.T5.GPT-3.... 但当事情进展到号称自己是zero-shot learner的G ...
- BERT预训练模型的使用
当下NLP中流行的预训练模型 BERT GPT GPT-2 Transformer-XL XLNet XLM RoBERTa DistilBERT ALBERT T5 XLM-RoBERTa BERT ...
- Hugging Face 中文预训练模型使用介绍及情感分析项目实战
Hugging Face 中文预训练模型使用介绍及情感分析项目实战 Hugging Face 一直致力于自然语言处理NLP技术的平民化(democratize),希望每个人都能用上最先进(SOTA, ...
- 《智源社区周刊:预训练模型》第2期:Facebook用“预微调”改进预训练性能、再议GPT-3中的东方主义偏见...
超大规模预训练模型是当前人工智能领域研究的热点,为了帮助研究与工程人员了解这一领域的进展和资讯,智源社区整理了第2期<智源社区周刊:预训练模型>,从论文推荐.研究动态.热点讨论等几个维度推 ...
最新文章
- opencv 修改图像数值_opencv 修改图像数值_Python中使用OpenCV读取像素
- ATSS : 目标检测的自适应正负anchor选择,很扎实的trick | CVPR 2020
- python 在互联网应用是如此强大
- 将MongoDB与Morphia结合使用
- html网页制作图案,巧用CSS滤镜做图案文字-网页设计,HTML/CSS
- 2018程序员最佳ssh免费登陆工具
- java get与post区别_HTTP请求(GET与POST区别)和响应
- 索引的使用规则和设计考虑
- 基于范围的for循环
- proe把零件转化为stl在unity中使用注意事项
- matlab 图像噪声去除,基于Matlab的图像去除噪声的研究
- 谷歌浏览器下载更新(附带谷歌安装包百度云)
- SpringBoot非官方教程 | 终章:文章汇总(转载https://blog.csdn.net/forezp/article/details/70341818 本文出自方志朋的博客)
- Isight多学科参数优化软件模块构成
- 暴力破解带有密码的压缩文件
- 我是如何一步步获取房东的WiFi后台管理密码的【社工思路】
- Win7屏幕显示方向怎么调整为竖屏显示操作教学分享
- 【Spring】Spring教程入门到精通
- 红帽企业Linux发行日期
- 图像处理学习笔记之——绪论
热门文章
- SiTime硅晶振 高性能MEMS时钟方案在5G中的应用
- 林斯坦 小学生学计算机,技术支持下的小学生数学有意义学习研究.doc
- 电销行业通讯难题的解决方案出来了!
- Windows Workflow Foundation(1)- Windows Workflow Foundation 概述
- crmeb打通版开源微信公众号小程序商城框架源码
- 【按键精灵源码】一个稍微复杂点的脚本界面
- 微信个人号客服系统淘宝客发单机器人sdk服务端接口列表
- pdf文件流转图片流方法(PDF文档所有页全部转换为图片 )
- IDEA中pom.xml文件图标变红,而不是蓝问题
- excel一个表格分成多个怎么做?