吳恩達深度學習筆記(130)

選擇最可能的句子(Picking the most likely sentence)

在seq2seq機器翻譯模型和語言模型之間有很多相似的地方,但是它們之間也有許多重要的區別,讓我們來一探究竟。

你可以把機器翻譯想成是建立一個條件語言模型,在語言模型中上方是之前所建立的模型,這個模型可以讓你能夠估計句子的可能性,這就是語言模型所做的事情。

你也可以將它用於生成一個新的句子,如果你在圖上的該處(下圖編號1所示),有x^(<1>)和x^(<2>),那麼在該例中x^(<2>)=y^(<1>),但是x^(<1>)、x^(<2>)等在這裡並不重要。為了讓圖片看起來更簡潔,我把它們先抹去,可以理解為x^(<1>)是一個全為0的向量,然後x^(<2>)、x^(<3>)等都等於之前所生成的輸出,這就是所說的語言模型。

吳恩達深度學習筆記(130) | 序列模型 | 搜索算法

而機器翻譯模型是下面這樣的,我這裡用兩種不同的顏色來表示,即綠色和紫色,用綠色(上圖編號2所示)表示encoder網絡,用紫色(上圖編號3所示)表示decoder網絡

你會發現decoder網絡看起來和剛才所畫的語言模型幾乎一模一樣,機器翻譯模型其實和語言模型非常相似,不同在於語言模型總是以零向量(上圖編號4所示)開始,而encoder網絡會計算出一系列向量(上圖編號2所示)來表示輸入的句子。有了這個輸入句子,decoder網絡就可以以這個句子開始,而不是以零向量開始,所以我把它叫做條件語言模型(conditional language model)。相比語言模型,輸出任意句子的概率,翻譯模型會輸出句子的英文翻譯(上圖編號5所示),這取決於輸入的法語句子(上圖編號6所示)。換句話說,你將估計一個英文翻譯的概率,比如估計這句英語翻譯的概率,"Jane is visiting Africa in September.",這句翻譯是取決於法語句子,"Jane visite I'Afrique en septembre.",這就是英語句子相對於輸入的法語句子的可能性,所以它是一個條件語言模型。

吳恩達深度學習筆記(130) | 序列模型 | 搜索算法

現在,假如你想真正地通過模型將法語翻譯成英文,通過輸入的法語句子模型將會告訴你各種英文翻譯所對應的可能性。x在這裡是法語句子"Jane visite l'Afrique en septembre.",而它將告訴你不同的英語翻譯所對應的概率。

顯然你不想讓它隨機地進行輸出,如果你從這個分佈中進行取樣得到P(y|x),可能取樣一次就能得到很好的翻譯,"Jane is visiting Africa in September."。但是你可能也會得到一個截然不同的翻譯,"Jane is going to be visiting Africa in September.",這句話聽起來有些笨拙,但它不是一個糟糕的翻譯,只是不是最好的而已。有時你也會偶然地得到這樣的翻譯,"In September, Jane will visit Africa.",或者有時候你還會得到一個很糟糕的翻譯,"Her African friend welcomed Jane in September."。

所以當你使用這個模型來進行機器翻譯時,你並不是從得到的分佈中進行隨機取樣,而是你要找到一個英語句子y(上圖編號1所示),使得條件概率最大化。所以在開發機器翻譯系統時,你需要做的一件事就是想出一個算法,用來找出合適的y值,使得該項最大化,而解決這種問題最通用的算法就是束搜索(Beam Search),你將會在下節課見到它。

不過在瞭解束搜索之前,你可能會問一個問題,為什麼不用

貪心搜索(Greedy Search)呢?

貪心搜索是一種來自計算機科學的算法,生成第一個詞的分佈以後,它將會根據你的條件語言模型挑選出最有可能的第一個詞進入你的機器翻譯模型中,在挑選出第一個詞之後它將會繼續挑選出最有可能的第二個詞,然後繼續挑選第三個最有可能的詞,這種算法就叫做貪心搜索,但是你真正需要的是一次性挑選出整個單詞序列,從y^(<1>)、y^(<2>)到y^()來使得整體的概率最大化。所以這種貪心算法先挑出最好的第一個詞,在這之後再挑最好的第二詞,然後再挑第三個,這種方法其實並不管用,為了證明這個觀點,我們來考慮下面兩種翻譯。

吳恩達深度學習筆記(130) | 序列模型 | 搜索算法

第一串(上圖編號1所示)翻譯明顯比第二個(上圖編號2所示)好,所以我們希望機器翻譯模型會說第一個句子的P(y|x)比第二個句子要高,第一個句子對於法語原文來說更好更簡潔,雖然第二個也不錯,但是有些囉嗦,裡面有很多不重要的詞。但如果貪心算法挑選出了"Jane is"作為前兩個詞,因為在英語中going更加常見,於是對於法語句子來說"Jane is going"相比"Jane is visiting"會有更高的概率作為法語的翻譯,所以很有可能如果你僅僅根據前兩個詞來估計第三個詞的可能性,得到的就是going,最終你會得到一個欠佳的句子,在P(y|x)模型中這不是一個最好的選擇。

我知道這種說法可能比較粗略,但是它確實是一種廣泛的現象,當你想得到單詞序列y^(<1>)、y^(<2>)一直到最後一個詞總體的概率時,一次僅僅挑選一個詞並不是最佳的選擇。當然,在英語中各種詞彙的組合數量還有很多很多,如果你的字典中有10,000個單詞,並且你的翻譯可能有10個詞那麼長,那麼可能的組合就有10,000的10次方這麼多,這僅僅是10個單詞的句子,從這樣大一個字典中來挑選單詞,所以可能的句子數量非常巨大,不可能去計算每一種組合的可能性。

所以這時最常用的辦法就是用一個近似的搜索算法

,這個近似的搜索算法做的就是它會盡力地,儘管不一定總會成功,但它將挑選出句子y使得條件概率最大化,儘管它不能保證找到的y值一定可以使概率最大化,但這已經足夠了。

最後總結一下,在本節中,你看到了機器翻譯是如何用來解決條件語言模型問題的,這個模型和之前的語言模型一個主要的區別就是,相比之前的模型隨機地生成句子,在該模型中你要找到最有可能的英語句子,最可能的英語翻譯,但是可能的句子組合數量過於巨大,無法一一列舉,所以我們需要一種合適的搜索算法,讓我們在下節課中學習集束搜索。


分享到:


相關文章: