1. 程式人生 > >DeepLearning.ai筆記:(5-2) -- 自然語言處理與詞嵌入(NLP and Word Embeddings)

DeepLearning.ai筆記:(5-2) -- 自然語言處理與詞嵌入(NLP and Word Embeddings)


title: ‘DeepLearning.ai筆記:(5-2) – 自然語言處理與詞嵌入(NLP and Word Embeddings)’
id: dl-ai-5-2
tags:

  • dl.ai
    categories:
  • AI
  • Deep Learning
    date: 2018-10-18 17:00:17

本週主要講了NLP和詞嵌入的問題。

詞彙表徵

在前面學習的內容中,我們表徵詞彙是直接使用英文單詞來進行表徵的,但是對於計算機來說,是無法直接認識單詞的。為了讓計算機能夠能更好地理解我們的語言,建立更好的語言模型,我們需要將詞彙進行表徵。下面是幾種不同的詞彙表徵方式:

one-hot 表徵:

在前面的一節課程中,已經使用過了one-hot表徵的方式對模型字典中的單詞進行表徵,對應單詞的位置用1表示,其餘位置用0表示,如下圖所示:

one-hot表徵的缺點:這種方法將每個詞孤立起來,使得模型對相關詞的泛化能力不強。每個詞向量之間的距離都一樣,乘積均為0,所以無法獲取詞與詞之間的相似性和關聯性。

特徵表徵:詞嵌入

用不同的特徵來對各個詞彙進行表徵,相對與不同的特徵,不同的單詞均有不同的值。如下例所示:

這樣差不多的詞彙就會聚在一起:

詞嵌入

Word Embeddings對不同單詞進行了實現了特徵化的表示,那麼如何將這種表示方法應用到自然語言處理的應用中呢?

以下圖為例,該圖表示的是輸入一段話,判斷出人名。通過學習判斷可以知道orange farmer指的應該是人,所以其對應的主語Sally Johnson就應該是人名了,所以其對應位置輸出為1。

那如果把orange換成apple呢?通過詞嵌入演算法可以知道二者詞性類似,而且後面跟著farmer,所以也能確認Robert Lin是人名。

我們繼續替換,我們將apple farmer替換成不太常見的durian cultivator(榴蓮繁殖員)。此時詞嵌入中可能並沒有durian這個詞,cultivator也是不常用的詞彙。這個時候怎麼辦呢?我們可以用到遷移學習。

  1. 學習含有大量文字語料庫的詞嵌入(一般含有10億到1000億單詞),或者下載預訓練好的詞嵌入

  2. 將學到的詞嵌入遷移到相對較小規模的訓練集(例如10萬詞彙),這個時候就能體現出相比於使> 用one hot表示法,使用詞嵌入的優勢了。如果是使用one hot,那麼每個單詞是1×100000表> 示,而用詞嵌入後,假設特徵維度是300,那麼只需要使用 1×300的向量表示即可。

  3. (可選) 這一步驟就是對新的資料進行fine-tune。

詞嵌入和人臉編碼之間有很奇妙的聯絡。在人臉識別領域,我們會將人臉圖片預編碼成不同的編碼向量,以表示不同的人臉,進而在識別的過程中使用編碼來進行比對識別。詞嵌入則和人臉編碼有一定的相似性。

但是不同的是,對於人臉識別,我們可以將任意一個沒有見過的人臉照片輸入到我們構建的網路中,則可輸出一個對應的人臉編碼。而在詞嵌入模型中,所有詞彙的編碼是在一個固定的詞彙表中進行學習單詞的編碼以及其之間的關係的。

詞嵌入的特性

可以得到 man to woman ,正如 King to Queen。

可以通過詞嵌入,計算詞之間的距離,從而實現類比。

關於詞相似度的計算,可以使用餘弦公式。

當然也可以使用距離公式:

u v 2 ||u - v||^2

嵌入矩陣

如下圖示,左邊是詞嵌入矩陣,每一列表示該單詞的特徵向量,每一行表示所有單詞在某一特徵上的值的大小,這個矩陣用 E E 表示,假設其維度是**(300,10000)**。

在原來的one-hot中每個詞是維度為10000的向量,而現在在嵌入矩陣中,每個詞變成了維度為300的向量。

學習詞嵌入

下圖展示了預測單詞的方法,即給出缺少一個單詞的句子:

I want a glass of orange ___

計算方法是將已知單詞的特徵向量都作為輸入資料送到神經網路中去,然後經過一系列計算到達 Softmax分類層,在該例中輸出節點數為10000個。經過計算juice概率最高,所以預測為

I want a glass of orange juice

在這個訓練模式中,是通過全部的單詞去預測最後一個單詞然後反向傳播更新詞嵌表E

假設要預測的單詞為W,詞嵌表仍然為E,需要注意的是訓練詞嵌表和預測W是兩個不同的任務。

如果任務是預測W,最佳方案是使用W前面n個單詞構建語境。

如果任務是訓練E,除了使用W前全部單詞還可以通過:前後各4個單詞、前面單獨的一個詞、前面語境中隨機的一個詞(這個方式也叫做 Skip Gram 演算法),這些方法都能提供很好的結果。

Word2Vec

word2vec” 是指將詞語word 變成向量vector 的過程,這一過程通常通過淺層的神經網路完成,例如CBOW或者skip gram,這一過程同樣可以視為構建詞嵌表E的過程”。

Skip-grams

下圖詳細的展示了Skip-grams。即先假設Context(上下文)orange,而Target(預測詞)則是通過設定視窗值得到的,例如設定為緊鄰的後一個單詞,此時Target則為juice,設定其他視窗值可以得到其他預測詞。

注意這個過程是用來構建詞嵌表的,而不是為了真正的去預測,所以如果預測效果不好並不用擔心。

上面在使用Softmax的時候有一個很明顯的問題,那就是計算量過於繁瑣,所以為了解決計算量大的問題,提出瞭如下圖所示的方法,即Hierachical Softmax(分層的Softmax)

簡單的來說就是通過使用二叉樹的形式來減少運算量。

例如一些常見的單詞,如theof等就可以在很淺的層次得到,而像durian這種少用的單詞則在較深的層次得到。

負取樣

對於skip gram model而言,還要解決的一個問題是如何取樣(選擇)有效的隨機詞 c 和目標詞 t 呢?如果真的按照自然隨機分佈的方式去選擇,可能會大量重複的選擇到出現次數頻率很高的單詞比如說“the, of, a, it, I, …” 重複的訓練這樣的單詞沒有特別大的意義。

如何有效的去訓練選定的詞如 orange 呢?在設定訓練集時可以通過“負取樣”的方法, 下表中第一行是通過和上面一
樣的視窗法得到的“正”(1)結果,其他三行是從字典中隨機得到的詞語,結果為“負”(0)。通過這樣的負取樣法
可以更有效地去訓練skip gram model.

負取樣的個數k由資料量的大小而定,上述例子中為4. 實際中資料量大則 k = 2 ~ 5,資料量小則可以相對大一些k = 5 ~ 20

通過負取樣,我們的神經網路訓練從softmax預測每個詞出現的頻率變成了經典binary logistic regression問題,概率公式用 sigmoid 代替 softmax從而大大提高了速度。

選詞概率的經驗公式:

GloVe詞向量

GloVe(Global vectors for word representation)雖然不想Word2Vec模型那樣流行,但是它也有自身的優點,即簡單。

這裡就不介紹了,看不太懂。

情感分類

情感分類就是通過一段文字來判斷這個文字中的內容是否喜歡其所討論的內容,這是NLP中最重要的模組之一。

可以看到下圖中的模型先將評語中各個單詞通過 詞嵌表(資料量一般比較大,例如有100Billion的單詞數) 轉化成對應的特徵向量,然後對所有的單詞向量做求和或者做平均,然後構建Softmax分類器,最後輸出星級評級。

但是上面的模型存在一個問題,一般而言如果評語中有像"good、excellent"這樣的單詞,一般都是星級評分較高的評語,但是該模型對下面這句評語就顯得無能為力了:

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

之所以上面的模型存在那樣的缺點,就是因為它沒有把單詞的時序考慮進去,所以我們可以使用RNN構建模型來解決這種問題。

另外使用RNN模型還有另一個好處,假設測試集中的評語是這樣的

Completely absent of good taste, good service, and good ambience.

該評語只是將lacking in替換成了absent of,而且我們即使假設absent並沒有出現在訓練集中,但是因為詞嵌表很龐大,所以詞嵌表中包含absent,所以演算法依舊可以知道absentlacking有相似之處,最後輸出的結果也依然可以保持正確。

詞嵌入除偏

現如今機器學習已經被用到了很多領域,例如銀行貸款決策,簡歷篩選。但是因為機器是向人們學習,所以好的壞的都會學到,例如他也會學到一些偏見或者歧視。

如下圖示

當說到Man:程式設計師的時候,演算法得出Woman:家庭主婦,這顯然存在偏見。

又如Man:Doctor,演算法認為Woman:Nurse。這顯然也存在其實和偏見。

上面提到的例子都是性別上的歧視,詞嵌入也會反映出年齡歧視、性取向歧視以及種族歧視等等。

人類在這方面已經做的不對了,所以機器應當做出相應的調整來減少歧視。

消除偏見的方法:

  • 定義偏見的方向:如性別

    • 對大量性別相對的詞彙進行相減並求平均: e h e e s h e e m a l e e f e m a l e e_{he}−e_{she}、e_{male}−e_{female} ⋯;
    • 通過平均後的向量,則可以得到一個或多個偏見趨勢相關的維度,以及大量不相關的維度;
  • 中和化:對每一個定義不明確的詞彙,進行偏見的處理,如像doctor、babysitter這類詞;通過減小這些詞彙在得到的偏見趨勢維度上值的大小;

  • 均衡:將如gradmother和gradfather這種對稱詞對調整至babysitter這類詞彙平衡的位置上,使babysitter這類詞彙處於一箇中立的位置,進而消除偏見。