fairseq学习博客总结

使用fairseq从头开始训练一个中英神经机器翻译模型 # 强烈安利
手把手教你用fairseq训练一个NMT机器翻译系统
实习日记(二):序列建模工具包——Fairseq
FaceBook-NLP工具Fairseq漫游指南(1)—命令行工具
FaceBook-NLP工具Fairseq漫游指南(2)—扩展模型

使用Fairseq进行机器翻译 # 整个训练流程
fairseq的使用 # 整个流程 参数介绍 优化模型

fairseq笔记 # 详细的预处理代码

fairseq 官方教程
fairseq | 创建batch iterator部分逻辑源码阅读
fairseq | fairseq beam search 源码阅读笔记

fairseq-generate data-bin --path checkpoints/checkpoint_best.pt --remove-bpe

会发现生成的结果文档顺序与原文不一致,包含了解码日志(log)、原文、译文、打分等信息。这是因为在生成batch的时候,会根据句长或句token数对数据进行过滤,和size排序,即根据句长重新排序了,短句在前,长句在后,同一个batch中,数据长度相当。设置max_sentence后,超长的句子直接丢弃。

如果想得到正序文档,有以下两种方式。

awk之第一列顺序不变对第二列进行排序

awk 'NR>1&&i!=$1{for(j=0;j++<asorti(a,b);)print i,b[j];delete a}{i=$1;a[$2]}' bestbeam8-4.txt  <(echo)
 
 #如果报错
 #sudo apt-get install gawk


修改fairseq/fairqseq/tasks/fairseq_task.py文件
在这里插入图片描述
这样在生成indices的时候就是正序的啦~

fairseq的命令函数

fairseq preprocess数据预处理,建立字典和训练数据和二值化数据
fairseq train训练模型
fairseq gennerate使用训练的模型翻译预处理后的数据
fairseq generate-lines使用训练后的数据翻译一行文本
fairseq interactive交互式生成译文,可以翻译户输入源语文件
fairseq score翻译后的文本的BLEU得分
fairseq tofloat转化训练模型为CPU模型
fairseq optimize-fconv优化生成的全卷积模型

整理

(1)fairseq-preprocess

fairseq-preprocess --source-lang de --target-lang en \
    --trainpref iwslt14.tokenized.de-en/train \
    --validpref iwslt14.tokenized.de-en/valid \
    --testpref iwslt14.tokenized.de-en/test
CUDA_VISIBLE_DEVICES=1 fairseq-preprocess --source-lang zh --target-lang en \
    --trainpref nmt/data/corpus_32k_bpe/train \
    --validpref nmt/data/corpus_32k_bpe/valid \
    --testpref nmt/data/corpus_32k_bpe/test --joined-dictionary

fairseq-preprocess将文本数据转化为二进制文件,从train文本数据中构建词表,默认情况下将所有出现过的单词根据词频排序,如:dict.en.tx文件所示。
在这里插入图片描述

  • 构建的词表是一个单词和序号之间的一对一映射,这个序号是单词在词表中的下标位置。
  • 预处理命令在构建词表之后,会将文本数据转换为数值形式,也就是把文本中的每一个词,转换为对应的序号。之后,数值化的文本数据会被进一步编码,默认情况下使用Memory-Mapped IndexedDataset,这种数据编码方式不仅可以压缩文件大小,还可以根据索引进行随机读取,因此在训练的时候不需要加载全部数据,从而节约内存使用。

(2)fairseq-train

fairseq-train data-bin --arch transformer_iwslt_de_en \
        --max-tokens 4096 --max-update 30000 \
        --optimizer adam --lr-scheduler inverse_sqrt --lr 0.0007 \
        --criterion label_smoothed_cross_entropy --label-smoothing 0.1 \
        --no-progress-bar --save-interval-updates 1000 
fairseq-train data-bin/py_hz_pre
        --task translation --source-lang input --target-lang label 
        --arch fconv --optimizer adam --adam-betas '(0.9,0.98)' 
        --clip-norm 0.1 --lr 0.01 --lr-scheduler inverse_sqrt
        --warmup-updates 2000 --dropout 0.2
        --weight-decay 0.0001 --max-tokens 8000 
        --save-dir checkpoints --eval-bleu
CUDA_VISIBLE_DEVICES=1 nohup fairseq-train nmt/data/doc_data/context_agnostic/data-bin --arch transformer \
	--source-lang en --target-lang ru  \
    --optimizer adam  --lr 0.001 --adam-betas '(0.9, 0.98)' \
    --lr-scheduler inverse_sqrt --max-tokens 4096  --dropout 0.3 \
    --criterion label_smoothed_cross_entropy  --label-smoothing 0.1 \
    --max-update 200000  --warmup-updates 4000 --warmup-init-lr '1e-07' \
    --keep-last-epochs 10 --num-workers 8 \
	--save-dir nmt/models/doc_agnostic/checkpoints &

(3) fairseq-generate

fairseq-generate data-bin --path checkpoints/checkpoint_best.pt --remove-bpe
CUDA_VISIBLE_DEVICES=1 fairseq-generate nmt/data/v15news/data-bin \
    --path nmt/models/v15news/checkpo/checkpoint_best.pt \
    --batch-size 128 --beam 8 > nmt/data/v15news/result/bestbeam8-5.txt
#faiseq-generate someargs >result.txt将输出保存到文件
grep ^H result.txt | sort -n -k 2 -t '-' | cut -f 3

(4) fairseq-interactive

cat test.de | fairseq-interactive data-bin --path checkpoints/checkpoint_best.pt --remove-bpe

(5) fairseq generate-lines

DATA=data-bin/iwslt14.tokenized.de-en
fairseq generate-lines -sourcedict $DATA/dict.de.th7 -targetdict $DATA/dict.en.th7 -path trainings/fconv/model_best_opt.th7 -beam 10 -nbest 2
##优化模型
# Optional: optimize for generation speed
fairseq optimize-fconv -input_model trainings/fconv/model_best.th7 -output_model trainings/fconv/model_best_opt.th7
 
##翻译文本
# Translate some text
DATA=data-bin/iwslt14.tokenized.de-en
fairseq generate-lines -sourcedict $DATA/dict.de.th7 -targetdict $DATA/dict.en.th7 \
	-path trainings/fconv/model_best_opt.th7 -beam 10 -nbest 2

预训练模型Pre-trained models

fairseq generate -sourcelang en -targetlang fr -datadir data-bin/wmt14.en-fr -dataset newstest2014  -path wmt14.en-fr.fconv-cuda/model.th7 -beam 5 -batchsize 128 | tee /tmp/gen.out
 
# Word-level BLEU scoring:
grep ^H /tmp/gen.out | cut -f3- | sed 's/@@ //g' > /tmp/gen.out.sys
grep ^T /tmp/gen.out | cut -f2- | sed 's/@@ //g' > /tmp/gen.out.ref
fairseq score -sys /tmp/gen.out.sys -ref /tmp/gen.out.ref
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值