机器翻译中丢掉词向量层会怎样?
論文標題:
Neural Machine Translation without Embeddings
論文作者:
Uri Shaham,Omer Levy
論文鏈接:
https://arxiv.org/pdf/2008.09396.pdf
代碼鏈接:
https://github.com/UriSha/EmbeddinglessNMT (待開源)
詞向量
長期以來,詞向量被認為是深度學習模型下不可缺少的一部分,從Word Embedding開始,詞向量被普遍認為可以建模隱空間中的語言單元的語義。
但是,發展到如今基于Transformer模型的時代,詞向量更多地是被默認當做模型輸入和輸出的一部分。它在當今模型下的作用似乎成為了業內普遍接受的規則。
詞向量在當下的使用方法是將離散的語言單元映射為連續值的向量。比如字典大小為,那么我們就需要的一個矩陣去表示詞向量。
在輸入和輸出的時候,詞向量矩陣用于離散單元和模型隱藏層的“過渡”,即表示為,其中是長度為的輸入句子,用one-hot表示成一個矩陣,是位置編碼,在輸出的時候,就是,是模型的最后一層得到的向量。
現在的問題是,能不能去掉輸入和輸出的矩陣?也就是能不能不要詞向量,直接把one-hot送入到模型中。本文通過實驗回答了這個問題。
本文使用字節(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。出乎意料的是,在的10組實驗里,有8組都是Byte更好。
但是在的10組實驗里,都是Subword更好,這似乎說明英語這種語言更適合使用Subword編碼。這是一個非常有趣的現象。
小結
本文探究了基于Byte編碼的無詞向量機器翻譯的效果,實驗表明,使用Byte編碼時,丟掉輸入和輸出的詞向量層都結果沒有太大的影響。
實驗還發現,不同的語言對編碼似乎非常敏感,尤其是英語比其他語言更加適合subword編碼。未來可以進一步研究不同語言的編碼偏好,以及詞向量在現代深度模型下的作用。
????
現在,在「知乎」也能找到我們了
進入知乎首頁搜索「PaperWeekly」
點擊「關注」訂閱我們的專欄吧
關于PaperWeekly
PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號后臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的机器翻译中丢掉词向量层会怎样?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 亚马逊将无人收银技术从美国大多数商店撤下
- 下一篇: 银华心诚005543净值