【deeplearning.ai】深度學習(9):自然語言處理

深度學習(10):自然語言處理?

binweber.top圖標

自然語言處理(Natural Language Processing,NLP)是人工智慧和語言學領域的學科分支,它研究實現人與計算機之間使用自然語言進行有效通信的各種理論和方法。

詞嵌入

前面介紹過,處理文本序列時,通常用建立字典後以one-hot的形式表示某個詞,進而表示某個句子的方法。這種表示方法孤立了每個詞,無法表現各個詞之間的相關性,滿足不了NLP的要求。

詞嵌入(Word Embedding)是NLP中語言模型與表徵學習技術的統稱,概念上而言,它是指把一個維數為所有詞的數量的高維空間(one-hot形式表示的詞)「嵌入」到一個維數低得多的連續向量空間中,每個單詞或片語被映射為實數域上的向量

如上圖中,各列分別組成的向量是詞嵌入後獲得的第一行中幾個詞的詞向量的一部分。這些向量中的值,可代表該詞與第一列中幾個詞的相關程度。

使用2008年van der Maaten和Hinton在論文[Visualizing Data using t-SNE]中提出的t-SNE數據可視化演算法,將詞嵌入後獲得的一些詞向量進行非線性降維,可到下面的映射結果:

其中可發現,各詞根據它們的語義及相關程度,分別匯聚在了一起。

對大量辭彙進行詞嵌入後獲得的詞向量,可用來完成命名實體識別(Named Entity Recognition)等任務。其中可充分結合遷移學習,以降低學習成本,提高效率。

好比前面講過的用Siamese網路進行人臉識別過程,使用詞嵌入方法獲得的詞向量可實現辭彙的類比及相似度度量。例如給定對應關係「男性(Man)」對「女性(Woman)」,要求機器類比出「國王(King)」對應的辭彙,通過上面的表格,可發現詞向量存在數學關係「Man - Woman approx King - Queen」,也可以從可視化結果中看出「男性(Man)」到「女性(女性)」的向量與「國王(King)」到「王后(Queen)」的向量相似。詞嵌入具有的這種特性,在2013年Mikolov等發表的論文[Linguistic Regularities in Continuous Space Word Representations]中提出,成為詞嵌入領域具有顯著影響力的研究成果。

上述思想可寫成一個餘弦(cos)相似度函數\sim(u, v) = frac{u^T v}{midmid u midmid_2 midmid v midmid_2} 以此度量詞向量的相似度。

詞嵌入方法

詞嵌入的方法包括人工神經網路、對詞語同現矩陣降維、概率模型以及單詞所在上下文的顯式表示等。以辭彙的one-hot形式作為輸入,不同的詞嵌入方法能以不同的方式學習到一個嵌入矩陣(Embedding Matrix),最後輸出某個詞的詞向量。

將字典中位置為 i 的詞以one-hot形式表示為 o_i 嵌入矩陣用 E 表示,詞嵌入後生成的詞向量用 e_i 表示,則三者存在數學關係: \E cdot o_i = e_i

例如字典中包含 10000 個詞,每個詞的one-hot形式就是個大小為 10000 	imes 1 的列向量,採用某種方法學習到的嵌入矩陣大小為 300 	imes 10000 的話,將生成大小為 300 	imes 1 的詞向量。

神經概率語言模型

採用神經網路建立語言模型是學習詞嵌入的有效方法之一。2003年Bengio等人的經典之作[A Neural Probabilistic Language Model]中,提出的神經概率語言模型,是早期最成功的詞嵌入方法之一。

模型中,構建了了一個能夠通過上下文來預測未知詞的神經網路,在訓練這個語言模型的同時學習詞嵌入。例如將下圖中上面的句子作為下面的神經網路的輸入:

經過隱藏層後,最後經Softmax將輸出預測結果。其中的嵌入矩陣 Ewb 一樣,是該網路中的參數,需通過訓練得到。訓練過程中取語料庫中的某些詞作為目標詞,以目標詞的部分上下文作為輸入,訓練網路輸出的預測結果為目標詞。得到了嵌入矩陣,就能通過前面所述的數學關係式求得詞嵌入後的詞向量。

Word2Vec

Word2Vec(Word To Vectors)是現在最常用、最流行的詞嵌入演算法,它由2013年由Mikolov等人在論文[Efficient Estimation of Word Representations in Vector Space]中提出。

Word2Vec中的Skip-Gram模型,所做的是在語料庫中選定某個詞(Context),隨後在該詞的正負10個詞距內取一些目標詞(Target)與之配對,構造一個用Context預測輸出為Target的監督學習問題,訓練一個如下圖結構的網路:

該網路僅有一個Softmax單元,輸出Context下Target出現的條件概率: \ p(t mid c) = frac{exp(	heta_t^T e_c)}{sum_{j=1}^m exp(	heta_j^T e_c)} \ 上式中 	heta_t 是一個與輸出的Target有關的參數,其中省略了用以糾正偏差的參數。訓練過程中還是用交叉熵損失函數

選定的Context是常見或不常見的詞將影響到訓練結果,在實際中,Context並不是單純地通過在語料庫均勻隨機採樣得到,而是採用了一些策略來平衡選擇。

Word2Vec中還有一種CBOW(Continuous Bag-of-Words Model)模型,它的工作方式是採樣上下文中的詞來預測中間的詞,與Skip-Gram相反。

以上方法的Softmax單元中產生的計算量往往過大,改進方法之一是使用分級Softmax分類器(Hierarchical Softmax Classifier),採用霍夫曼樹(Huffman Tree)來代替隱藏層到輸出Softmax層的映射。

此外,Word2Vec的作者在後續論文[Distributed Representations of Words and Phrases and their Compositionality]中提出了負採樣(Negative Sampling)模型,進一步改進和簡化了詞嵌入方法。

負採樣模型中構造了一個預測給定的單詞是否為一對Context-Target的新監督學習問題,採用的網路結構和前面類似:

訓練過程中,從語料庫中選定Context,輸入的詞為一對Context-Target,則標籤設置為 1 。另外任取 k 對非Context-Target,作為負樣本,標籤設置為 0 。只有較少的訓練數據, k 的值取5~20的話,能達到比較好的效果;擁有大量訓練數據, k 的取值取2~5較為合適。

原網路中的Softmax變成多個Sigmoid單元,輸出Context-Target( c,t )對為正樣本(  y = 1 )的概率: \p(y = 1 mid c, t) = sigma(	heta_t^T e_c)

其中的 	heta_t、e_c 分別代表Target及Context的詞向量。通過這種方法將之前的一個複雜的多分類問題變成了多個簡單的二分類問題,而降低計算成本。

模型中還包含了對負樣本的採樣演算法。從本質上來說,選擇某個單詞來作為負樣本的概率取決於它出現頻率,對於更經常出現的單詞,將更傾向於選擇它為負樣本,但這樣會導致一些極端的情況。模型中採用一下公式來計算選擇某個詞作為負樣本的概率: \p(w_i) = frac{f(w_i)^{frac{3}{4}}}{sum_{j=0}^m f(w_j)^{frac{3}{4}}}

其中 f(w_i) 代表語料庫中單詞 w_i 出現的頻率。

GloVe

GloVe(Global Vectors)是另一種現在流行的詞嵌入演算法,它在2014年由Pennington等人在論文[GloVe: Global Vectors for Word Representation]中提出。

Glove模型中,首先基於語料庫統計了詞的共現矩陣 XX 中的元素為 X_{i,j} ,表示整個語料庫中單詞 i 和單詞 j 彼此接近的頻率,也就是它們共同出現在一個窗口中的次數。之後要做的,就是優化以下代價函數: \J=sum_{i,j}^N f(X_{i,j})(	heta_i^T e_j + b_i + b_j - log(X_{i,j}))^2

其中 	heta_i、e_j 分是單詞 i 和單詞 j 的詞向量, b_i、b_j 是兩個偏差項, f(X_{i,j}) 是一個用以防止 X_{i,j} = 0log(X_{i,j}) 無解的權重函數,辭彙表的大小為 N

以上優化函數的推導過程見參考資料中的「理解GloVe模型」。

最後要說明的是,使用各種詞嵌入方法學習到的詞向量,並不像最開始介紹詞嵌入時展示的表格中Man、Woman、King、Queen的詞向量那樣,其中的值能夠代表著與Gender、Royal等詞的的相關程度,實際上它們大都超出了人們的能夠理解範圍。

詞嵌入應用:情感分類器

NLP中的情感分類,是對某段文字中所表達的情感做出分類,它能在很多個方面得到應用。訓練情感分類模型時,面臨的挑戰之一可能是標記好的訓練數據不夠多。然而有了詞嵌入得到的詞向量,只需要中等數量的標記好的訓練數據,就能構建出一個表現出色的情感分類器。

如上圖,要訓練一個將左邊的餐廳評價轉換為右邊評價所屬星級的情感分類器,也就是實現 xy 的映射。有了用詞嵌入方法獲得的嵌入矩陣 E ,一種簡單的實現方法如下:

方法中計算出句中每個單詞的詞向量後,取這些詞向量的平均值輸入一個Softmax單元,輸出預測結果。這種簡單的方法適用於任何長度的評價,但忽略了詞的順序,對於某些包含多個正面評價詞的負面評價,很容易預測到錯誤結果。

採用RNN能實現一個表現更加出色的情感分類器,此時構建的模型如下:

這是一個「多對一」結構的循環神經網路,每個詞的詞向量作為網路的輸入,由Softmax輸出結果。由於詞向量是從一個大型的語料庫中獲得的,這種方法將保證了詞的順序的同時能夠對一些詞作出泛化。

詞嵌入除偏

在詞嵌入過程中所使用的語料庫中,往往會存在一些性別、種族、年齡、性取向等方面的偏見,從而導致獲得的詞向量中也包含這些偏見。比如使用未除偏的詞嵌入結果進行辭彙類比時,「男性(Man)」對「程序員(Computer Programmer)」將得到類似「女性(Woman)」對「家務料理人(Homemaker)」的性別偏見結果。2016年Bolukbasi等人在論文[Man is to Computer Programmer as Woman is to Homemaker? Debiasing Word Embeddings]中提出了一些消除詞嵌入中的偏見的方法。

這裡列舉消除詞向量存在的性別偏見的過程,來說明這些方法。(摘自第二周課後作業)

1.中和本身與性別無關辭彙

中和(Neutralize)「醫生(doctor)」、「老師(teacher)」、「接待員(receptionist)」等本身與性別無關辭彙中的偏見,首先計算 :\g = e_{woman}-e_{man} 用「女性(woman)」的詞向量減去「男性(man)」的詞向量,得到的向量 g 就代表了「性別(gender)」。假設現有的詞向量維數為 50 ,那麼對某個詞向量,將 50 維空間分成兩個部分:與性別相關的方向 gg 正交的其他 49 個維度 g_{perp} 。如下左圖:

除偏的步驟,是將要除偏的詞向量,左圖中的 e_{receptionist} ,在向量 g 方向上的值置為 0 ,變成右圖所示的 e_{receptionist}^{debiased} 。所用的公式如下: \e^{bias}_{component} = frac{e cdot g}{||g||_2^2} 	imes g\e_{receptionist}^{debiased} = e - e^{bias}_{component}\

2.均衡本身與性別有關辭彙

對「男演員(actor)」、「女演員(actress)」、「爺爺(grandfather)」等本身與性別有關辭彙,如下左圖,假設「女演員(actress)」的詞向量比「男演員(actor)」更靠近於「嬰兒看護人(babysit)」。中和「嬰兒看護人(babysit)」中存在的性別偏見後,還是無法保證它到「女演員(actress)」與到「男演員(actor)」的距離相等。對一對這樣的詞,除偏的過程是均衡(Equalization)它們的性別屬性。

均衡過程的核心思想是確保一對詞(actor和actress)到 g_{perp} 的距離相等的同時,也確保了它們到除偏後的某個詞(babysit)的距離相等,如上右圖。

對需要除偏的一對詞 w1、w2 ,選定與它們相關的某個未中和偏見的單詞 B 之後,均衡偏見的過程如下公式: \ mu = frac{e_{w1} + e_{w2}}{2} \mu_{B} = frac {mu cdot 	ext{bias_axis}}{||	ext{biasaxis}||_2^2} 	imes 	ext{bias_axis} \mu_{perp} = mu - mu_{B} \e_{w1B} = frac {e_{w1} cdot 	ext{bias_axis}}{||	ext{bias_axis}||_2^2} 	imes 	ext{bias_axis} \e_{w2B} = frac {e_{w2} cdot 	ext{bias_axis}}{||	ext{bias_axis}||_2^2} 	imes 	ext{bias_axis} \e_{w1B}^{corrected} = sqrt{ |{1 - ||mu_{perp} ||^2_2} |} 	imes frac{e_{	ext{w1B}} - mu_B} {||(e_{w1} - mu_{perp}) - mu_B)||_2} \e_{w2B}^{corrected} = sqrt{ |{1 - ||mu_{perp} ||^2_2} |} 	imes frac{e_{	ext{w2B}} - mu_B} {||(e_{w1} - mu_{perp}) - mu_B)||_2} \e_1 = e_{w1B}^{corrected} + mu_{perp}\e_2 = e_{w2B}^{corrected} + mu_{perp}


參考資料

  1. 吳恩達-序列模型-網易雲課堂
  2. Andrew Ng-Sequence Model-Coursera
  3. deeplearning.ai
  4. Deep Learning in NLP(一)詞向量和語言模型
  5. 從SNE到t-SNE再到LargeVis
  6. word2vec前世今生
  7. Word2Vec導學第二部分-負採樣-csdn
  8. 理解GloVe模型-csdn
  9. 課程代碼與資料-GitHub

註:本文涉及的圖片及資料均整理翻譯自Andrew Ng的Deep Learning系列課程,版權歸其所有。翻譯整理水平有限,如有不妥的地方歡迎指出。


推薦閱讀:

清潔空氣法案的故事
【fMRI Note】Module10.1 Spatial and Temporal Resolution of Bold fMRI Part1
【fMRI Note】Module 5 Basic MR Physics
具備什麼樣的英語修養才能不靠中文字幕看懂coursera上的課程?

TAG:深度學習DeepLearning | 自然語言處理 | Coursera |