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

使用詞嵌入(Using Word Embeddings)

你已經瞭解不同單詞的特徵化表示了。

這節你會看到我們如何把這種表示方法應用到NLP應用中。

我們從一個例子開始,我們繼續用命名實體識別的例子,如果你要找出人名,假如有一個句子:“Sally Johnson is an orange farmer.”(Sally Johnson是一個種橙子的農民),你會發現Sally Johnson就是一個人名,所以這裡的輸出為1。之所以能確定Sally Johnson是一個人名而不是一個公司名,是因為你知道種橙子的農民一定是一個人,前面我們已經討論過用one-hot來表示這些單詞,x^(<1>) ,x^(<2>)等等。

吳恩達深度學習筆記(120) | NLP | 使用詞嵌入

但是如果你用特徵化表示方法,嵌入的向量,也就是我們在上個筆記中討論的。那麼用詞嵌入作為輸入訓練好的模型,如果你看到一個新的輸入:“Robert Lin is an apple farmer.”(Robert Lin是一個種蘋果的農民),因為知道orange和apple很相近,那麼你的算法很容易就知道Robert Lin也是一個人,也是一個人的名字。

一個有意思的情況是,要是測試集裡這句話不是“Robert Lin is an apple farmer.”,而是不太常見的詞怎麼辦?要是你看到:“Robert Lin is a durian cultivator.”(Robert Lin是一個榴蓮培育家)怎麼辦?

榴蓮(durian)是一種比較稀罕的水果,這種水果在新加坡和其他一些國家流行。如果對於一個命名實體識別任務,你只有一個很小的標記的訓練集,你的訓練集裡甚至可能沒有durian(榴蓮)或者cultivator(培育家)這兩個詞。但是如果你有一個已經學好的詞嵌入,它會告訴你durian(榴蓮)是水果,就像orange(橙子)一樣,並且cultivator(培育家),做培育工作的人其實跟farmer(農民)差不多,那麼你就有可能從你的訓練集裡的“an orange farmer”(種橙子的農民)歸納出“a durian cultivator”(榴蓮培育家)也是一個人。

詞嵌入能夠達到這種效果,其中一個原因就是學習詞嵌入的算法會考察非常大的文本集,也許是從網上找到的,這樣你可以考察很大的數據集可以是1億個單詞,甚至達到100億也都是合理的,大量的無標籤的文本的訓練集

。通過考察大量的無標籤文本,很多都是可以免費下載的,你可以發現orange(橙子)和durian(榴蓮)相近,farmer(農民)和cultivator(培育家)相近。

因此學習這種嵌入表達,把它們都聚集在一塊,通過讀取大量的互聯網文本發現了orange(橙子)和durian(榴蓮)都是水果。

接下來你可以把這個詞嵌入應用到你的命名實體識別任務當中,儘管你只有一個很小的訓練集,也許訓練集裡有100,000個單詞,甚至更小,這就使得你可以使用遷移學習,把你從互聯網上免費獲得的大量的無標籤文本中學習到的知識,能夠分辨orange(橙子)、apple(蘋果)和durian(榴蓮)都是水果的知識,然後把這些知識遷移到一個任務中,比如你只有少量標記的訓練數據集的命名實體識別任務中。

當然了,這裡為了簡化我只畫了單向的RNN,事實上如果你想用在命名實體識別任務上,你應該用一個雙向的RNN,而不是這樣一個簡單的。

吳恩達深度學習筆記(120) | NLP | 使用詞嵌入

總結一下,這是如何用詞嵌入做遷移學習的步驟。

第一步,先從大量的文本集中學習詞嵌入。一個非常大的文本集,或者可以下載網上預訓練好的詞嵌入模型,網上你可以找到不少,詞嵌入模型並且都有許可。

第二步,你可以用這些詞嵌入模型把它遷移到你的新的只有少量標註訓練集的任務中,比如說用這個300維的詞嵌入來表示你的單詞。這樣做的一個好處就是你可以用更低維度的特徵向量代替原來的10000維的one-hot向量,現在你可以用一個300維更加緊湊的向量。儘管one-hot向量很快計算,而學到的用於詞嵌入的300維的向量會更加緊湊。

第三步,當你在你新的任務上訓練模型時,在你的命名實體識別任務上,只有少量的標記數據集上,你可以自己選擇要不要繼續微調,用新的數據調整詞嵌入。實際中,只有這個第二步中有很大的數據集你才會這樣做,如果你標記的數據集不是很大,通常我不會在微調詞嵌入上費力氣。

當你的任務的訓練集相對較小時,詞嵌入的作用最明顯,所以它廣泛用於NLP領域。我只提到一些,不要太擔心這些術語(下問列舉的一些NLP任務),它已經用在命名實體識別,用在文本摘要,用在文本解析、指代消解,這些都是非常標準的NLP任務

詞嵌入在語言模型、機器翻譯領域用的少一些,尤其是你做語言模型或者機器翻譯任務時,這些任務你有大量的數據。在其他的遷移學習情形中也一樣,如果你從某一任務A遷移到某個任務B,只有A中有大量數據,而B中數據少時,遷移的過程才有用。所以對於很多NLP任務這些都是對的,而對於一些語言模型和機器翻譯則不然。

吳恩達深度學習筆記(120) | NLP | 使用詞嵌入

最後,詞嵌入和人臉編碼之間有奇妙的關係,你已經在前面的課程學到了關於人臉編碼的知識了,如果你上了卷積神經網絡的課程的話。你應該還記得對於人臉識別,我們訓練了一個Siamese網絡結構,這個網絡會學習不同人臉的一個128維表示,然後通過比較編碼結果來判斷兩個圖片是否是同一個人臉,這個詞嵌入的意思和這個差不多。

在人臉識別領域大家喜歡用編碼這個詞來指代這些向量f(x^((i) )),f(x^((j) ))(上圖編號1所示),人臉識別領域和這裡的詞嵌入有一個不同就是,在人臉識別中我們訓練一個網絡,任給一個人臉照片,甚至是沒有見過的照片,神經網絡都會計算出相應的一個編碼結果。上完後面幾節課,你會更明白,我們學習詞嵌入則是有一個固定的詞彙表,比如10000個單詞,我們學習向量e_1到e_10000,學習一個固定的編碼,每一個詞彙表的單詞的固定嵌入,這就是人臉識別與我們接下來幾節筆記要討論的算法之間的一個不同之處。

這裡的術語編碼(encoding)和嵌入(embedding)可以互換,所以剛才講的差別不是因為術語不一樣,這個差別就是,人臉識別中的算法未來可能涉及到海量的人臉照片,而自然語言處理有一個固定的詞彙表,而像一些沒有出現過的單詞我們就記為未知單詞。

這節筆記裡,你看到如何用詞嵌入來實現這種類型的遷移學習,並且通過替換原來的one-hot表示,而是用之前的嵌入的向量,你的算法會泛化的更好,你也可以從較少的標記數據中進行學習。

接下來我會給你展示一些詞嵌入的特性,這之後再討論學習這些詞嵌入的算法。下個筆記我們會看到詞嵌入在做類比推理中發揮的作用。


分享到:


相關文章: