XLM官方源码

我是linux系统,显卡gtx 1080 ti,环境是cuda9.2,pytorch 1.4.0,apex 0.1,无法使用fp16。并且由于pytorch版本问题,一些函数和类型有所变动,所以会有数不清的警告(不影响训练)。例如torch.unit8应该改为torch.bool,如果pytorch版本在1.1.0及以前不会有这个警告。但是因为配置环境已经花费了大半天时间,1.4.0就凑合着用吧。

官方测试过的pytorch版本为0.4和1.0。

PyTorch (currently tested on version 0.4 and 1.0)

数据处理

MLM只需要单语数据处理,TLM需要双语数据处理。

强调,官方流程主要是用来参考要进行哪些处理,具体的处理方式可以自己灵活选择,主要是保证最后处理得到的数据格式保持一致。

本文用于博主记录流程,和官方文档并无区别。

第一步:数据准备

数据下载,分词,划分训练,验证,测试集

tools

该文件下主要包含分词脚本tokenize.sh,对日语采用Japanese KyTea tokenizer,中文采用Chinese Stanford segmenter,泰文采用Thai PythaiNLP tokenizer,其他语言采用Moses tokenizer。

此外还包含lowercase_and_remove_accent.py,猜测是处理大小写和词根词缀之类的?

下载维基百科单语数据,提取数据并依次调用tokenize.sh和lowercase_and_remove_accent.py,随机拆分为训练集、验证集、测试集

./get-data-wiki.sh lg

下载双语数据对,主要流程同单语

./get_data_para.sh src-tgt &

也就是说,咱们首先的工作就是要得到分好词并划分好训练、验证、测试集的单语数据或平行语料,具体做法(比如分词器)不一定要和官方一致。博主使用的是自己准备的数据。

第二步:BPE

官方选择的是fastBPE,我用的是subword-nmt。

从每种语言的训练集中抽取一百万句子,组成学习bpe的训练文件bpe.train。

# build the training set for BPE tokenization (50k codes)
OUTPATH=data/processed/XLM_en_zh/50k
mkdir -p $OUTPATH
shuf -r -n 10000000 data/wiki/train.en >> $OUTPATH/bpe.train
shuf -r -n 10000000 data/wiki/train.zh >> $OUTPATH/bpe.train

learn BPE。

OUTPATH=data/processed/XLM_en/30k  # path where processed files will be stored
FASTBPE=tools/fastBPE/fast  # path to the fastBPE tool# learn bpe codes on the training set (or only use a subset of it)
$FASTBPE learnbpe 30000 data/wiki/txt/en.train > $OUTPATH/codes

对每个文件apply BPE,并将数据文件二值化,以节省加载时的内存

单语

$FASTBPE applybpe $OUTPATH/train.en data/wiki/txt/en.train $OUTPATH/codes &
$FASTBPE applybpe $OUTPATH/valid.en data/wiki/txt/en.valid $OUTPATH/codes &
$FASTBPE applybpe $OUTPATH/test.en data/wiki/txt/en.test $OUTPATH/codes &cat $OUTPATH/train.en | $FASTBPE getvocab - > $OUTPATH/vocab &# This will create three files: $OUTPATH/{train,valid,test}.en.pth
# After that we're all set
python preprocess.py $OUTPATH/vocab $OUTPATH/train.en &
python preprocess.py $OUTPATH/vocab $OUTPATH/valid.en &
python preprocess.py $OUTPATH/vocab $OUTPATH/test.en &

双语,以下是官方示例,但经博主验证有些小问题,应该将$OUTPATH/$pair.$lg.$split 更改为 $OUTPATH/$split.$pair.$lg 才符合训练时要求的文件命名。

pair=en-zhfor lg in $(echo $pair | sed -e 's/\-/ /g'); dofor split in train valid test; do$FASTBPE applybpe $OUTPATH/$pair.$lg.$split data/wiki/para/$pair.$lg.$split $OUTPATH/codespython preprocess.py $OUTPATH/vocab $OUTPATH/$pair.$lg.$splitdone
done

训练模型

只训练MLM

python train.py## main parameters
--exp_name xlm_en_zh                       # experiment name
--dump_path ./dumped                       # where to store the experiment## data location / training objective
--data_path $OUTPATH                       # data location
--lgs 'en-zh'                              # considered languages
--clm_steps ''                             # CLM objective (for training GPT-2 models)
--mlm_steps 'en,zh'                        # MLM objective## transformer parameters
--emb_dim 1024                             # embeddings / model dimension (2048 is big, reduce if only 16Gb of GPU memory)
--n_layers 12                              # number of layers
--n_heads 16                               # number of heads
--dropout 0.1                              # dropout
--attention_dropout 0.1                    # attention dropout
--gelu_activation true                     # GELU instead of ReLU## optimization
--batch_size 32                            # sequences per batch
--bptt 256                                 # sequences length  (streams of 256 tokens)
--optimizer adam,lr=0.0001                 # optimizer (training is quite sensitive to this parameter)
--epoch_size 300000                        # number of sentences per epoch
--max_epoch 100000                         # max number of epochs (~infinite here)
--validation_metrics _valid_mlm_ppl        # validation metric (when to save the best model)
--stopping_criterion _valid_mlm_ppl,25     # stopping criterion (if criterion does not improve 25 times)
--fp16 true                                # use fp16 training## There are other parameters that are not specified here (see [here](https://github.com/facebookresearch/XLM/blob/master/train.py#L24-L198)).

如果要加上TLM一起训练,则在--mlm_steps参数后加上语言对(这里还需要弄清楚语言对是否和数据处理时保存位置有关)

--mlm_steps 'en,zh,en-zh'

博主最后的训练命令如下(有块卡被别的程序占用了)

export NGPU=7;CUDA_VISIBLE_DEVICES=0,1,2,4,5,6,7 nohup python -m torch.distributed.launch --nproc_per_node=7 train.py \
--exp_name xlm_mn_zh \
--dump_path ./dumped \
--data_path $OUTPATH \
--lgs 'mn-zh' \
--clm_steps '' \
--mlm_steps 'mn,zh,mn-zh' \
--emb_dim 1024 \
--n_layers 12  \
--n_heads 16  \
--dropout 0.1 \
--attention_dropout 0.1 \
--gelu_activation true \
--batch_size 8 \
--bptt 256 \
--optimizer adam,lr=0.0001 \
--epoch_size 300000 \
--max_epoch 100000 \
--validation_metrics _valid_mlm_ppl \
--stopping_criterion _valid_mlm_ppl,25 \
--fp16 false &

成功运行。(nohup xx &的用法是把进程挂后台,并且输出内容会重定向到nohup.out文件中)

使用MLM和TLM训练XLM相关推荐

  1. 简单到令人沮丧的替代MLM的预训练任务?

    EMNLP2021有一篇论文标题名为Frustratingly Simple Pretraining Alternatives to Masked Language Modeling,翻译过来就是「简 ...

  2. 万字解读:预训练模型最新综述!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale学术 作者:太子长琴,Datawhale意向成员 如何在有限数据下训练出高效的 ...

  3. 跨域预训练语言模型(XLM)

    XLM来自于Facebook ai的论文<Cross-lingual Language Model Pretraining>.目前多数语言模型都是单语义(monolingual)模型,比如 ...

  4. NLP实践 | 用自己的语料进行MLM预训练

    每天给你送来NLP技术干货! 编辑:AI算法小喵 1. 关于MLM 1.1 背景 作为 Bert 预训练的两大任务之一,MLM 和 NSP 大家应该并不陌生.其中,NSP 任务在后续的一些预训练任务中 ...

  5. 垂直领域出海,多语言预训练好使吗?

    ©PaperWeekly 原创 · 作者|刘世兴.程任清 单位|腾讯游戏知几AI团队 研究方向|自然语言处理 简介 垂直领域业务出海,往往面临着新语种.低资源语言数据不足等多语言挑战,其中一条技术路线 ...

  6. 三种Cross-lingual模型 (XLM, XLM-R, mBART)详解

    本文将详述三种Cross-lingual模型,按照其在Arxiv上发表论文的时间,分别是XLM(2019/1/22).XLM-R(2019/11/5).mBART(2020/1/22),有意思的是这三 ...

  7. 自然语言处理NLP——ERNIE-M:基于回译机制的“预训练-微调”多语言模型

    目录 系列文章目录 一.背景介绍 1.多语言任务 1.1 多语言任务定义 1.2 多语言任务难题 2.多语言模型 2.1 多语言模型定义与原理 2.2 多语言模型困难 3.论文简介 3.1 背景与开发 ...

  8. face - Cross-lingual Language Model Pretraining ---- XLM

    跨语言预训练模型(XLM) 摘要 Shared sub-word vocabulary 跨语言模型 代码生成跨语言句子表征 文章翻译 文章链接: Cross-lingual Language Mode ...

  9. XLM解读(论文 + PyTorch源码)

    这篇论文是Facebook在BERT的基础上发展出来的Cross-Lingual版本,即多语的.BERT的github上实际上也有一个多语版本的,但却没有提到是怎么训练的,也没有任何的信息.这里的XL ...

  10. 深入理解深度学习——BERT派生模型:XLM(Cross-lingual Language Model)

    分类目录:<深入理解深度学习>总目录 BERT本应在语义理解上具有绝对优势,但其训练语料均为英语单语,受限于此,早期的BERT只在英语文本理解上有优势.随着全球化进程的加速,跨语言的预训练 ...

最新文章

  1. Python培训中有哪些是必须学的运算符
  2. 从源码分析DEARGUI之add_text_point
  3. Bootloader的基本概念
  4. boost::mpl模块实现logical相关的测试程序
  5. 3月份最热门 JS开源项目排行
  6. jmeter 跳板机_Jmeter接口测试进阶
  7. python必看经典书籍:笨办法学python
  8. ARM产品二十年路线图
  9. Atitit.http httpclient实践java c# .net php attilax总结
  10. androidstudio打包apk 文件_Android 缩小apk体积过程记录
  11. 【深度解析】Google第二代深度学习引擎TensorFlow开源
  12. TextBox的样式改成Lable
  13. win10安装steam有损计算机,Win10专业版无法安装steam软件怎么办?
  14. 移动应用的必杀技:超级app+轻应用
  15. 新浪微博应用开发者协议真坑爹啊!
  16. 基因表达相关性——笔记
  17. Typora最后的免费版本
  18. matlab c2d的c语言实现,Matlab c2d()函数的用法
  19. MATLAB_数值计算_线性方程组
  20. Java小白 前端后端开发 环境搭建【jdk+idea+webstorm+maven+nodejs+vue+mysql】

热门文章

  1. 用C语言编写贪吃蛇小游戏
  2. 台达伺服b3设置_台达伺服调机步骤简易说明书.pdf
  3. 八 关于电机驱动芯片L298N使用心得
  4. c语言从入门到精通的几个阶段
  5. 视频教程-WebService实战讲解课程-Java
  6. testbench通用模板
  7. 单片机的c语言程序控制直流电机,(单片机控制直流电机)毕业论文.doc
  8. 2021年游戏项目的十大编程语言:C++、Java、JavaScript、Python均在榜上
  9. 怎么让联想计算机升级,如何刷bios,教您联想电脑如何刷bios
  10. Python基础 day4