1. 程式人生 > >吳恩達《深度學習》第五課第二週

吳恩達《深度學習》第五課第二週

序列模型——自然語言處理與詞嵌入

2.1 詞彙表徵

1.通常在序列模型中我們設定詞彙表

表徵一個詞彙的集合,對某個具體的單詞,使用one-hot形式表示,比如:

這樣表徵雖然思路簡單,但是存在一個缺陷:由於任意兩個詞彙one-hot進行內積所得的結果均為0,因此無法描述詞彙之間的某些聯絡。比如apple和orange都是水果,那麼在預測下面兩句話時本應該有借鑑作用。

2.特徵化表徵:詞嵌入

為解決one-hot無法描述詞彙之間關係的問題,我們採用另外一種表徵方式,提取一些可能的描述特徵,如下:

假設有300個特徵,這樣每個單詞會有一個由300元素組成的列向量,此時有相似特性的單詞在距離上就會更靠近,將這些向量降維至2維,會得到下圖所示的分類

2.2 詞嵌入的使用

1.在NPL中的應用原理,詞嵌入其本質是遷移學習,可以利用大量的無標籤文字來構建詞嵌入學習到大量有用的知識,在NPL演算法只有很少訓練樣本的情況下,可以幫助識別出一些不在樣本里的詞彙的意義。比如:

Drian cultivator(榴蓮培育工)這個詞彙在訓練樣本中未出現,但是由於有詞嵌入演算法的輔助可以得到drian接近orange,cultivator接近farmer,由此推斷出Drian cultivator是人,因而學習到robert lin 是人名。

2.3詞嵌入的特性:類比推理

1.類比推理就是根據兩個詞之間的某種聯絡,推理出其他具有相似聯絡的兩個詞彙。其實現的思路如下圖。

2.餘弦相似度:作為一種測量兩個詞嵌入向量間相似度的方法。

2.4嵌入矩陣

1.嵌入矩陣

當我們使用演算法來學習詞嵌入時實際上是學習一個嵌入矩陣。假設字典包含10k個單詞,特性為300,這樣可以構成一個嵌入矩陣E(300 X 10K)

假設單詞orange在字典中的編號為6257,則orange的one-hot向量為O_6257是一個10k的向量,此時字典中j(6257)單詞的嵌入向量為e_j

Tips:在實際運用中,想獲取某個單詞的嵌入向量通常是使用函式直接從嵌入矩陣中查詢某列,而不需要進行矩陣運算。

2.5學習詞嵌入

1.神經語言模型,使用神經網路來推測下面句子中缺少的單詞

首先建立每個單詞的嵌入向量,將I,want,a, glass, of, orange這6個單詞的嵌入向量作為神經網路的特徵輸入來訓練神經網路

在這種演算法中還需要設定視窗大小,即利用前視窗大小個資料(稱為context:上下文)來預測下一個資料。假設取size=4,那麼神經網路的輸入將不再是1800而是1200

2.上下文與目標單詞選擇的方式

(1)選擇目標單詞前的size個詞彙

(2)選擇目標單詞左右各選取size個詞彙

(3)選擇目標單詞前的1個詞彙

(4)選擇目標單詞附近的1個詞彙:skip gram演算法

通常建立語言模型時選擇的方式為(1),而學習詞嵌入則可選用(2-4)方式

2.6word2vec

1.作用:一種簡單且高效的學習詞嵌入的方式

2.Skip-grams

假設訓練集給定例句:I want a glass of orange juice to go along with my cereal,我們需要抽取上下文和目標詞相配對,這樣一來就構造了一個監督學習問題。在這個問題中上下文context不一定是目標詞target最近的某幾個詞,而是隨機的選取一個詞,比如:orange。然後隨機的在一定範圍內選另一個詞,這樣會構成對個詞對,但其中只有1個能構成上下文關係,但Skip-grams並不是要解決這個監督學習問題,而是要通過這種方式來學習一個詞嵌入模型。

3. word2vec模型

假設詞表大小為10,000k,我們選定的context=orange,target=juice構成一個對映,整個學習及轉換過程如下:

4.存在的問題

(1)計算速度:在softmax分類中需要計算的概率公式如下圖,需要對詞表中的1000個單詞做求和計算,此時計算量並不龐大,但是當詞表為100K甚至更大時那麼分母中的求和操作會變得相當慢。

對於這個問題可以使用 分級softmax:該演算法不是在整個詞表中進行比對查詢,而是使用類似二叉樹的方法分級查詢,這樣計算量將是原來的log|v|。而且在工程應用中通常不使用完美平衡的分類樹,而是

(2)如何對context取樣

一旦對c取樣,那麼target詞彙就在c正負10個單詞範圍內取樣。因此對c取樣的方法很重要通常有兩種方法:一是對語料庫均勻且隨機的採用,這樣會使the, of, a, and, to等簡單詞彙頻繁出現,這種方法顯然不好;二是採用的不同的啟發來平衡常見詞和不常見詞之間出現的頻率

2.7負取樣:解決softmax的速度問題

1.生成訓練集

還以2.6節中的例句為例,假設選擇了orange為context在該詞正負10個詞的範圍內隨機每選擇一個word作為target即可和context組成一個數據對作為輸入X,只有當word=juice=target時y=1,其餘均為0.對於K的選擇原則是:當資料集較小時,K=5~20;當資料集較大時,K=2~5.在下圖中K=4,而不是5.

2.模型

使用生成的訓練樣本來訓練一個邏輯迴歸模型計算c(context)與t(target)配對時的概率,如下圖

注意此時c是確定的,因此在計算P(y=1|c,t)時每給定一個t就有一個概率值,而t的可選數量是由詞典的size決定的。假設size=10000,那麼將有10000個二分類節點,但是我們每次迭代只訓練其中的K個負樣本和1個正樣本(代表真正目標的那個分類器),因此計算成本非常低,將這個過程轉化成神經網路模型為:

3.選取負樣本

(1)使用在語料庫裡的經驗頻率進行取樣,但是會導致the, of, and這類高頻詞被取樣

(2)用1:詞彙表總詞數均勻且隨機的抽取,但這對英文樣本沒有代表性

(3)使用英文文字分佈頻率,頻率公式如下,其中f(w_i)是觀察到的某個詞的頻率

2.8 Glove(global vectors)詞向量

1. Glove詞向量模型之所有被大量採用,是因為其原理更簡單而且效果也很好。在word2vec或skip-grams中採用的是c和t詞對,而在glove中使用X_ij(類似一個計數器)來表示i出現在上下文j中的次數,這裡i相當於c,j相當於t。通常在定義上下文和目標詞的範圍在正負10個詞的時候,會有X_ij = X_ji的對稱關係。

2.glove模型

在模型中我們的優化目標是,

其實質是對i和j兩個詞同時出現的概率進行預測。f(X_ij)表示加權項,其作用非常大我們可以通過設定f(X_ij=0)=0來限制(-log X_ij)^2變得無窮大,f()的選擇有一些基本原則——既不給諸如:this, is, of, a等高頻詞彙過高的權重;也不給諸如:durian等低頻詞彙過低的權重。在優化目標中theta和e是對稱的,因此有一種訓練方法就是一致地初始化theta和e,然後使用梯度下降來最小化輸出,當每個詞都處理完之後取平均值。

3.詞潛入特徵的說明

例如在下圖這個例子中,有gender, royal, age, food四個特徵

在使用某種演算法來學習一個詞嵌入時,我們無法保證嵌入向量的每個獨立組成是可理解的。也就是說演算法在學習過程中對每個特性學習的結果之間是正交的,可能是下圖所示的。

但是這不影響演算法的有效性,因為線上性運算中有這樣一個特性

2.9情感分類模型

1.情感分類問題:對評語做出好惡的判斷

情感分類的難點是標記的訓練樣本沒有那麼多。

2.簡單情感分類模型

使用平均計算對任意長度的句子進行評分

這個演算法的最主要的問題是沒有考慮詞序,尤其是負面的評價中類似:沒有好的環境、好的味道、好的廚師,這句話裡有很多個好,以至於演算法會覺得這是一個正面的評價。

3.RNN情感分類

這是一個典型的多對一的RNN模型,可以學到類似not good這個片語,從而得出更準確的判斷

2.10詞嵌入除偏

1.詞嵌入中的偏見問題

我們要解決的偏見問題是下圖中這些錯誤預測的結果

演算法很容易學習到語料庫中的一些偏見看法,而消除偏見有助於司法、教育、醫療等社會問題的公平解決和相關政策的制定。

2.定位詞嵌入中的偏差(性別歧視)

(1)辨別詞嵌入中偏見的趨勢

(2)中和:對於定義不明確的詞可以將其處理一下以避免偏見,比如有些詞天生就和性別有關,如:father,mother。但是有些詞如:doctor、babysitter等可以將它們投射到non-bias座標軸來減少或消除它們性別歧視趨勢的成分,也就是減少bias軸上的分量。

(3)均衡:對於grandmother、grandfather這樣的詞對,如果babysitter經過中和處理後改變了與grandmother、grandfather之間距離(即從相等變成不等了),而均衡步驟要做的就是,將grandmother、grandfather詞對移動到與non-bias軸對稱的位置