論文標題:
Neural Machine Translation without Embeddings
論文作者:
Uri Shaham,Omer Levy
論文連結:
https://arxiv.org/pdf/2008.09396.pdf
代碼連結:
https://github.com/UriSha/EmbeddinglessNMT (待開源)
詞向量
長期以來,詞向量被認為是深度學習模型下不可缺少的一部分,從Word Embedding開始,詞向量被普遍認為可以建模隱空間中的語言單元的語義。
但是,發展到如今基於Transformer模型的時代,詞向量更多地是被默認當做模型輸入和輸出的一部分。它在當今模型下的作用似乎成為了業內普遍接受的規則。
詞向量在當下的使用方法是將離散的語言單元映射為連續值的向量。比如字典大小為
在輸入和輸出的時候,詞向量矩陣用於離散單元和模型隱藏層的「過渡」,即表示為
現在的問題是,能不能去掉輸入和輸出的矩陣
本文使用字節(Byte)編碼表示輸入到模型的語言單元,並且丟掉了傳統的詞向量,在多個語言的機器翻譯任務上進行了實驗。
結果表明,基於Byte編碼的無詞向量模型和基於BPE編碼、字編碼和Byte編碼的有詞向量模型效果沒有顯著區別,甚至在一些任務上還要更優。
這啟發我們進一步思考對於機器翻譯而言,編碼的作用為何,詞向量的作用為何,我們需不需要打破現在默認的詞向量用法?
用Byte編碼丟掉詞向量
簡單來說,本文使用長度為256的one-hot編碼表示一個UTF-8位元組(因為一個字節有8位,一共會產生256個不同的字節),這樣的一個好處是不會出現OOV。
由於使用的是UTF-8編碼,所以不同的語言會有不同的長度,比如英文每個字就是一個字節,阿拉伯語每個字就是兩個字節,而中文每個字用三個字節表示。
但是這並不影響我們進行編碼,只是對於中文而言,得到的編碼後的句子會更長一些。
下圖是一個使用各編碼方案的例子。使用BPE編碼得到的句子最短,其次是使用字編碼,最後使用Byte編碼會更長,因為在阿拉伯語中,每個字需要兩個Byte表示。
對於一個句子,在用Byte編碼處理後,可以得到一個輸入One-hot矩陣
這時候,不再需要把它和詞向量矩陣相乘,只需要再加上位置編碼
實驗
本文在IWSLT上實驗,選擇了10個不同的語言,對每個語言
首先看同樣是Byte編碼的有詞向量模型和無詞向量模型。可以看到,無詞向量模型都好於有詞向量模型,和字編碼(Char)相比,在大多數情況下Byte+Embed-less也都更好,這說明在編碼粒度較細(Char和Byte)時,不加詞向量效果會更好。
再來比較有詞向量的Subword和無詞向量的Byte。出乎意料的是,在
但是在
小結
本文探究了基於Byte編碼的無詞向量機器翻譯的效果,實驗表明,使用Byte編碼時,丟掉輸入和輸出的詞向量層都結果沒有太大的影響。
實驗還發現,不同的語言對編碼似乎非常敏感,尤其是英語比其他語言更加適合subword編碼。未來可以進一步研究不同語言的編碼偏好,以及詞向量在現代深度模型下的作用。