吳恩達 DeepLearning.ai 課程提煉筆記(5-2)序列模型 --- NLP和詞嵌入
以下為吳恩達老師 DeepLearning.ai 課程項目中,第五部分《序列模型》第二周課程「NLP和詞嵌入」關鍵點的筆記。
1. 辭彙表徵
在前面學習的內容中,我們表徵辭彙是直接使用英文單詞來進行表徵的,但是對於計算機來說,是無法直接認識單詞的。為了讓計算機能夠能更好地理解我們的語言,建立更好的語言模型,我們需要將辭彙進行表徵。下面是幾種不同的辭彙表徵方式:
one-hot 表徵:
在前面的一節課程中,已經使用過了one-hot表徵的方式對模型字典中的單詞進行表徵,對應單詞的位置用1表示,其餘位置用0表示,如下圖所示:
one-hot表徵的缺點:這種方法將每個詞孤立起來,使得模型對相關詞的泛化能力不強。每個詞向量之間的距離都一樣,乘積均為0,所以無法獲取詞與詞之間的相似性和關聯性。
特徵表徵:詞嵌入
用不同的特徵來對各個辭彙進行表徵,相對與不同的特徵,不同的單詞均有不同的值。如下例所示:
這種表徵方式使得詞與詞之間的相似性很容易地表徵出來,這樣對於不同的單詞,模型的泛化性能會好很多。下面是使用t-SNE演算法將高維的詞向量映射到2維空間,進而對詞向量進行可視化,很明顯我們可以看出對於相似的詞總是聚集在一塊兒:
2. 使用 Word Embeddings
Word Embeddings對不同單詞進行了實現了特徵化的表示,那麼如何將這種表示方法應用到自然語言處理的應用中呢?
名字實體識別的例子:
如下面的一個句子中名字實體的定位識別問題,假如我們有一個比較小的數據集,可能不包含durain(榴槤)和cultivator(培育家)這樣的辭彙,那麼我們就很難從包含這兩個辭彙的句子中識別名字實體。但是如果我們從網上的其他地方獲取了一個學習好的word Embedding,它將告訴我們榴槤是一種水果,並且培育家和農民相似,那麼我們就有可能從我們少量的訓練集中,歸納出沒有見過的辭彙中的名字實體。
詞嵌入的遷移學習:
有了詞嵌入,就可以讓我們能夠使用遷移學習,通過網上大量的無標籤的文本中學習到的知識,應用到我們少量文本訓練集的任務中。下面是做詞嵌入遷移學習的步驟:
- 第一步:從大量的文本集合中學習word Embeddings(1-100B words),或者從網上下載預訓練好的詞嵌入模型;
- 第二步:將詞嵌入模型遷移到我們小訓練集的新任務上;
- 第三步:可選,使用我們新的標記數據對詞嵌入模型繼續進行微調。
詞嵌入和人臉編碼:
詞嵌入和人臉編碼之間有很奇妙的聯繫。在人臉識別領域,我們會將人臉圖片預編碼成不同的編碼向量,以表示不同的人臉,進而在識別的過程中使用編碼來進行比對識別。詞嵌入則和人臉編碼有一定的相似性。
但是不同的是,對於人臉識別,我們可以將任意一個沒有見過的人臉照片輸入到我們構建的網路中,則可輸出一個對應的人臉編碼。而在詞嵌入模型中,所有辭彙的編碼是在一個固定的辭彙表中進行學習單詞的編碼以及其之間的關係的。
3. 詞嵌入的特性
類比推理特性:
詞嵌入還有一個重要的特性,它還能夠幫助實現類比推理。如下面的例子中,通過不同詞向量之間的相減計算,可以發現不同詞之間的類比關係,man——woman、king——queen,如下圖所示:
這種思想幫助研究者們對詞嵌入建立了更加深刻的理解和認識。
計算詞與詞之間的相似度,實際上是在多維空間中,尋找詞向量之間各個維度的距離相似度。
以上面的單詞為例:
對於上面的式子,我們尋找 ,則相當於尋找下面兩個結果的向量之間的最大相似度:相似度函數:
- 餘弦相似度函數(Cosine similarity):也就是向量 和 的內積
- 歐氏距離:
4. 嵌入矩陣
在我們要對一個辭彙表學習詞嵌入模型時,實質上就是要學習這個辭彙表對應的一個嵌入矩陣 。當我們學習好了這樣一個嵌入矩陣後,通過嵌入矩陣與對應詞的one-hot向量相乘,則可得到該辭彙的embedding,如下圖所示:
5. 學習詞嵌入
詞嵌入的學習演算法隨著時間的進行逐漸變得越來越簡單。
早期的學習演算法:
如下面的例子中,我們要通過前面幾個單詞,預測最後一個單詞:
- 通過將每個單詞的one-hot向量與嵌入矩陣相乘,得到相應的Embedding;
- 利用窗口控制影響預測結果的單詞數量,並將窗口內單詞的Embedding堆疊起來輸入到神經網路中;
- 最後通過softmax層輸出整個辭彙表各個單詞可能的概率;
- 其中,隱藏層和softmax層都有自己的參數,假設辭彙表的大小為 ,每個單詞的Embedding大小是 ,歷史窗口大小為 ,那麼輸入的大小即為 ,softmax輸出大小為辭彙表大小 ;
- 整個模型的參數就是嵌入矩陣 ,以及隱藏層和softmax層的參數 ;
- 可以利用反向傳播演算法進行梯度下降,來最大化訓練集似然函數,不斷地從語料庫中預測最後一個詞的輸出。
在不斷地訓練過程中,演算法會發現要想最好地擬合訓練集,就要使得一些特性相似的辭彙具有相似的特徵向量,從而就得到了最後的詞嵌入矩陣 。
其他的上下文和目標詞對:
我們將要預測的單詞稱為目標詞,其是通過一些上下文推導預測出來的。對於不同的問題,上下文的大小和長度以及選擇的方法有所不同。
- 選取目標詞之前的幾個詞;
- 選取目標詞前後的幾個詞;
- 選取目標詞前的一個詞;
- 選取目標詞附近的一個詞,(一種Skip-Gram模型的思想)。
6. Word2Vec
Word2Vec演算法是一種簡單的計算更加高效的方式來實現對詞嵌入的學習。
Skip-grams:
在Skip-grams模型中,我們需要抽取上下文(Content)和目標詞(Target)配對,來構造一個監督學習問題。
上下文不一定是要目標詞前面或者後面離得最近的幾個單詞,而是隨機選擇一個詞作為上下文,同時在上下文的一定距離範圍內隨機選擇另外一個詞作為目標詞。構造這樣一個監督學習問題的目的,並不是想要解決監督學習問題本身,而是想要使用這個問題來學習一個好的詞嵌入模型。
模型流程:
- 使用一個具有大量辭彙的辭彙表,如Vocab size = 10000k;
- 構建基本的監督學習問題,也就是構建上下文(C)和目標詞(T)的映射關係:C——T;
- (one-hot)—— (詞嵌入矩陣)—— (詞嵌入)—— 層—— ;
- : ,其中 是與輸出 有關的參數;
- 損失函數: ,這是在目標詞 表示為one-hot向量時,常用的softmax損失函數。
- 通過反向傳播梯度下降的訓練過程,可以得到模型的參數 和softmax的參數。
存在的問題:
- 計算速度的問題,如在上面的 單元中,我們需要對所有10000個整個辭彙表的詞做求和計算,計算量龐大。
- 簡化方案:使用分級softmax分類器(相當於一個樹型分類器,每個節點都是可能是一個二分類器),其計算複雜度是前面的 級別。在構造分級softmax分類器時,一般常用的詞會放在樹的頂部位置,而不常用的詞則會放在樹的更深處,其並不是一個平衡的二叉樹。
如何採樣上下文:
在構建上下文目標詞對時,如何選擇上下文與模型有不同的影響。
- 對語料庫均勻且隨機地採樣:使得如the、of、a等這樣的一些詞會出現的相當頻繁,導致上下文和目標詞對經常出現這類辭彙,但我們想要的目標詞卻很少出現。
- 採用不同的啟發來平衡常見和不常見的詞進行採樣。這種方法是實際使用的方法。
7. 負採樣
Skip-grams模型可以幫助我們構造一個監督學習任務,將上下文映射到目標詞上,從而讓我們能夠學習到一個實用的詞嵌入模型。但是其缺點就是softmax計算的時間複雜度較高。下面介紹一種改善的學習問題:負採樣。其能夠做到的和Skip-grams模型相似,但其學習演算法更加有效。
新的學習問題:
- 定義一個新的學習問題:預測兩個詞之間是否是上下文-目標詞對,如果是詞對,則學習的目標為1;否則為0。
- 使用k次相同的上下文,隨機選擇不同的目標詞,並對相應的詞對進行正負樣本的標記,生成訓練集。
- 建議:小數據集,k=5~20;大數據集,k=2~5。
- 最後學習 的映射關係。
模型:
在負採樣模型中,我們使用logistic回歸模型:
每個正樣本均有k個對應的負樣本。在訓練的過程中,對於每個上下文詞,我們就有對應的 個分類器。如下圖所示:
相比與Skip-grams模型,負採樣不再使用一個具有辭彙表大小時間複雜度高的龐大維度的Softmax,而是將其轉換為辭彙表大小個二分類問題。每個二分類任務都很容易解決,因為每個的訓練樣本均是1個正樣本,外加k個負樣本。
如何選擇負樣本:
在選定了上下文(Content)後,在確定正樣本的情況下,我們還需要選擇k個負樣本以訓練每個上下文的分類器。
- 通過單詞出現的頻率進行採樣:導致一些類似a、the、of等詞的頻率較高;
- 均勻隨機地抽取負樣本:沒有很好的代表性;
- (推薦): ,這種方法處於上面兩種極端採樣方法之間,即不用頻率分布,也不用均勻分布,而採用的是對詞頻的 除以詞頻 整體的和進行採樣的。其中, 是語料庫中觀察到的某個詞的詞頻。
8. GloVe 詞向量
GloVe(global vectors for word representation)詞向量模型是另外一種計算詞嵌入的方法,雖然相比下沒有Skip-grams模型用的多,但是相比這種模型卻更加簡單。
GloVe模型:
GloVe詞向量模型中,要定義一個量 ,表示目標詞 出現在上下文 的次數。模型的優化目標如下:
- 其中,因為當 為0時, 便沒有意義,所以添加 的加權項,當 時, ,另外 對於一些頻繁詞和不頻繁詞有著啟發式的平衡作用;
- 另外, 這一項中, 和 都是需要學習的參數,在這個目標演算法中二者是對稱的關係,所以我們可以一致地初始化 和 ,然後用梯度下降來最小化輸出,在處理完所有詞後,直接取二者的平均值作為詞嵌入向量: ,這與前面的演算法有所不同。
從上面的目標中,可以看出我們想要學習一些向量,他們的輸出能夠對上下文和目標兩個詞同時出現的頻率進行很好的預測,從而得到我們想要的詞嵌入向量。
詞嵌入的特徵化:
通過上面的很多演算法得到的詞嵌入向量,我們無法保證詞嵌入向量的每個獨立分量是能夠讓我們理解的。我們能夠確定是每個分量是和我們所想的一些特徵是有關聯的,其可能是一些我們能夠理解的特徵的組合而構成的一個組合分量。使用上面的GloVe模型,從線性代數的角度解釋如下:
加入的 項,可能構成任意的分量組合。
9. 情感分類
情感分類就是通過一段文本來判斷這個文本中的內容是否喜歡其所討論的內容,這是NLP中最重要的模塊之一。
情感分類任務存在的一個問題就是只有很小的數據集,缺乏訓練樣本。但是在使用了詞嵌入後,則能夠帶來很好的效果,足以訓練一個良好的情感分類模型。
平均值或和的模型:
- 獲取一個訓練好的詞嵌入矩陣 ;
- 得到每個詞的詞嵌入向量,並對所有的詞向量做平均或者求和;
- 輸入到softmax分類器中,得到最後的輸出 ;
- 缺點:沒有考慮詞序,可能會導致多數的積極辭彙削弱前面消極辭彙的影響,從而造成錯誤的預測。
RNN模型:
- 獲取一個訓練好的詞嵌入矩陣 ;
- 得到每個詞的詞嵌入向量,輸入到many-to-one的RNN模型中;
- 通過最後的softmax分類器,得到最後的輸出 。
- 優點:考慮了詞序,效果好很多。
10. 詞嵌入消除偏見
當下機器學習或者人工智慧演算法已經被應用到做一些非常重要的決策中,因此我們需要儘可能地保證其不受非預期形式的偏見的影響,如性別、種族歧視等等。下面介紹一些在詞嵌入中消除偏見的辦法。
目前的偏見問題:
以一些預料庫中學習到的詞嵌入向量,會發現學習到的詞向量存在下面一些具有性別、種族等偏見,這反映了人們在歷史的寫作中存在的這種社會偏見:
消除偏見的方法:
- 定義偏見的方向:如性別
- 對大量性別相對的辭彙進行相減並求平均: ;
- 通過平均後的向量,則可以得到一個或多個偏見趨勢相關的維度,以及大量不相關的維度;
- 中和化:對每一個定義不明確的辭彙,進行偏見的處理,如像 doctor、babysitter 這類詞;通過減小這些辭彙在得到的偏見趨勢維度上值的大小;
- 均衡:將如 grandmother 和 grandfather 這種對稱詞對調整至babysitter這類辭彙平衡的位置上,使babysitter這類辭彙處於一個中立的位置,進而消除偏見。
更多演算法的細節可以查閱圖中的文獻。
本文將同時更新在我的CSDN博客:
吳恩達Coursera深度學習課程 DeepLearning.ai 提煉筆記(5-2)-- NLP和詞嵌入
歡迎關注,一起學習一起進步喲。^_^
推薦閱讀:
TAG:深度學習DeepLearning | 人工智慧 | 自然語言處理 |