1. 程式人生 > >吳恩達《深度學習》第五門課(2)自然語言處理與詞嵌入

吳恩達《深度學習》第五門課(2)自然語言處理與詞嵌入

星級 技術 ima lac 個數 應該 ras 時有 根據

2.1詞匯表征

(1)使用one-hot方法表示詞匯有兩個主要的缺點,以10000個詞為例,每個單詞需要用10000維來表示,而且只有一個數是零,其他維度都是1,造成表示非常冗余,存儲量大;第二每個單詞表示的向量相乘都為零(正交),導致沒能夠表示是詞匯之間的聯系,比如oriange和apple,queen和king應該是聯系比價緊密的,但是用上面的詞典表示無法體現出這一點。

(2)使用新的特征表示法,如下圖所示,特征比如有性別、高貴、年齡、顏色、尺寸、食物等等作為特征,那麽一個詞匯符合一個特征將會取較大的值,完全沒什麽關系取接近於0,加入設置了300個特征,那麽每個單詞就可以用300維的向量表示(解決了表示太冗余),而且相似的詞(比如apple和oriange)在不同特征可能都非常類似的值(即相似性高),從而使得詞匯之間有了聯系。

技術分享圖片

(3)在上面提到那些特征,在實際中是通過網絡來學習得到的,具體表示什麽特征是沒人知道的。

2.2使用詞嵌入

(1)如何用詞嵌入做遷移學習的步驟:

1.先從大量的文本機中學習詞嵌入(詞嵌入其實就是用一些特征來表示一個詞匯,而不是通過one-hot表示),當然也可以直接使用別人訓練好的詞嵌入。

2.然後根據你新任務的數據量來決定是否還要調整這些詞嵌入,如果數據量很少的話,直接使用之前的詞嵌入。數據多的話可以進行微調。

(3)詞嵌入和之前講過的人臉編碼非常的類似,有一點區別就是:詞嵌入,是有固定的詞匯表的,而在人臉編碼中可能會有一個完全沒有見過的人臉,然後需要對他進行編碼。

2.3詞嵌入的特性

(1)提出問題:man如果對應woman,那麽King應該對應什麽?方法是man的向量減去woman向量的值應該(約等於)等於King向量減去某個詞匯的向量,式子如下所示:

技術分享圖片

移項之後即找到等式兩邊的相似度:

技術分享圖片

(2)使用余弦相似度(其實就是夾角的余弦值),值接近1是表明越相似:

技術分享圖片

技術分享圖片

2.4嵌入矩陣

(1)如果詞匯量是10000,每個詞匯由300個特征表示,那麽嵌入矩陣就是一個300*10000的矩陣,嵌入矩陣與某個詞匯的one-hot表示的向量相乘會會的該詞匯的嵌入表示(即300維來表示),如下圖所示:

技術分享圖片

(2)上面的相乘由於one-hot只有特定的值是1,所以其實相乘的本質是取出該詞匯在嵌入矩陣的位置的那一列,所以實際中不會進行這麽復雜的矩陣乘法運算,而是用一些方法直接取出那一列即可,如Keras中有一個嵌入層,我們用這個嵌入層可以有效的從嵌入矩陣中提出出你需要的列,而不是對矩陣進行很慢很復雜的乘法運算。

2.5學習詞嵌入

(1)案例是:預測“I want a glass of oriange___”劃線處的單詞是什麽?可以用one-hot的I然後輸入到一個嵌入層,嵌入層會做的操作將嵌入矩陣與one-hot向量相乘得到該詞匯的嵌入向量,然後再輸入到後面的網絡進行輸出,所以通過訓練這整個網絡,也就可以學習了嵌入矩陣。

技術分享圖片

(2)後面有全連接層,所以輸入的維度需要固定,這時有一個上下文的概念(context),比如用目標預測位置的前4個單詞(這時嵌入層輸出總共4*300=1200個輸入輸入到下一層網絡中),或者目標位置前後各4個詞匯,實踐證明,在以訓練嵌入矩陣時,只使用目標位置的前一個詞匯作為上下文也是效果非常不錯的。

2.6Word2Vec

(1)使用Skip-Gram模型,其做法首先是上下文c進行采樣,然後目標詞就會在上下文c的正負10個詞距內進行采樣。換言之,在句子“I want a glass of orange juice to go alone with my cereal”,這時選擇上下文c假設是orange,然後再距離orange10以內的詞出現某個詞的概率,比如選中glass,這時glass就是相當於(輸出的標簽)y,而orange是x

(2)Skip-Gram可以理解為取一個詞,然後在這個詞周圍出現什麽詞的概率比較大,用這樣來構造一個監督學習,其目的就是為了學習嵌入矩陣。

(3)網絡示意圖和代價函數如下所示(其中y,y帽都是用one-hot表示的,y是上下文orange在一定詞距範圍內隨機取到的一個詞):

技術分享圖片

技術分享圖片

技術分享圖片

(4)采用上述的算法有一個問題就是計算量非常大,因為根據損失函數來看,其求和操作很慢因為詞匯量非常大可能達到百萬。解決的辦法有分級(hierarchical)的softmax分類器和負采樣(Negative Sampling)。

(5)分級的思路是(以10000個詞匯為例),第一個分類器先告訴你目標詞在前5000還是後5000,然後第二個分類器告訴你是前2500還是後2500,這樣計算復雜度是詞匯輸取對數,而不是線性的。另外所形成的樹一般常見的詞在比較淺的地方,少見的詞在更深的地方,如下圖所示。

技術分享圖片

2.7負采樣

(1)負采樣可以將上面的sotfmax變成一個二分類問題,這樣可以大大減小計算量。

(2)負采樣的做法是在選定上下文詞,然後在上下文詞限定的範圍內(如10個詞內)選取一個目標詞,然後網絡的輸出為1,再在字典隨機選取K個詞當成負樣本(即使選的詞在上下文的限定範圍內的詞也沒關系),然後網絡的輸出為0。如下圖所示:

技術分享圖片

(3)一個樣本對對應了一個二分類器(即輸出只有一個神經元(實質上是只看softmax10000維中對應target詞匯的那個維度),計算非常之簡單),與之前的sotfmax(輸出有10000個神經元)對比如下:

技術分享圖片

技術分享圖片

(4)如何選取樣本按照以下的方式,其中f(wi)是觀測到的在語料庫中的某個英語詞的詞頻率。

技術分享圖片

2.8GloVe詞向量

(1)Xij表示單詞i在單詞j上下文中出現的次數,所以這裏的i和j就和target和context的功能一樣,所以可以認為Xij等於Xji。

(2)目標函數是最小化下面的式子(約定Xij為0時,f(Xij)也為0,約定0log0=0,f(Xij)是一個權重):

技術分享圖片

2.9情感分類

(1)案例1:輸入x是一段文字,而輸出y是你要預測的相應情感,比如說是對一個餐館的評價的星級,分數為1-5。

技術分享圖片

(2)直接下載使用別人用非常大數據集訓練好的嵌入矩陣即可。

(3)方法一使用以下的網絡,每個單詞one-hot之後經過嵌入矩陣,形成詞嵌入,然後將所有單詞的特征進行平均,再將平均值送入到softmax中得到最終的評分。

技術分享圖片

(4)上一方法存在的問題是,沒有考慮到單詞的位置關系,所有在句子“Completely lacking in good taste, good service, and good ambiance.”中由於good非常多,所以最終預測得到一個較高的分數,但實際這句話是差評。所以第二種方法是使用循環神經網絡RNN,這將是一個多對一問題,這樣可以很好的得到一個情感分析的系統。

技術分享圖片

2.10詞嵌入除偏

(1)當一個系統Father對應Doctor,Mother對應Nurse時這就是一個偏見的系統。

(2)以消除性別偏差為例,敘述消除偏差的主要步驟。首先第一步是將所以帶寫別的組(如he,she)做ehe-eshe,egirl-eboy然後將這些結果求和取平均,得到如下的軸:

技術分享圖片

(2)第二步是中和步驟,意思就是將應該無偏的詞移動到軸上,如下圖所示:

技術分享圖片

(3)第三步是均衡步,即移動一對詞將其關於軸對稱(如上圖中grandmother與grandfather並沒有關於軸對稱,所以grandmother與中和步驟之後的babysister距離更近一點),如下圖所示

技術分享圖片

(5)有一點是,對於性別而言,有明確性別一一的詞特別少,用一個二分類器來判斷一個詞是否是有明確的性別的,然後將所有其他詞對這些有明確性別的詞做上面的步驟即可解決偏見問題。關於其他偏見同樣如此。

吳恩達《深度學習》第五門課(2)自然語言處理與詞嵌入