mosesdecoder/tokenizer.perl 使用说明

tokenizer.perl是Moses统计机器翻译系统中的一个工具,用于英文和德文的分词。默认情况下,它将标点符号分开并转义引号,但不会分割连字符。通过添加参数,如`-l`指定语言,`-a`进行激进的连字符分割,或`-no-escape`禁止转义特殊字符,用户可以自定义分词行为。该工具有助于预处理文本数据,为机器翻译和其他自然语言处理任务做准备。

tokenizer.perl是统计机器翻译系统moses的一个小工具,可以用来对英文德文等进行分词。

使用方法:

$ perl tokenizer.perl -l en < [待分词文件] > [分词结果]

其中:  -l en 表示的输入的文件是英文 

 例如:

$ perl tokenizer.perl -l en < train.en > train.tok.en

参数说明:

if ($HELP)
{
	print "Usage ./tokenizer.perl (-l [en|de|...]) (-threads 4) < textfile > tokenizedfile\n";
        print "Options:\n";
        print "  -q     ... quiet.\n";
        print "  -a     ... aggressive hyphen splitting.\n";
        print "  -b     ... disable Perl buffering.\n";
        print "  -time  ... enable processing time calculation.\n";
        print "  -penn  ... use Penn treebank-like tokenization.\n";
        print "  -protected FILE  ... specify file with patters to be protected in tokenisation.\n";
	print "  -no-escape ... don't perform HTML escaping on apostrophy, quotes, etc.\n";
	exit;
}

解释:

不指定任何参数的话会默认认为是英文,同时把标点分开,把引号转成 &apos。但是连字符是不进行分割的。

$ echo "A Republican 'strategy' to counter the re-election of Obama." | perl ~/script/mosesdecoder/scripts/tokenizer/tokenizer.perl

 >>>A Republican &apos; strategy &apos; to counter the re-election of Obama .

-l : 指定的是语言,一共支持哪些语言我也不太清楚,只知道英语和德语

-a:会把连字符的单词分开,同时也会把标点符号分开,例如:

$ echo "A Republican strategy to counter the re-election of Obama." | perl ~/script/mosesdecoder/scripts/tokenizer/tokenizer.perl -a

>>> A Republican strategy to counter the re @-@ election of Obama .

-no-escape:会只分开标点,连字符和引号都不进行转义:

$ echo "A Republican 'strategy' to counter the re-election of Obama." | perl ~/script/mosesdecoder/scripts/tokenizer/tokenizer.perl -no-escape


>>>A Republican ' strategy ' to counter the re-election of Obama .

暂时记录到这里,遇到新问题会补充。

ps:

# detokenizer
cat train.en | perl ~/script/mosesdecoder/scripts/tokenizer/detokenizer.perl -threads 40 > train.raw.en

# tokenizer
perl ~/script/mosesdecoder/scripts/tokenizer/tokenizer.perl -l en -no-escape < train.raw.en > train.tok.en

六、进入训练七、使用tensorbord查看训练的结果八、使用模型预测1.生成式翻译2.交互式翻译九、译文处理总结前言        使用fairseq工具以及简单的中英文语料使用transfomer进行翻译任务。详细的方法参照文档 Command-line Tools — fairseq 0.12.2 documentation一、文件存放位置将中英文对照文件放入源文件位置:/root/Fairseq_Data/Origianl_Data/下的zh.txt与en.txt二、数据预处理1.对中文进行分词操作1.在/root/Fairseq_Data目录下新建文件夹ZH_EN_Token,此文件存放经过plt分词后的中文与经过normal与Token之后的英文。2.在/root/fairseq/examples/translation/utils 文件夹中的Tokener.py 是对中文进行分词的python程序。        示例代码如下:cd /root/fairseq/examples/translation/utilspython Tokener.pyAI生成项目3.执行完毕之后会在 /root/Fairseq_Data/ZH_EN_Token 目录下生成zh_Token.txt。2.对英文数据操作2.1 Normalize punctuation 1.进入到 /root/fairseq/examples/translation 目录下使用mosesdecoder文件中的脚本对英文数据进行处理#进入到指定目录cd /root/fairseq/examples/translationAI生成项目c运行 2.使用/normalize-punctuation.perl 脚本对数据操作 perl /root/fairseq/example/translation/mosesdecoder/scripts/tokenizer/normalize-punctuation.perl -l en </root/Fairseq_Data/Origianl_Data/en.txt > /root/Fairseq_Data/ZH_EN_Token/norm.enAI生成项目3.处理完成后会在/root/Fairseq_Data/ZH_EN_Token/的目录下生成norm.en文件2.Tokenizer1.进入到 /root/fairseq/examples/translation 目录下使用mosesdecoder文件中的脚本对英文数据进行处理#进入到指定目录cd /root/fairseq/examples/translationAI生成项目c运行2.使用tokenizer.perl -a -l 命令对已经noemalize好的英文数据进行分词梳处理perl /root/fairseq/examples/translation/mosesdecoder/scripts/tokenizer/tokenizer.perl -a -l en </root/Fairseq_Data/ZH_EN_Token/norm.en > /root/Fairseq_Data/ZH_EN_Token/norm.tok.enAI生成项目3.处理完毕之后会在/root/Fairseq_Data/ZH_EN_Token文件下生成norm.tok.en文件三、Train Test Valid 文件的划分        因为用到的工具类都存放为/root/fairseq/examples/translation/utils位置,所以需要进到/root/fairseq/examples/translation/utils目录下。#进入到指定位置/root/fairseq/examples/translation/utils#执行文件划分程序python prepare_6_files.pyAI生成项目执行完毕之后会在 /root/Fairseq_Data/Split_Train_Test_Valid 文件夹下生成六个文件。四、Sub-BEP处理1.将/root/fairseq/examples/translation/下 subword-nmt文件的路径变为动态路径方便后续使用export PYTHONPATH=$(pwd)/subword-nmt:$PYTHONPATHAI生成项目2.对/root/Fairseq_Data/Split_Train_Test_Valid 文件下的 train.zh和train.en进行处理,创建词汇表#进入指定目录cd /root/Fairseq_Data/Split_Train_Test_Valid#创建词汇表python -m learn_joint_bpe_and_vocab --input train.zh train.en -s 32000 -o bpe.codes --write-vocabulary bpe.vocab.zh bpe.vocab.enAI生成项目3.运行成功后会在/root/Fairseq_Data/Split_Train_Test_Valid文件夹下生成三个文件1.bpe.vocab.zh 2.bpe.vocab.en 3.bpe.codes4.将字节对编码应用于我们的训练、开发和测试数据mkdir ne_WIPO_BPE_zh_enpython -m apply_bpe -c bpe.codes --vocabulary bpe.vocab.zh --vocabulary-threshold 50 < train.zh > ne_WIPO_BPE_zh_en/train.zhpython -m apply_bpe -c bpe.codes --vocabulary bpe.vocab.en --vocabulary-threshold 50 < train.en > ne_WIPO_BPE_zh_en/train.enpython -m apply_bpe -c bpe.codes --vocabulary bpe.vocab.zh --vocabulary-threshold 50 < valid.zh > ne_WIPO_BPE_zh_en/valid.zhpython -m apply_bpe -c bpe.codes --vocabulary bpe.vocab.en --vocabulary-threshold 50 < valid.en > ne_WIPO_BPE_zh_en/valid.enpython -m apply_bpe -c bpe.codes --vocabulary bpe.vocab.zh --vocabulary-threshold 50 < test.zh > ne_WIPO_BPE_zh_en/test.zhpython -m apply_bpe -c bpe.codes --vocabulary bpe.vocab.en --vocabulary-threshold 50 < test.en > ne_WIPO_BPE_zh_en/test.enAI生成项目5.运行结束后会在 /root/Fairseq_Data/Split_Train_Test_Valid 文件夹下生成ne_WIPO_BPE_zh_en 文件,其中生成六个文件五、二值化处理​ 1.退回到需要退到fairseq文件夹下cd /root/fairseqAI生成项目 2.执行以下命令行TEXT=/root/Fairseq_Data/Split_Train_Test_Valid/ne_WIPO_BPE_zh_enfairseq-preprocess --source-lang zh --target-lang en --trainpref $TEXT/train --validpref $TEXT/valid --testpref $TEXT/test --destdir data-bin/ne_WIPO.tokenized.zh-en --workers 20AI生成项目​ 3.运行成功之后会在在data-bin下会生成文件夹ne_WIPO.tokenized.zh-en文件夹下存放生成的二值化数据六、进入训练1.新建screen 并进入screen -S trainscreen -r trainAI生成项目2.激活建立的fairseq虚拟环境conda activate fairseqAI生成项目3.进入到fairseq目录下cd /root/fairseqAI生成项目4.开始训练 CUDA_VISIBLE_DEVICES=7 fairseq-train data-bin/ne_WIPO.tokenized.zh-en --arch transformer --optimizer adam --adam-betas '(0.9, 0.98)' --clip-norm 0.0 --lr 5e-4 --lr-scheduler inverse_sqrt --warmup-updates 4000 --dropout 0.3 --weight-decay 0.0001 --criterion label_smoothed_cross_entropy --label-smoothing 0.1 --max-tokens 4096 --eval-bleu --eval-bleu-args '{"beam": 5, "max_len_a": 1.2, "max_len_b": 10}' --eval-bleu-detok moses --eval-bleu-remove-bpe --eval-bleu-print-samples --best-checkpoint-metric bleu --maximize-best-checkpoint-metric --no-progress-bar --log-interval 20 --save-dir checkpoints_WIPO --keep-interval-updates 20 --tensorboard-logdir Fairseq_Data-transformer | tee Fairseq_Data-transformer.logAI生成项目5.Transfomer的结构6.训练过程七、使用tensorbord查看训练的结果1.进入到指定好的保存到日志保存的上级目录cd /root/fairseqAI生成项目Delphi2.输入查看命令tensorboard --logdir=./Fairseq_Data-transformerAI生成项目3.控制台输出4.tensorbord监控在浏览器中输入 http://localhost:6006/ 查看详细指标变化blue不断上升 loss不断下降 模型训练正常。八、使用模型预测训练好模型后,可以使用fairseq-generate(用于二进制数据)或fairseq-interactive(用于原始文本)生成翻译1.生成式翻译1.使用生成式翻译需要用到fairseq-generate,翻译的语料是之前已经准备好在 /root/fairseq/data-bin/ne_WIPO.tokenized.zh-en  下的文件
最新发布
08-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值