Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

深度學習的機器翻譯技術 (使用node.js的neataptic套件實作)

3,443 views

Published on

十分鐘系列

Published in: Education
  • Be the first to comment

深度學習的機器翻譯技術 (使用node.js的neataptic套件實作)

  1. 1. 深度學習的機器翻譯技術 ( 使用 node.js 的 neataptic 套件實作 ) 陳鍾誠 2017 年 7 月 10 日 程式人《十分鐘系列》程式人《十分鐘系列》 本文衍生自維基百科
  2. 2. 今年 ● 我發現 Google 的機器翻譯品質, 變得順暢很多!
  3. 3. 但這並不是特例 ● 百度的中英翻譯甚至比 google 品質更好!
  4. 4. 讓我們來試試看
  5. 5. 我們從英文版維基百科中 挑了以下這篇愛因斯坦的描述
  6. 6. 先剪貼前兩段來試試
  7. 7. 您會發現 Google 翻譯和 2015 年時不同
  8. 8. 翻譯的順暢度 ●變得流暢很多。 ●雖然有時候會翻譯錯誤。 ●但可讀性已然大大提高!
  9. 9. 你如果使用網頁翻譯 會發現看起來就像維基百科一樣
  10. 10. 只是有時會有點小錯誤 但流暢性還是不錯的!
  11. 11. 讓我們再看看百度的翻譯
  12. 12. 然後和 Google 對照一下 百度翻譯 Google 翻譯 會發現翻譯不太相同,但是都還算是順暢!
  13. 13. 問題是 ● 為甚麼 Google 和百度的翻譯 都可以在這兩年內突飛猛進呢?
  14. 14. 關於這個問題 ● 牽涉到《深度學習技術》的發展!
  15. 15. 特別是 ● 循環神經網路 LSTM/GRU 模型 ● 以及 Google 所創造出來的詞彙 向量化技術 word2vector 。
  16. 16. 這種深度學習的翻譯方法 ● 統稱為 sequence to sequence (seq2seq) 式的翻譯技術!
  17. 17. 為了理解這個技術 ● 我找到了 Adam Geitgey 在 medium 網誌 上的這篇文章! https://medium.com/@ageitgey/machine-learning-is-fun-part-5-language-translation-with-deep- learning-and-the-magic-of-sequences-2ace0acca0aa
  18. 18. 裡面首先介紹一些傳統的統計翻譯作法
  19. 19. 然後才帶出文章的主角 ● Recurrent Neural Networks( 循環神經網路 ) 以及 Sequence-to-Sequence Models ( 序列對序列模型 )
  20. 20. 但是 ● 要理解循環神經網路 RNN/LSTM/GRU 之前 ● 最好先理解一下傳統的《多層感知器》 MLP 網路!
  21. 21. 這種網路通常有幾個中間隱藏層 ● 我們可以透過反 傳遞演算法,學 習網路的權重!
  22. 22. 只要先給定標準答案 ● 就可以訓練網路盡量提高正確性! https://medium.com/@ageitgey/machine-learning-is-fun-part-5-language-translation-with-deep- learning-and-the-magic-of-sequences-2ace0acca0aa
  23. 23. 如果你還不知道反傳遞演算法的原理 建議你看看上次的十分鐘系列,應該會很容易理解! https://www.slideshare.net/ccckmit/ss-77490577
  24. 24. 如果你已經認識傳統的神經網路 ● 但是不熟悉深度學習技術的循環神 經網路 RNN/LSTM/GRU
  25. 25. 那麼建議你看看這篇十分鐘系列 https://www.slideshare.net/ccckmit/rnn-lstm-77568016
  26. 26. 應該就能清楚地體會到 ● 循環神經網路到底能做些甚麼!
  27. 27. 基本上 ●循環神經網路 RNN/LSTM/GRU ●都很擅長《序列預測》!
  28. 28. 在語言領域 ● 擅長《序列預測》的意思,就是可以 自動產生出下一個《最可能的字》 ● 於是一個接一個, RNN/LSTM/GRU 就可 以自動產生出整篇文章!
  29. 29. 以下是循環網路序列預測的模型 https://medium.com/@ageitgey/machine-learning-is-fun-part-5-language-translation-with-deep- learning-and-the-magic-of-sequences-2ace0acca0aa
  30. 30. 所以如果把莎士比亞拿來學 ● 結果是電腦自動 學會了寫小說 ● 而且是莎士比亞 風格的小說
  31. 31. 如果把 Linux 原始碼拿來訓練 ● 結果是電腦學會了 寫 C 語言 ● 不過只是外型像而 已,編譯執行結果 恐怕很難有用!
  32. 32. 看到這裡 ● 您應該開始具備理解《深度學習機 器翻譯技術》的基本知識了!
  33. 33. 用循環神經網路做翻譯 ● 必須把兩個循環網路連接起來 ● 一個稱為編碼器 Encoder ,另一個 稱為解碼器 Decoder 。
  34. 34. 像是這樣 Encoder Decoder 語句向量 輸入語句 輸出語句
  35. 35. 中間的語句向量 Encoder Decoder 語句向量 輸入語句 輸出語句 讓 Decoder 在解碼時,可以產生《語法文字不同,但語義相同》的語句!
  36. 36. 循環網路的強項 Encoder Decoder 語句向量 輸入語句 輸出語句 就是產生《順暢的語句》,因此翻譯的語句不會讀起來卡卡的!
  37. 37. 這種 Encoder/Decoder 的模式 ● 不只可以用來做《翻譯系統》 也可以用來做《影像自動描述系統》
  38. 38. 電腦甚至可以詳細的描述整個場景
  39. 39. 但是 ● 上述的模型有點太簡化! Encoder Decoder 語句向量 輸入語句 輸出語句
  40. 40. 在下列課程中有更詳細的模型和數學式 ● CS224n: Natural Language Processing with Deep Learning ● 其中 Encoder 輸出的記憶向量 C 和 yi 合起來成為 Decoder 的輸入 http://web.stanford.edu/class/cs224n/lectures/cs224n-2017-lecture9.pdf
  41. 41. 但是 ● 上面這些只是模型和數學理論 ● 要落實為程式還缺乏一些元素!
  42. 42. 對於 Google 這種等級的 真實翻譯系統而言,還要考慮到 ● 詞彙量很大:必須做 word2vec 向量化,將詞彙 轉成數百維的向量 ● 要有大量的平行與料庫 ( 中英對照之類的 ) ,才 能把神經網路訓練好。 ● 要有大量的 CPU/GPU 才能對大量的平行語料做訓 練。
  43. 43. 問題是 ● 我沒有大量的平行語料 ● 也沒有大量的 CPU/GPU 可以用
  44. 44. 所以我決定 ● 先做一個小的範例 ● 就以《貓狗世界》為例好了!
  45. 45. 我採用 neataptic.js 這個套件 來製作我們的《第一個 LSTM 循環神經網路翻譯系統》!
  46. 46. 該系統放在我 github 的 ai6 專案裏了 https://github.com/ccckmit/ai6/tree/master/book/mt
  47. 47. 訓練過程大約需要五分鐘
  48. 48. 我們的訓練語料很簡單 ● 就只有幾句貓狗世界的翻譯而已
  49. 49. 我們放入了一些 刻意安排的案例 ● 有些無法對應的詞 – 像是:隻 ● 一對多的翻譯: – 像是:狗 =dog, 小狗 =puppy ● 不同的詞序 – 像是:狗 一 隻 = a dog
  50. 50. 翻譯的結果如下
  51. 51. 除了訓練語句之外 ● 我們還測試了一些《訓練集以外》的語句 ● 其中兩句翻得很好 – 小狗一條 = a puppy – 黑狗一隻 = a black dog ● 但有一句不好 – 黑 貓 一 隻 = a black
  52. 52. 您可以發現 ● 這個《小系統》表現得還算 OK ● 基本上展示出了《循環神經網路》 seq2seq 模型在機器翻譯上的能力 與特性!
  53. 53. 雖然我們的實作 ● 其實是用兩階段的訓練方式 – 第一階段訓練中英翻譯 ( 也就是選詞 ) – 第二階段訓練語句產生 ( 產生順暢語句 ) ● 這和 CS224n 課程中有點不同 – 但是實驗結果發現是可行的!
  54. 54. 或許未來有更多資源時 ● 我們會嘗試建立一個 《可以實用的完整深度學習翻譯系統》
  55. 55. 但是萬事起頭難!
  56. 56. 在這裡 ●我們至少邁出了第一步。
  57. 57. 雖然我們還沒有加入 ● Word2vec 的詞彙向量化機制 ● 而是採用 one hot 的簡單向量化方法
  58. 58. 但是我想 ●對於小規模的實驗 ●程式應該越簡單越好!
  59. 59. 如果您有興趣 ● 歡迎下載這個程式來玩玩看!
  60. 60. 這就是我們今天的
  61. 61. 十分鐘系列
  62. 62. 希望您會喜歡!
  63. 63. 我們下回見!
  64. 64. Bye Bye!

×