著作權歸作者所有。 商業轉載請聯繫作者獲得授權, 非商業轉載請注明出處。
作為Google員工, 我來談談兩個令我體會比較深刻的原因吧。
1. 神經網路/深度學習在機器翻譯上的飛速進展。
大概在14年左右的時候, 關於在機器翻譯上應用神經網路/深度學習的論文開始大量地被發表。 [Sutskever et al., 2014]把基於RNN的序列到序列(seq2seq)模型應用於機器翻譯的任務上。
多層seq2seq模型
後來因為單純的seq2seq對於長句的效果不佳, 引入了注意力機制(Attention)。 [Bahdanau et al., 2015, Luong et al., 2015]。
Attention
大概的意思是把編碼層的輸出和解碼層的輸出結合起來計算一個含有對齊資訊的上下文向量(Context Vector)。 由於帶上了對齊資訊, 對長句的翻譯效果有了顯著的提高。
再後來是去年誕生的GNMT [Wu et al., 2016], 在上述工作的基礎上加入了一些改進, 如:
1)用WordPiece來解決低頻詞的問題。 這個就相當於是子詞, 如 wordpiece 會被拆分成word和piece兩個子詞。
2)加入了殘差連接(ResNet), 提高了更深的網路的可訓練性。
3)雙向RNN。
基本上, 每一次改進都是在原先的神經網路中一些新的結構來改善原先模型不足的地方。 不得不說, 神經網路其中一個美妙之處就在於可以很容易地通過在上面加結構/連接來改變模型性質, 所以實驗一種新的模型不是一件難事, 這也是促成神經網路在各個應用上研究大爆發的其中一個原因。
當然, 為了解決RNN訓練慢的問題, 後來又有研究者提出了基於CNN的方法[Gehring et al. 2017], 純粹Attention的方法[Vaswani, et al., 2017]。 這些方法擯棄了傳統的RNN方法, 不過我們仍然可以看到組成這些模型的各個子結構大部分都是一些已經存在的結構。
另外值得一提的是, 上述模型都是端到端的模型(模型的輸入和輸出都是句子), 不需要我們去處理語法/句法之類的問題。
2. Tensorflow在Google內部的廣泛應用, 以及Google內部對Tensorflow強大的基礎設施支持。
Google有著大量的機器集群, 並且對Tensorflow有著很好的支持。 在這些集群上部署神經網路訓練任務是一件輕而易舉的事情。 基本上, 我們只需要指定所需要的資源, 就可以把我們的訓練任務部署在機器集群上。 這就大大地降低研究的成本。 這不但把研究者們從這些瑣碎的事情上解放出來專心於網路結構的研究, 而且可以讓研究者們同時進行很多實驗去驗證他們的想法、快速反覆運算。 快速反覆運算對於研究真的非常非常重要。
當然, 硬體革新也是很重要的, 近年來GPU越來越快, 並且Google自家也開發了專門用於機器學習的TPU。
順帶一提, Google已經在Tensorflow的官方教程中加入了關於機器翻譯的教程(https://www.tensorflow.org/versions/master/tutorials/seq2seq)。 如果哪位同學對這個感興趣的話, 可以比較容易地跟著上面的教程, 開發一個自己的機器翻譯模型出來。