寫給新手看的機器學習原理 基於機器翻譯

2021-07-30 06:12:44 字數 2353 閱讀 3401

最近在看史丹福大學機器翻譯的開源**,琢磨著把**稍微改動一下,做成中文到英文的翻譯。參考了業界大牛的不少**,大致明白了機器翻譯實現的步驟:

1.將原始檔轉化成詞向量(像中文這種詞之間沒有明顯符號的,要先進行分詞)

轉化的方法,最簡單的是生成one-hot詞向量。具體來說就是,如果檔案中包含n個不同的詞,那麼每個詞的詞向量都是n維的,而且只有乙個元素的值為1,其餘元素都為0. 這樣做雖然簡單,但需要的空間極大,而且無法反映出詞與詞之間的聯絡。我們想得到的詞向量是這樣的:舅舅-男人=舅媽,或者,王子+女人=公主。史丹福大學的**中是這樣做的:先生成one-hot詞向量,再通過乙個變換矩陣將其壓縮成低維向量。

注意,機器翻譯是有監督學習,所以詞向量的轉化涉及將源語言和目標語言的檔案進行詞向量轉化。通過轉化,我們就把語言與語言之間的轉換,等價變為向量與向量之間的轉換。為什麼要這樣做呢?因為電腦本身是沒有語言的概念的,它只認一串串數字。事實上,語言在電腦上的存在,也是通過ascii,unicode等編碼實現的。但我們不能直接用這些編碼進行機器翻譯,因為它們的規律性弱,也沒法很好地展示詞之間的關係,儲存方式也比較複雜。機器翻譯也算是一種數學模型,而數學模型的精髓就是簡化問題,忽略不必要的條件。(數學系妹子的職業病==)

2.學習轉換規則(訓練模型)

現在,我們將不同語言都轉化為向量了。那麼,我們怎樣把兩組向量聯絡起來呢?學過線性代數的人都知道,向量的線性變換可以把一組向量對映成另一組向量。而機器翻譯也像是一種對映。(但它實際上不是對映,比如,中文到英文的變換,可能涉及到冠詞、介詞等詞語,而這些詞語有時候不會體現在中文中)那麼,我們能否找到一種變換(不一定是線性的),將源語言的句子對映成目標語言的句子?(乙個句子包含若干詞向量,所以這個問題被我們轉化成了將一組向量對映成另一組向量)

若干年前,這種轉換規則還是人為設定的。但這樣的方法,對人的要求極高(不僅要精通至少兩種語言,還要精通程式設計),而且準確率也不高。後來,基於統計的機器翻譯給這項工作減少了人為成分。但是,有很多引數仍然需要人為設定。所以,有人把當時的程式設計師戲稱為「調參狗」。(統計機器翻譯我不太了解,後面看過之後再進行補充)

深度學習的出現,給機器翻譯注入了新的血液。所謂深度學習,就是用多層神經網路構建乙個系統,只需賦給它一些初始值(通常都設為0)和訓練資料,它就可以自行修改調整引數。也就是說,深度學習是一種生成演算法的工具,輸入大量資料,它就能根據資料提供的資訊自行調參,使模型符合人的要求。在機器翻譯中,深度學習能幫助人類找到一種復合的變換,這種變換將源語言句子轉換為目標語言句子。

我們需要做的,就是賦予機器乙個學習的框架,可以簡單理解為學習流程。機器只能調參,不能改變運算符號。所以我們的框架至關重要。

現在比較流行的學習方法是rnn(recurrent neural network,迴圈神經網路)。因為rnn的學習過程符合語言的習慣--它能記錄上下文資訊。而lstm(long short term memory,長短期記憶)是rnn的一種特例,它能自行決定什麼時候遺忘過去的資訊,什麼時候記住當前的資訊。關於rnn和lstm的具體資訊,可以參照這篇文章:

3.模型的選擇

就如第2步所說,我們可以通過資料學習轉換方法。那麼,這種學習到什麼時候結束呢?我們一定要讓自己的模型與訓練資料完全匹配嗎?不是的。這裡存在「過擬合」的問題。通俗來講,「過擬合」就是,你的模型與訓練資料匹配度很高,你輸入訓練資料裡的任意一句中文,模型都能輸出一句與之匹配的英文。但是,你輸入訓練資料之外的一句中文,輸出結果卻不盡如人意。這是怎麼回事?因為,你的模型太匹配訓練資料了,以致失去了普適性。舉乙個例子:如果我用很多蘋果的來訓練模型,這些蘋果多數都是紅色的,但我測試模型時,輸入了乙個黃蘋果,模型可能會錯誤地認為這不是蘋果。

那麼我們什麼時候停止訓練呢?事實上,我們並不是不間斷地訓練模型。每過一段時間,我們都要拿驗證集中的幾組資料來驗證模型的好壞。還是上面蘋果的例子,訓練了一段時間後,我把乙個黃蘋果的**輸入模型,模型判定其不是蘋果,而我的資料中卻記錄著,這是蘋果,所以模型判定錯誤,本次的訓練使得模型「過擬合」了。然而,我們在上乙個時間點測試的時候,機器還能識別出黃蘋果。所以,我們捨棄本次的訓練結果,保留上一次訓練的引數,並停止訓練。

4.模型的測試

停止訓練後,我們的模型就完成了學習。現在,我們想要測試一下模型的精確度。這次,我們既不用訓練集中的資料,也不用驗證集中的資料。我們用乙個新的集合來測試,這個集合就叫做測試集。測試集不會對模型產生影響,它只能評估模型。將測試集中的資料輸入模型,將模型的輸出與資料中儲存的標準輸出進行對比,最終通過一定的規則對模型進行評判。

至此,機器翻譯就完成了。

5.其他需要注意的地方

你可能已經注意到了,我分別在2、3、4步提到了三個集合:訓練集(training set),驗證集(validation set),測試集(testing set)。我們在訓練模型之前得到若干組資料,如果資料量充足,我們就把它分為這三個集合。其中,訓練集用於訓練模型,驗證集用於決定什麼時候停止訓練模型,測試集用於評價模型好壞。這三個集合的交集為空。

寫給學習 matlab 的新手們

746722 1 4.html 7 f12 設定或取消斷點 8 f5 執行程式 其餘的例如在debug狀態下的快捷鍵就不多說了,自己看選單debug吧 累了,有時間再寫吧。希望大家多交流 coming 以下東西都是一年前做的了,不知道能否記起,呵呵 已經全部完成 1 關於神經網路的 呼叫matlab...

寫給學習 matlab 的新手們

746722 1 4.html 7 f12 設定或取消斷點 8 f5 執行程式 其餘的例如在debug狀態下的快捷鍵就不多說了,自己看選單debug吧 累了,有時間再寫吧。希望大家多交流 coming 以下東西都是一年前做的了,不知道能否記起,呵呵 已經全部完成 1 關於神經網路的 呼叫matlab...

《寫給大家看的設計書》學習筆記

優秀的設計就這麼容易 學習四大基本原則 認識到自己沒有運用這些原則 應用基本原則 四大基本原則物理位置的接近就意味存在著關聯。親密性意味著存在關聯。圓角比指教更加簡潔,更突出。正文中的字型大小不一定非得12點,做為正文的輔助資訊,如期號和新聞髮型年份,字型通常可以小到7或8點。設計技能需要逐步提高,...