在做机器翻译任务时,如果除了基本的双语语料,还想添加一些额外的特征,如单词的词性等,具体代码需要怎么做?openmnt提供了接口,当我们使用时无需修改代码,只需要对输入文本的格式相应修改,openmnt读取的时候就能自动识别加入的额外特征
具体的输入格式为
word│feat1│feat2│...│featN
在每个单词的后面用│分割开单词与特征,可以增加多个特征,需要注意的是这里的│不是键盘上的I,它是一个特殊符号unicode character FFE8
完整的输入句子示例如下
it│C is│l not│l acceptable│l that│l ,│n with│l the│l help│l of│l the│l national│l bureaucracies│l ,│n parliament│C 's│l legislative│l prerogative│l should│l be│l made│l null│l and│l void│l by│l means│l of│l implementing│l provisions│l whose│l content│l ,│n purpose│l and│l extent│l are│l not│l laid│l down│l in│l advance│l .│n
openmnt会自动根据额外特征的值的数量来确定embedding size,如果想要自行设置,可以用训练命令的参数 -feat_vec_size可用于设置特征的embedding大小(这个参数对所有特征都有效,也就是说如果有多个额外的话,这个参数设置使得所有的特征都有相同的embedding size)
若希望不同的特征有不同的维度,可通过设置参数 -src_vocab_size 为一个list格式 word_vec_size[ feat1_vec_size[ feat2_vec_size[ ...]]]
openmnt默认的会将特征相拼接,如果希望将特征相加,需要设置参数-feat_merge sum,相加操作后的特征embedding 会被拼接到 word embedding后
参考资料
- 添加额外特征的官方教程 http://opennmt.net/OpenNMT/data/word_features/
网友评论