深度學習(五)序列模型-循環神經網絡(RNN)(2) -Andrew Ng

一、基礎知識

1.1 單詞表徵(one-hot表示)

上節我們學習了RNNGRU單元和LSTM單元。本節你會看到我們如何把這些知識用到NLP上,用於自然語言處理,深度學習已經給這一領域帶來了革命性的變革。其中一個很關鍵的概念就是詞嵌入(word embeddings),這是語言表示的一種方式,可以讓算法自動的理解一些類似的詞,比如男人對女人,比如國王對王后,還有其他很多的例子。通過詞嵌入的概念你就可以構建NLP應用了,即使你的模型標記的訓練集相對較小。最後我們會消除詞嵌入的偏差,就是去除不想要的特性,或者學習算法有時會學到的其他類型的偏差。

怎麼理解詞彙表徵???

首先建立一個較大的詞彙表(例如10000),然後使用one-hot的方式對每個單詞進行編碼。例如單詞Man,Woman,King,Queen,Apple,Orange分別出現在詞彙表的第5391,9853,4914,7157,456,6257的位置,那麼他們的獨熱編碼就會在指定的位置爲1 其他位置是0。分別用O5391,O9853,O4914,O7157,O456,O6257 表示他們的獨熱編碼。
              

這中one-hot表徵單詞的方法最大的缺點就是每個單詞都是獨立的、正交的,無法知道不同單詞之間的相似程度。例如Apple和Orange都是水果,詞性相近,但是單從one-hot編碼上來看,內積爲零,無法知道二者的相似性。在NLP中,我們更希望能掌握不同單詞之間的相似程度。

特徵表徵的理解(也稱爲詞嵌入)???

因此,我們可以使用特徵表徵(Featurized representation)的方法對每個單詞進行編碼。也就是使用一個特徵向量表徵單詞,特徵向量的每個元素都是對該單詞某一特徵的量化描述,量化範圍可以是[-1,1]之間。特徵表徵的例子如下圖所示:

                                

特徵向量的長度依情況而定,特徵元素越多則對單詞表徵得越全面。這裏的特徵向量長度設定爲300。使用特徵表徵之後,詞彙表中的每個單詞都可以使用對應的300 x 1的向量來表示,該向量的每個元素表示該單詞對應的某個特徵值。每個單詞用e+詞彙表索引的方式標記,例如e5391,e9853,e4914,e7157,e456,e6257。
 

這種特徵表徵的優點是根據特徵向量能清晰知道不同單詞之間的相似程度,例如Apple和Orange之間的相似度較高,很可能屬於同一類別。這種單詞“類別”化的方式,大大提高了有限詞彙量的泛化能力。這種特徵化單詞的操作被稱爲Word Embeddings,即單詞嵌入。

單詞嵌入特徵元素的如何決定???

接下來,我們會找到一個學習詞嵌入的方式,這裏只是希望你能理解這種高維特徵的表示能夠比one-hot更好的表示不同的單詞。而我們最終學習的特徵不會像這裏一樣這麼好理解,沒有像第一個特徵是性別,第二個特徵是高貴,第三個特徵是年齡等等這些,新的特徵表示的東西肯定會更難搞清楚。但是,這並不影響對每個單詞的有效表徵,同樣能比較不同單詞之間的相似性。接下來要學的特徵表示方法卻能使算法高效地發現appleorange會比kingorangequeenorange更加相似。

單詞嵌入可視化???

每個單詞都由高維特徵向量表徵,爲了可視化不同單詞之間的相似性,可以使用降維操作,例如t-SNE算法,將300D降到2D平面上。如下圖所示:

                                                                

從上圖可以看出相似的單詞分佈距離較近,從而也證明了Word Embeddings(單詞嵌入)能有效表徵單詞的關鍵特徵。

 嵌入的理解???

你可以想象一個300維的空間,現在取每一個單詞比如orange,這個詞就被嵌在這個300維空間裏的一個點上。爲了可視化,t-SNE算法把這個空間映射到低維空間,你可以畫出一個2維圖像然後觀察,這就是這個術語嵌入的來源。

詞嵌入已經是NLP領域最重要的概念之一了,在自然語言處理領域。

總結:

單詞表徵的兩種方式:

  • one-hot
  • 特徵表徵(單詞嵌入)

單詞表徵時候,特徵元素的如何決定?


1.2 使用詞嵌入

上節,已經瞭解不同單詞的特徵化表示了。這節你會看到我們如何把這種表示方法應用到NLP應用中。

之前我們介紹過Named entity識別的例子,每個單詞采用的是one-hot編碼。如下圖所示,因爲“orange farmer”是份職業,很明顯“Sally Johnson”是一個人名。

                        

如果採用featurized representation對每個單詞進行編碼,再構建該RNN模型。對於一個新的句子:

Robert Lin is an apple farmer

由於這兩個句子中,“apple”與“orange”特徵向量很接近,很容易能判斷出“Robert Lin”也是一個人名。這就是featurized representation的優點之一。
 

可以看出,featurized representation的優點是可以減少訓練樣本的數目,前提是對海量單詞建立特徵向量表述(word embedding)。這樣,即使訓練樣本不夠多,測試時遇到陌生單詞,例如“durian cultivator”,根據之前海量詞彙特徵向量就判斷出“durian”也是一種水果,與“apple”類似,而“cultivator”與“farmer”也很相似。從而得到與“durian cultivator”對應的應該也是一個人名。這種做法將單詞用不同的特徵來表示,即使是訓練樣本中沒有的單詞,也可以根據word embedding的結果得到與其詞性相近的單詞,從而得到與該單詞相近的結果,有效減少了訓練樣本的數量。
 

featurized representation的特性使得很多NLP任務能方便地進行遷移學習。方法是:

  • 從海量詞彙庫中學習word embeddings,即所有單詞的特徵向量。或者從網上下載預訓練好的word embeddings。
  • 使用較少的訓練樣本,將word embeddings遷移到新的任務中。
  • (可選):繼續使用新數據微調word embeddings。

建議僅當訓練樣本足夠大的時候,再進行上述第三步。
 

1.3 詞嵌入的特性

Word embeddings可以幫助我們找到不同單詞之間的相似類別關係。如下圖所示:

                          

上例中,特徵維度是4維的,分別是[Gender, Royal, Age, Food]。常識地,“Man”與“Woman”的關係類比於“King”與“Queen”的關係。而利用Word embeddings可以找到這樣的對應類比關係。

我們將“Man”的embedding vector與“Woman”的embedding vector相減:

                                                           

類似地,我們將“King”的embedding vector與“Queen”的embedding vector相減:

                                                          

相減結果表明,“Man”與“Woman”的主要區別是性別,“King”與“Queen”也是一樣。

一般地,A類比於B相當於C類比於“?”,這類問題可以使用embedding vector進行運算。

                                      

如上圖所示,根據等式eman−ewoman≈eking−e?得:

                                                                   

利用相似函數,計算與eking−eman+ewoman 相似性最大的e?,得到e?=e queen。

關於相似函數,比較常用的是cosine similarity。其表達式爲:

                                                                             

 

還可以計算Euclidian distance來比較相似性,即。距離越大,相似性越小。 

1.4 嵌入矩陣

當你應用算法來學習詞嵌入時,實際上是學習一個嵌入矩陣,我們來看一下這是什麼意思。

假設某個詞彙庫包含了10000個單詞,每個單詞包含的特徵維度爲300,那麼表徵所有單詞的embedding matrix維度爲300 x 10000,用E來表示。某單詞w的one-hot向量表示爲Ow,維度爲10000 x 1,則該單詞的embedding vector表達式爲:
                                                                     

因此,只要知道了embedding matrix E,就能計算出所有單詞的embedding vector ew。後面我們將重點介紹如何求出E。

值得一提的是,上述這種矩陣乘積運算E⋅Ow 效率並不高,矩陣維度很大,且Ow大部分元素爲零。通常做法是直接從E中選取第w列作爲ew即可。 

1.5 學習詞嵌入 

embedding matrix E 可以通過構建自然語言模型,運用梯度下降算法得到。舉個簡單的例子,輸入樣本是下面這句話:

I want a glass of orange (juice).

通過這句話的前6個單詞,預測最後的單詞“juice”。E 未知待求,每個單詞可用embedding vector ew表示。構建的神經網絡模型結構如下圖所示:

                       

神經網絡輸入層包含6個embedding vactors,每個embedding vector維度是300,則輸入層總共有1800個輸入。Softmax層有10000個概率輸出,與詞彙表包含的單詞數目一致。正確的輸出label是“juice”。其中E,W[1],b[1],W[2],b[2] 爲待求值。對足夠的訓練例句樣本,運用梯度下降算法,迭代優化,最終求出embedding matrix E。

這種算法的效果還不錯,能夠保證具有相似屬性單詞的embedding vector相近。

爲了讓神經網絡輸入層數目固定,可以選擇只取預測單詞的前4個單詞作爲輸入,例如該句中只選擇“a glass of orange”四個單詞作爲輸入。當然,這裏的4是超參數,可調。

一般地,我們把輸入叫做context,輸出叫做target。對應到上面這句話裏:

  • context: a glass of orange

  • target: juice

關於context的選擇有多種方法:

  • target前n個單詞或後n個單詞,n可調

  • target前1個單詞

  • target附近某1個單詞(Skip-Gram)

事實證明,不同的context選擇方法都能計算出較準確的embedding matrix E。

1.6 Word2Vec

Word2Vec算法,是一種簡單而且計算時更加高效的方式來學習這種類型的嵌入。

                                           

上節我們介紹了context和target的選擇方法,比較流行的是採用Skip-Gram模型。以下面這句話爲例:

I want a glass of orange juice to go along with my cereal.

Skip-Gram模型中,我們要做的是抽取上下文和目標詞配對,來構造一個監督學習問題。

做法是:首先隨機選擇一個單詞作爲context,例如“orange”;然後使用一個寬度爲5或10(自定義)的滑動窗,在context附近選擇一個單詞作爲target,可以是“juice”、“glass”、“my”等等。最終得到了多個context—target對作爲監督式學習樣本。

Note:

於是我們將構造一個監督學習問題,它給定上下文詞,要求你預測在這個詞正負10個詞距或者正負5個詞距內隨機選擇的某個目標詞。顯然,這不是個非常簡單的學習問題,因爲在單詞orange的正負10個詞距之間,可能會有很多不同的單詞。但是構造這個監督學習問題的目標並不是想要解決這個監督學習問題本身,而是想要使用這個學習問題來學到一個好的詞嵌入模型。

模型的細節:

假設使用一個10,000詞的詞彙表,有時訓練使用的詞彙表會超過一百萬詞。但我們要解決的基本的監督學習問題是學習一種映射關係,從上下文c,比如單詞orange,到某個目標詞,記爲t,可能是單詞juice或者單詞glass或者單詞my。在我們的詞彙表中,orange是第6257個單詞,juice是10,000個單詞中的第4834個,這就是你想要的映射到輸出y的輸入x

                             

爲了表示輸入,比如單詞orange,你可以先從one-hot向量開始,我們將其寫作Oc,這就是上下文詞的one-hot向量(上圖編號1所示)。然後你可以拿嵌入矩陣E乘以向量Oc,然後得到了輸入的上下文詞的嵌入向量,於是這裏ec=EOc。在這個神經網絡中(上圖編號2所示),我們將把向量ec喂入一個softmax單元。我通常把softmax單元畫成神經網絡中的一個節點(上圖編號3所示),這不是字母O,而是softmax單元,softmax單元要做的就是輸出y。然後我們再寫出模型的細節,這是softmax模型(上圖編號4所示),預測不同目標詞的概率。

                                                        

這裏θt是一個與輸出t有關的參數,ec爲context的embedding vector,且ec=E⋅Oc。我省略了softmax中的偏差項,想要加上的話也可以加上。

相應的loss function爲:

                                               

這是常用的softmax損失函數,y 就是隻有一個1其他都是0的one-hot向量,如果目標詞是juice,那麼第4834個元素就是1,其餘是0(上圖編號5所示)。類似的 是一個從softmax單元輸出的10,000維的向量,這個向量是所有可能目標詞的概率。

然後,運用梯度下降算法,迭代優化,最終得到embedding matrix E。

Skip-Gram模型:

總結一下,這大體上就是一個可以找到詞嵌入的簡化模型和神經網絡(上圖編號2所示),其實就是個softmax單元。矩陣E將會有很多參數,所以矩陣E有對應所有嵌入向量ec的參數(上圖編號6所示),softmax單元也有θt的參數(上圖編號3所示)。如果優化這個關於所有這些參數的損失函數,你就會得到一個較好的嵌入向量集,這個就叫做Skip-Gram模型。它把一個像orange這樣的詞作爲輸入,並預測這個輸入詞,從左數或從右數的某個詞,預測上下文詞的前面一些或者後面一些是什麼詞。

使用Skip-Gram存在的問題:

然而,這種算法計算量大,影響運算速度。主要因爲softmax輸出單元爲10000個,ŷ 計算公式中包含了大量的求和運算。

解決方案:

分級(hierarchical)的softmax分類器和負採樣Negative Sampling)。

 

意思就是說不是一下子就確定到底是屬於10,000類中的哪一類。想象如果你有一個分類器(上圖編號1所示),它告訴你目標詞是在詞彙表的前5000箇中還是在詞彙表的後5000個詞中,假如這個二分類器告訴你這個詞在前5000個詞中(上圖編號2所示),然後第二個分類器會告訴你這個詞在詞彙表的前2500個詞中,或者在詞彙表的第二組2500個詞中,諸如此類,直到最終你找到一個詞準確所在的分類器(上圖編號3所示),那麼就是這棵樹的一個葉子節點。

像這樣有一個樹形的分類器,意味着樹上內部的每一個節點都可以是一個二分類器,比如邏輯迴歸分類器,所以你不需要再爲單次分類,對詞彙表中所有的10,000個詞求和了。實際上用這樣的分類樹,計算成本與詞彙表大小的對數成正比(上圖編號4所示),而不是詞彙表大小的線性函數,這個就叫做分級softmax分類器。

加速softmax分類的方法

實際應用中,對樹形分類器做了一些改進。改進後的樹形分類器是非對稱的,通常選擇把比較常用的單詞放在樹的頂層,而把不常用的單詞放在樹的底層。這樣更能提高搜索速度。

數據採樣問題:

最後提一點,關於context的採樣,需要注意的是如果使用均勻採樣,那麼一些常用的介詞、冠詞,例如the, of, a, and, to等出現的概率更大一些。但是,這些單詞的embedding vectors通常不是我們最關心的,我們更關心例如orange, apple, juice等這些名詞等。所以,實際應用中,一般不選擇隨機均勻採樣的方式來選擇context,而是使用其它算法來處理這類問題。


Word2Vec的兩種模型:

  • Skip-Gram
  • CBOW(連續詞袋模型

                          

1.7 負採樣

上面Skip-Gram模型在於softmax計算起來很慢。接下來,你會看到一個改善過的學習問題叫做負採樣,它能做到與你剛纔看到的Skip-Gram模型相似的事情,但是用了一個更加有效的學習算法,讓我們來看看這是怎麼做到的。

我們在這個算法中要做的是構造一個新的監督學習問題,那麼問題就是給定一對單詞,比如orangejuice,我們要去預測這是否是一對上下文詞-目標詞(context-target)。

                           

Negative sampling是另外一種有效的求解embedding matrix EE的方法。它的做法是判斷選取的context word和target word是否構成一組正確的context-target對,一般包含一個正樣本和k個負樣本。例如,“orange”爲context word,“juice”爲target word,很明顯“orange juice”是一組context-target對,爲正樣本,相應的target label爲1。若“orange”爲context word不變,target word隨機選擇“king”、“book”、“the”或者“of”等。這些都不是正確的context-target對,爲負樣本,相應的target label爲0。一般地,固定某個context word對應的負樣本個數k一般遵循:

  • 若訓練樣本較小,k一般選擇5~20;

  • 若訓練樣本較大,k一般選擇2~5即可。

Negative sampling的數學模型爲:

                                                                       

其中,σσ表示sigmoid激活函數。

很明顯,negative sampling某個固定的正樣本對應k個負樣本,即模型總共包含了k+1個binary classification。對比之前介紹的10000個輸出單元的softmax分類,negative sampling轉化爲k+1個二分類問題,計算量要小很多,大大提高了模型運算速度。

最後提一點,關於如何選擇負樣本對應的target單詞,可以使用隨機選擇的方法。但有資料提出一個更實用、效果更好的方法,就是根據該詞出現的頻率進行選擇,相應的概率公式爲:
                                                                             

其中,f(wi) 表示單詞wi在單詞表中出現的概率。 

 

1.8 GloVe 詞向量

GloVe算法引入了一個新的參數:

  • Xij : 表示i出現在j之前的次數,即i和j同時出現的次數。

其中,i表示context,j表示target。一般地,如果不限定context一定在target的前面,則有對稱關係Xij=Xji;如果有限定先後,則Xij≠Xji 。接下來的討論中,我們默認存在對稱關係Xij=Xji。

GloVe模型的loss function爲:

                                                    

從上式可以看出,若兩個詞的embedding vector越相近,同時出現的次數越多,則對應的loss越小。

爲了防止出現“log 0”,即兩個單詞不會同時出現,無相關性的情況,對loss function引入一個權重因子f(Xij):

                                                    

當Xij=0,權重因子f(Xij)=0。這種做法直接忽略了無任何相關性的context和target,只考慮Xij>0 的情況。

出現頻率較大的單詞相應的權重因子f(Xij)較大,出現頻率較小的單詞相應的權重因子f(Xij)較小一些。具體的權重因子f(Xij)選取方法可查閱相關論文資料。

一般地,引入偏移量,則loss function表達式爲:

                                   

值得注意的是,參數θi 和ej 是對稱的。使用優化算法得到所有參數之後,最終的ew可表示爲:

                                                                   

最後提一點的是,無論使用Skip-Gram模型還是GloVe模型等等,計算得到的embedding matrix E的每一個特徵值不一定對應有實際物理意義的特徵值,如gender,age等。

1.9 情感分類

情感分類一般是根據一句話來判斷其喜愛程度,例如1~5星分佈。如下圖所示:

情感分類問題的一個主要挑戰是缺少足夠多的訓練樣本。而Word embedding恰恰可以幫助解決訓練樣本不足的問題。

首先介紹使用word embedding解決情感分類問題的一個簡單模型算法。

如上圖所示,這句話的4個單詞分別用embedding vector表示。e8928,e2468,e4694,e3180 計算均值,這樣得到的平均向量的維度仍是300。最後經過softmax輸出1~5星。這種模型結構簡單,計算量不大,不論句子長度多長,都使用平均的方式得到300D的embedding vector。該模型實際表現較好。


但是,這種簡單模型的缺點是使用平均方法,沒有考慮句子中單詞出現的次序,忽略其位置信息。而有時候,不同單詞出現的次序直接決定了句意,即情感分類的結果。例如下面這句話:

Completely lacking in good taste, good service, and good ambience.

雖然這句話中包含了3個“good”,但是其前面出現了“lacking”,很明顯這句話句意是negative的。如果使用上面介紹的平均算法,則很可能會錯誤識別爲positive的,因爲忽略了單詞出現的次序。

爲了解決這一問題,情感分類的另一種模型是RNN。

                                           

該RNN模型是典型的many-to-one模型,考慮單詞出現的次序,能夠有效識別句子表達的真實情感。

值得一提的是使用word embedding,能夠有效提高模型的泛化能力,即使訓練樣本不多,也能保證模型有不錯的性能。

1.10 詞嵌入除偏

Word embeddings中存在一些性別、宗教、種族等偏見或者歧視。例如下面這兩句話:

Man: Woman as King: Queen

Man: Computer programmer as Woman: Homemaker

Father: Doctor as Mother: Nurse

很明顯,第二句話和第三句話存在性別偏見,因爲Woman和Mother也可以是Computer programmer和Doctor。

以性別偏見爲例,我們來探討下如何消除word embeddings中偏見。
                                              

首先,確定偏見bias的方向。方法是對所有性別對立的單詞求差值,再平均。上圖展示了bias direction和non-bias direction。

                                         

然後,單詞中立化(Neutralize)。將需要消除性別偏見的單詞投影到non-bias direction上去,消除bias維度,例如babysitter,doctor等。

                                                 

最後,均衡對(Equalize pairs)。讓性別對立單詞與上面的中立詞距離相等,具有同樣的相似度。例如讓grandmother和grandfather與babysitter的距離同一化。

 

                                                 

值得注意的是,掌握哪些單詞需要中立化非常重要。一般來說,大部分英文單詞,例如職業、身份等都需要中立化,消除embedding vector中性別這一維度的影響。

 

二、測驗

1、假設你爲10000個單詞學習詞嵌入,爲了捕獲全部範圍的單詞的變化以及意義,那麼詞嵌入向量應該是10000維的。

  • 【 】 正確
  • 】 錯誤 

2、什麼是t-SNE?

  • 】 一種非線性降維算法。
  • 【 】 一種能夠解決詞向量上的類比的線性變換。
  • 【 】 一種用於學習詞嵌入的監督學習算法。
  • 【 】 一個開源序列模型庫。

3、假設你下載了一個已經在一個很大的文本語料庫上訓練過的詞嵌入的數據,然後你要用這個詞嵌入來訓練RNN並用於識別一段文字中的情感,判斷這段文字的內容是否表達了“快樂”。

那麼即使“欣喜若狂”這個詞沒有出現在你的小訓練集中,你的RNN也會認爲“我欣喜若狂”應該被貼上$y = 1$的標籤。

  • 】 正確
  • 【 】 錯誤

4、對於詞嵌入而言,下面哪一個(些)方程是成立的?

5、設E爲嵌入矩陣,e1234對應的是詞“1234”的獨熱向量,爲了獲得1234的詞嵌入,爲什麼不直接在Python中使用代碼Ee1234​呢?

6、在學習詞嵌入時,我們創建了一個預測P(target∣context)P(target \mid context)P(target∣context)的任務,如果這個預測做的不是很好那也是沒有關係的,因爲這個任務更重要的是學習了一組有用的嵌入詞。

  • 【 】 正確
  • 】 錯誤

7、在word2vec算法中,你要預測P(t∣c),其中t是目標詞(target word),c是語境詞(context word)。你應當在訓練集中怎樣選擇t與 c呢?

】 c與 t 應當在附近詞中。
【 】 c 是在t前面的一個詞。
【 】 c 是t之前句子中所有單詞的序列。
【 】 c是t之前句子中幾個單詞的序列。

8、假設你有1000個單詞詞彙,並且正在學習500維的詞嵌入,word2vec模型使用下面的softmax函數:

                                                    

以下說法中哪一個(些)是正確的?

9、假設你有10000個單詞詞彙,並且正在學習500維的詞嵌入,GloVe模型最小化了這個目標:

                                  

以下說法中哪一個(些)是正確的?

10、你已經在文本數據集m1上訓練了詞嵌入,現在準備將它用於一個語言任務中,對於這個任務,你有一個單獨標記的數據 m2 ,請記住,使用詞嵌入是一種遷移學習的形式,在這種情況下,你認爲詞嵌入會有幫助嗎?
 

 

三、編程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章