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

More Related Content

What's hot

專為程式人寫的神經網路導論 (以反傳遞演算法為入門磚)
專為程式人寫的神經網路導論  (以反傳遞演算法為入門磚) 專為程式人寫的神經網路導論  (以反傳遞演算法為入門磚)
專為程式人寫的神經網路導論 (以反傳遞演算法為入門磚)
鍾誠 陳鍾誠
 
人工智慧與神經網路 (還有深度學習的進展)
人工智慧與神經網路  (還有深度學習的進展)人工智慧與神經網路  (還有深度學習的進展)
人工智慧與神經網路 (還有深度學習的進展)
鍾誠 陳鍾誠
 
用十分鐘向nand2tetris學會設計處理器
用十分鐘向nand2tetris學會設計處理器用十分鐘向nand2tetris學會設計處理器
用十分鐘向nand2tetris學會設計處理器
鍾誠 陳鍾誠
 

What's hot (20)

那些我們都曾經學過 ,但是卻幾乎沒有人知道自己學過的《歐氏幾何》
那些我們都曾經學過 ,但是卻幾乎沒有人知道自己學過的《歐氏幾何》那些我們都曾經學過 ,但是卻幾乎沒有人知道自己學過的《歐氏幾何》
那些我們都曾經學過 ,但是卻幾乎沒有人知道自己學過的《歐氏幾何》
 
最佳化問題的公理化方法
最佳化問題的公理化方法最佳化問題的公理化方法
最佳化問題的公理化方法
 
用十分鐘理解 《微分方程》
用十分鐘理解  《微分方程》用十分鐘理解  《微分方程》
用十分鐘理解 《微分方程》
 
用十分鐘欣賞《物理學公理系統的演化史》
用十分鐘欣賞《物理學公理系統的演化史》用十分鐘欣賞《物理學公理系統的演化史》
用十分鐘欣賞《物理學公理系統的演化史》
 
計算機結構 (習題:Nand2tetris硬體部分)
計算機結構  (習題:Nand2tetris硬體部分)計算機結構  (習題:Nand2tetris硬體部分)
計算機結構 (習題:Nand2tetris硬體部分)
 
專為程式人寫的神經網路導論 (以反傳遞演算法為入門磚)
專為程式人寫的神經網路導論  (以反傳遞演算法為入門磚) 專為程式人寫的神經網路導論  (以反傳遞演算法為入門磚)
專為程式人寫的神經網路導論 (以反傳遞演算法為入門磚)
 
寫給資工系畢業生的工作面試指南
寫給資工系畢業生的工作面試指南寫給資工系畢業生的工作面試指南
寫給資工系畢業生的工作面試指南
 
人工智慧與神經網路 (還有深度學習的進展)
人工智慧與神經網路  (還有深度學習的進展)人工智慧與神經網路  (還有深度學習的進展)
人工智慧與神經網路 (還有深度學習的進展)
 
用十分鐘向nand2tetris學會設計處理器
用十分鐘向nand2tetris學會設計處理器用十分鐘向nand2tetris學會設計處理器
用十分鐘向nand2tetris學會設計處理器
 
為何學程式?
為何學程式?為何學程式?
為何學程式?
 
高橋流微積分
高橋流微積分高橋流微積分
高橋流微積分
 
用十分鐘了解 《大學老師到底是一個甚麼樣的工作》?
用十分鐘了解 《大學老師到底是一個甚麼樣的工作》?用十分鐘了解 《大學老師到底是一個甚麼樣的工作》?
用十分鐘了解 《大學老師到底是一個甚麼樣的工作》?
 
用十分鐘搞懂 《系統分析、軟體工程、專案管理與設計模式》
用十分鐘搞懂   《系統分析、軟體工程、專案管理與設計模式》用十分鐘搞懂   《系統分析、軟體工程、專案管理與設計模式》
用十分鐘搞懂 《系統分析、軟體工程、專案管理與設計模式》
 
梯度下降法 (隱藏在深度學習背後的演算法) -- 十分鐘系列
梯度下降法  (隱藏在深度學習背後的演算法) -- 十分鐘系列梯度下降法  (隱藏在深度學習背後的演算法) -- 十分鐘系列
梯度下降法 (隱藏在深度學習背後的演算法) -- 十分鐘系列
 
深度學習的捲積神經網路 -- (使用JavaScript / node.js實作)
深度學習的捲積神經網路 -- (使用JavaScript / node.js實作)深度學習的捲積神經網路 -- (使用JavaScript / node.js實作)
深度學習的捲積神經網路 -- (使用JavaScript / node.js實作)
 
怎樣才算是一個合格的資工系畢業生
怎樣才算是一個合格的資工系畢業生怎樣才算是一個合格的資工系畢業生
怎樣才算是一個合格的資工系畢業生
 
軟體工程(總結篇)
軟體工程(總結篇)軟體工程(總結篇)
軟體工程(總結篇)
 
用20分鐘向 nand2tetris 學會設計處理器
用20分鐘向 nand2tetris 學會設計處理器用20分鐘向 nand2tetris 學會設計處理器
用20分鐘向 nand2tetris 學會設計處理器
 
用十分鐘瞭解《大學專題的那些事兒》!
用十分鐘瞭解《大學專題的那些事兒》!用十分鐘瞭解《大學專題的那些事兒》!
用十分鐘瞭解《大學專題的那些事兒》!
 
《計算機結構與作業系統裏》-- 資工系學生們經常搞錯的那些事兒!
《計算機結構與作業系統裏》--  資工系學生們經常搞錯的那些事兒!《計算機結構與作業系統裏》--  資工系學生們經常搞錯的那些事兒!
《計算機結構與作業系統裏》-- 資工系學生們經常搞錯的那些事兒!
 

Viewers also liked

假如我是一個 PM? (軟體專案管理的那些事兒)
假如我是一個 PM?  (軟體專案管理的那些事兒)假如我是一個 PM?  (軟體專案管理的那些事兒)
假如我是一個 PM? (軟體專案管理的那些事兒)
鍾誠 陳鍾誠
 
假如世界毀滅了,我們該怎麼重建文明呢?(從原子論到電腦的那段重建歷程)
假如世界毀滅了,我們該怎麼重建文明呢?(從原子論到電腦的那段重建歷程)假如世界毀滅了,我們該怎麼重建文明呢?(從原子論到電腦的那段重建歷程)
假如世界毀滅了,我們該怎麼重建文明呢?(從原子論到電腦的那段重建歷程)
鍾誠 陳鍾誠
 
現代教育制度是怎樣形成的呢? (從新教改革到普魯士的義務教育)
現代教育制度是怎樣形成的呢?  (從新教改革到普魯士的義務教育)現代教育制度是怎樣形成的呢?  (從新教改革到普魯士的義務教育)
現代教育制度是怎樣形成的呢? (從新教改革到普魯士的義務教育)
鍾誠 陳鍾誠
 
關於人才與組織 (一個大學資工老師的想法)
關於人才與組織  (一個大學資工老師的想法)關於人才與組織  (一個大學資工老師的想法)
關於人才與組織 (一個大學資工老師的想法)
鍾誠 陳鍾誠
 
深度學習的RNN/LSTM循環神經網路 (使用node.js的neataptic套件實作)
深度學習的RNN/LSTM循環神經網路  (使用node.js的neataptic套件實作)深度學習的RNN/LSTM循環神經網路  (使用node.js的neataptic套件實作)
深度學習的RNN/LSTM循環神經網路 (使用node.js的neataptic套件實作)
鍾誠 陳鍾誠
 
相容於node.js的 網頁型桌面程式設計 (使用Electron.js 開發)
相容於node.js的 網頁型桌面程式設計  (使用Electron.js 開發)相容於node.js的 網頁型桌面程式設計  (使用Electron.js 開發)
相容於node.js的 網頁型桌面程式設計 (使用Electron.js 開發)
鍾誠 陳鍾誠
 

Viewers also liked (16)

假如我是一個 PM? (軟體專案管理的那些事兒)
假如我是一個 PM?  (軟體專案管理的那些事兒)假如我是一個 PM?  (軟體專案管理的那些事兒)
假如我是一個 PM? (軟體專案管理的那些事兒)
 
假如世界毀滅了,我們該怎麼重建文明呢?(從原子論到電腦的那段重建歷程)
假如世界毀滅了,我們該怎麼重建文明呢?(從原子論到電腦的那段重建歷程)假如世界毀滅了,我們該怎麼重建文明呢?(從原子論到電腦的那段重建歷程)
假如世界毀滅了,我們該怎麼重建文明呢?(從原子論到電腦的那段重建歷程)
 
Toki Pona in 76 ilustrated lessons
Toki Pona in 76 ilustrated lessonsToki Pona in 76 ilustrated lessons
Toki Pona in 76 ilustrated lessons
 
現代教育制度是怎樣形成的呢? (從新教改革到普魯士的義務教育)
現代教育制度是怎樣形成的呢?  (從新教改革到普魯士的義務教育)現代教育制度是怎樣形成的呢?  (從新教改革到普魯士的義務教育)
現代教育制度是怎樣形成的呢? (從新教改革到普魯士的義務教育)
 
關於人才與組織 (一個大學資工老師的想法)
關於人才與組織  (一個大學資工老師的想法)關於人才與組織  (一個大學資工老師的想法)
關於人才與組織 (一個大學資工老師的想法)
 
現代教育制度是怎樣形成的呢?
現代教育制度是怎樣形成的呢? 現代教育制度是怎樣形成的呢?
現代教育制度是怎樣形成的呢?
 
用十分鐘學會道本語 (用120個單字就能和外國人交談)
用十分鐘學會道本語  (用120個單字就能和外國人交談)用十分鐘學會道本語  (用120個單字就能和外國人交談)
用十分鐘學會道本語 (用120個單字就能和外國人交談)
 
深度學習的RNN/LSTM循環神經網路 (使用node.js的neataptic套件實作)
深度學習的RNN/LSTM循環神經網路  (使用node.js的neataptic套件實作)深度學習的RNN/LSTM循環神經網路  (使用node.js的neataptic套件實作)
深度學習的RNN/LSTM循環神經網路 (使用node.js的neataptic套件實作)
 
用十分鐘學會字串處理的那些事兒!
用十分鐘學會字串處理的那些事兒!用十分鐘學會字串處理的那些事兒!
用十分鐘學會字串處理的那些事兒!
 
相容於node.js的 網頁型桌面程式設計 (使用Electron.js 開發)
相容於node.js的 網頁型桌面程式設計  (使用Electron.js 開發)相容於node.js的 網頁型桌面程式設計  (使用Electron.js 開發)
相容於node.js的 網頁型桌面程式設計 (使用Electron.js 開發)
 
用十分鐘瞭解 《AlphaGo的幾個可能弱點》
用十分鐘瞭解  《AlphaGo的幾個可能弱點》用十分鐘瞭解  《AlphaGo的幾個可能弱點》
用十分鐘瞭解 《AlphaGo的幾個可能弱點》
 
從Arduino 與 8051之戰看台灣產業根深蒂固的硬體 costdown思維
從Arduino 與 8051之戰看台灣產業根深蒂固的硬體 costdown思維從Arduino 與 8051之戰看台灣產業根深蒂固的硬體 costdown思維
從Arduino 與 8051之戰看台灣產業根深蒂固的硬體 costdown思維
 
用十分鐘瞭解 《電腦到底是怎麼下棋的》
用十分鐘瞭解  《電腦到底是怎麼下棋的》 用十分鐘瞭解  《電腦到底是怎麼下棋的》
用十分鐘瞭解 《電腦到底是怎麼下棋的》
 
用十分鐘瞭解 《人工智慧的那些問題與方法》
用十分鐘瞭解  《人工智慧的那些問題與方法》 用十分鐘瞭解  《人工智慧的那些問題與方法》
用十分鐘瞭解 《人工智慧的那些問題與方法》
 
用30分鐘深入瞭解《AlphaGo圍棋程式的設計原理》
用30分鐘深入瞭解《AlphaGo圍棋程式的設計原理》用30分鐘深入瞭解《AlphaGo圍棋程式的設計原理》
用30分鐘深入瞭解《AlphaGo圍棋程式的設計原理》
 
用十分鐘快速瞭解 《人工智慧的過去、現在與未來》
用十分鐘快速瞭解  《人工智慧的過去、現在與未來》用十分鐘快速瞭解  《人工智慧的過去、現在與未來》
用十分鐘快速瞭解 《人工智慧的過去、現在與未來》
 

More from 鍾誠 陳鍾誠

西洋史 (你或許不知道但卻影響現代教育的那些事)
西洋史  (你或許不知道但卻影響現代教育的那些事)西洋史  (你或許不知道但卻影響現代教育的那些事)
西洋史 (你或許不知道但卻影響現代教育的那些事)
鍾誠 陳鍾誠
 

More from 鍾誠 陳鍾誠 (20)

用十分鐘瞭解 新竹科學園區的發展史
用十分鐘瞭解  新竹科學園區的發展史用十分鐘瞭解  新竹科學園區的發展史
用十分鐘瞭解 新竹科學園區的發展史
 
用十分鐘搞懂 λ-Calculus
用十分鐘搞懂 λ-Calculus用十分鐘搞懂 λ-Calculus
用十分鐘搞懂 λ-Calculus
 
交⼤資訊⼯程學系備審資料 ⾱詠祥
交⼤資訊⼯程學系備審資料 ⾱詠祥交⼤資訊⼯程學系備審資料 ⾱詠祥
交⼤資訊⼯程學系備審資料 ⾱詠祥
 
smallpt: Global Illumination in 99 lines of C++
smallpt:  Global Illumination in 99 lines of C++smallpt:  Global Illumination in 99 lines of C++
smallpt: Global Illumination in 99 lines of C++
 
西洋史 (你或許不知道但卻影響現代教育的那些事)
西洋史  (你或許不知道但卻影響現代教育的那些事)西洋史  (你或許不知道但卻影響現代教育的那些事)
西洋史 (你或許不知道但卻影響現代教育的那些事)
 
系統程式 -- 前言
系統程式 -- 前言系統程式 -- 前言
系統程式 -- 前言
 
系統程式 -- 附錄
系統程式 -- 附錄系統程式 -- 附錄
系統程式 -- 附錄
 
系統程式 -- 第 12 章 系統軟體實作
系統程式 -- 第 12 章 系統軟體實作系統程式 -- 第 12 章 系統軟體實作
系統程式 -- 第 12 章 系統軟體實作
 
系統程式 -- 第 11 章 嵌入式系統
系統程式 -- 第 11 章 嵌入式系統系統程式 -- 第 11 章 嵌入式系統
系統程式 -- 第 11 章 嵌入式系統
 
系統程式 -- 第 10 章 作業系統
系統程式 -- 第 10 章 作業系統系統程式 -- 第 10 章 作業系統
系統程式 -- 第 10 章 作業系統
 
系統程式 -- 第 9 章 虛擬機器
系統程式 -- 第 9 章 虛擬機器系統程式 -- 第 9 章 虛擬機器
系統程式 -- 第 9 章 虛擬機器
 
系統程式 -- 第 8 章 編譯器
系統程式 -- 第 8 章 編譯器系統程式 -- 第 8 章 編譯器
系統程式 -- 第 8 章 編譯器
 
系統程式 -- 第 7 章 高階語言
系統程式 -- 第 7 章 高階語言系統程式 -- 第 7 章 高階語言
系統程式 -- 第 7 章 高階語言
 
系統程式 -- 第 6 章 巨集處理器
系統程式 -- 第 6 章 巨集處理器系統程式 -- 第 6 章 巨集處理器
系統程式 -- 第 6 章 巨集處理器
 
系統程式 -- 第 5 章 連結與載入
系統程式 -- 第 5 章 連結與載入系統程式 -- 第 5 章 連結與載入
系統程式 -- 第 5 章 連結與載入
 
系統程式 -- 第 4 章 組譯器
系統程式 -- 第 4 章 組譯器系統程式 -- 第 4 章 組譯器
系統程式 -- 第 4 章 組譯器
 
系統程式 -- 第 3 章 組合語言
系統程式 -- 第 3 章 組合語言系統程式 -- 第 3 章 組合語言
系統程式 -- 第 3 章 組合語言
 
系統程式 -- 第 1 章 系統軟體
系統程式 -- 第 1 章 系統軟體系統程式 -- 第 1 章 系統軟體
系統程式 -- 第 1 章 系統軟體
 
系統程式 - 第二章
系統程式 - 第二章系統程式 - 第二章
系統程式 - 第二章
 
nand2tetris 舊版投影片 -- 第五章 計算機結構
nand2tetris 舊版投影片 -- 第五章 計算機結構nand2tetris 舊版投影片 -- 第五章 計算機結構
nand2tetris 舊版投影片 -- 第五章 計算機結構
 

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