论文阅读:Neural Machine Translation with Byte-Level Subwords
文章简介:
基于字符,子词,词的机器翻译几乎都是以词频top-k数量建立的词典;但是针对字符相对杂乱的日文和字符较丰富的中文,往往他们的罕见词难以表示;
本文提出采用字节级别的字词BBPE(byte-level BPE),不会出现oov的词;比纯用字节表示更方便,比只用字符表示又效果更好;当BBPE和BPE性能接近时,词典size只是BPE的1/8;
主要方法:
整体思想是,把文本表示生字节级别的n-gram,而不是常用的字符级别n-gram;
把文本用UTF-8编码,每个字符最多用4字节;
首先把句子变成UTF-8字节序列,再分割字节序列到 byte-level “subwords”;(4X)
Encoder:作者是采用基于transformer的实验,也可以使用深度CNN和双向GRU;
Decoder:作者提出字符可以用有效的字节表示,但是字节字串不一定能表示有效的字符;
解决半训练模型经常出现的错误模式:出现随机重复字节,作者提出的算法:
f(k)是一串字节能表示的最长字符;如果子字节和有效字符相关,则g(i,j)=1,否则为0;然后递归计算f(k)
结果和分析
Qualitative Comparison: BPE vs. BBPE:
Symbol Frequency Distribution:
BBPE在只需要几乎1/8分词典size就能表示几乎全部这个语言的字符,包括大量的稀有字符
Cross-Lingual Sharing:
不同语言用BBPE表示时,也能进行参数共享,即某些字节能表示多种语言的意思;
Impact on Sequence Lengths:
一般BBPE有更长的分词序列和更长的训练时间和inference时间,但是基于子字节的方法比基于字符的词典依旧长度减少很多;
后面的分析插个眼补上