-
数据为中英数据集,使用subword-nmt工具包对数据进行初步分词处理
-
subword-nmt learn-joint-bpe-and-vocab -i news-commentary-v13.zh-en.en -o .\code_en.file --write-vocabulary voc_en.txt subword-nmt learn-joint-bpe-and-vocab -i news-commentary-v13.zh-en.zh -o .\code_zh.file --write-vocabulary voc_zh.txt
这一步会生成词典
-
subword-nmt apply-bpe -i news-commentary-v13.zh-en.en -c .\code_en.file -o en.txt subword-nmt apply-bpe -i news-commentary-v13.zh-en.zh -c .\code_zh.file -o zh.txt
这一步使用词典对原始数据进行分词
-
-
经过subword-nmt的初始处理后,需要对数据进行word->id映射,截断和pad,生成训练集和测试集等,具体对应的code文件为 DataProcesser.py
根据batch_size获取数据,具体对应的code文件为BatchDataGenerater.py
模型的架构主要如下:
- Transformer
- TransformerEncoder
- token embedding + pos embedding
- EncoderLayer * 6
- SelfMultiHeadAttention
- Add+Norm
- FeedForward
- Add+Norm
- TransformerDecoder
- token embedding + pos embedding
- EncoderLayer * 6
- SelfMultiHeadAttention
- Add+Norm
- CrossMultiHeadAttention
- Add+Norm
- FeedForward
- Add+Norm
- FC
- TransformerEncoder
具体对应的code文件为Models.py
-
attention mask
- 在encoder中对pad部分进行mask
- 在decoder中对pad和后面的部分进行mask,为两个mask的或
- 但是在inference阶段可以不对encoder进行pad的mask
对应的code为utils.py中的pad_mask()和subsequent_mask()
-
Loss mask
- 对pad部分进行loss的mask
对应的code为utils.py中的MaskedSoftmaxCELoss
seq2seq模型的训练方式
- beam search
- 数据并行的beam search,以batch为单位进行,删除一个batch中已经生成的句子,减少运算量,并设置删除前和删除后index映射。并行的beam search可以大大提高推断的速度。对应utils.py中的beam_search()
- 数据串行的beam search,一条一条的生成,速度太慢。具体对应utils.py中最后被注释的部分。
- bleu值的计算
- 采用4-gram