一、詞匯表征
首先回顧一下之前介紹的單詞表示方法,即one hot表示法。
如下圖示,“Man”這個單詞可以用 \(O_{5391}\) 表示,其中O表示One_hot。其他單詞同理。
但是這樣的表示方法有一個缺點,看是看下圖中右側給出的例子,比如給出這么一句不完整的話:
I want a glass of orange ___
假設通過LSTM算法學到了空白處應該填“juice”.但是如果將orange改成apple,即
I want a glass of apple ___
那么是否也需要從頭開始學習“apple juice”嗎?能否通過構建“apple” 與 “orange” 的聯系讓它不需要重學就能進行判斷呢?所以下面給出了一種改進的表示方法,稱之為“詞嵌入(Word Embedding)”
我們知道單詞與單詞之間是有很多共性的,或在某一特性上相近,比如“蘋果”和“橙子”都是水果;或者在某一特性上相反:
比如“父親”在性別上是男性,“母親”在性別上是女性,通過構建他們其中的聯系可以將在一個單詞學習到的內容應用到其他的單詞上來提高模型的學習的效率,下面是一個簡化的表格用以說明:
原版
漢化版
(上面兩個表格分別是課堂上吳大大的講義和由大數據文摘整理得到的)
簡單介紹一下上面的表格的意思:
以“性別(Gender)”這一特征為例,若以-1表示男性,1表示女性,那么顯然“Man”在該特征上的值為-1,其他同理,不再贅述。
此時對於單詞“orange”和“apple”來說他們會共享很多的特性,比如都是水果,都是圓形,都可以吃,也有些不同的特性比如顏色不同,味道不同,但因為這些特性讓RNN模型理解了他們的關系,也就增加了通過學習一個單詞去預測另一個的可能性。
假設所用的特征有300個,那么每一個單詞就是由這300個特征值組成,因為這個維度是很高的了,所以可以使用$ t-SNE$算法將它們映射到二維空間之后進行可視化聚類,可以得到如下的效果圖:
上圖通過聚類將詞性相類似的單詞在二維空間聚為一類,所以這也就可以理解為什么這叫做"詞嵌入(Word Embedding)"了,即把原來由多維的特征空間表示單詞嵌入到二維空間中去了。
二、使用詞嵌入
下面介紹詞嵌入的實用場景。
以下圖為例,該圖表示的是輸入一段話,判斷出人名。通過學習判斷可以知道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。
詞嵌入其實與之前卷積神經網絡人臉識別課程中介紹的Siamese網絡有類似的地方。
即二者都是使用相同的評價模型對不同對象進行距離運算,距離越近則越相似
例如Siamese網絡是將兩張人臉圖像分別送到相同的CNN模型中計算出特征值並求出差值,來進行判斷二者的相似度。詞嵌入則是使用兩個單詞的特征維度進行相似度計算。
但是二者也有差別,以Siamese網絡為例,無論輸入的人臉圖像是什么,其總能計算出二者的相似度。而詞嵌入不同,因為有的單詞並不出現在某一個詞嵌入數據集中,所以此時則無法計算相似度。
三、詞嵌入的特性
我們小時候都做過反義詞或者近義詞的題目吧,那假如告訴機器“Man”↔“Woman”,那么能否退出“King”所對應的單詞呢?
這個問題被稱作詞匯的類比問題(或推理),通過研究詞嵌入的特征就可以解決這種問題。
如下圖示,我們用\(e_{Man}\)來表示“Man”這個單詞,其向量為[-1,0.01,0.03,0.09]。“Woman”同理,二者的差異向量為\(e_{Man}-e_{Woman}=[-2,0,0,0]\)(為方便理解,結果做了簡化)。
我們可以很容易知道“King”和“Queen”是相對應的,並且它們之間的差異向量也是[-2,0,0,0]。
大部分時候對於人而言,是很容易找到一對相近的單詞的,那么計算機如何找呢?其實按照上面的計算方法已經告訴我們了,即只要滿足如下關系式的即可:
已知單詞A和單詞B是對應的,求與單詞C相對應的單詞D,則有如下等式:
\(e_A - e_B \, \approx \, e_C-e_D\)
其中\(D\)滿足\(argmax_w \;\, Similarity(e_D, e_A-e_B+e_C)\)
注意上面的相似度函數為余弦公式,即:
當然也可以用其他距離公式。
如下圖用幾何方式能夠更容易理解,即只要找到與向量\(\vec{AB}\)最接近平行的向量\(\vec{CD}\)即可。
四、嵌入矩陣
如下圖示,左邊是詞嵌入矩陣,每一列表示該單詞的特征向量,每一行表示所有單詞在某一特征上的值的大小,這個矩陣用\(E\)表示,假設其維度是(300,10000)。
右邊矩陣是某一列單詞的One hot向量,這里以orange為例,其Onehot向量為\(O_{6257}=[0,…,1,…,0]\)。
那么已知詞嵌入矩陣和某一個單詞的Onehot向量,那么該單詞的特征向量則滿足如下等式:
* 表示矩陣乘法
這種獲取某個單詞特征向量的方法涉及太多運算,所以一般在實際操作中是直接對詞嵌入矩陣做列選擇即可得到所需單詞的特征向量的。
說一下這一小節的感受,雖然最后吳大大也說了在實際操作中只需要做列選擇就可以了,但是不明白他為什么還要介紹前面所謂的矩陣相乘運算。。。。
五、學習詞嵌入
下圖展示了預測單詞的方法,即給出缺少一個單詞的句子:
“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 下一個明確的定義,我們再次下一個非正式定義便於理解:
“word2vec” 是指將詞語word 變成向量vector 的過程,這一過程通常通過淺層的神經網絡完成,例如CBOW或者skip gram,這一過程同樣可以視為構建詞嵌表E的過程”。
1.Skip-grams
下圖詳細的展示了Skip-grams。即先假設Context(上下文)是orange,而Target(預測詞)則是通過設置窗口值得到的,例如設置為緊鄰的后一個單詞,此時Target則為juice,設置其他窗口值可以得到其他預測詞。
注意這個過程是用來構建詞嵌表的,而不是為了真正的去預測,所以如果預測效果不好並不用擔心。
2.Skip-grams公式
Skip-grams模型可用如下表達式表示:
Softmax公式為(假設輸出節點數為10000):
\(θ_t\) 表示與t有關的參數。
損失函數:
3.解決計算量大的問題
上面在使用Softmax的時候有一個很明顯的問題,那就是計算量過於繁瑣,所以為了解決計算量大的問題,提出了如下圖所示的方法,即Hierachical Softmax(分層的Softmax)
簡單的來說就是通過使用二叉樹的形式來減少運算量。
例如一些常見的單詞,如the、of等就可以在很淺的層次得到,而像durian這種少用的單詞則在較深的層次得到。
七、負采樣
對於skip gram model而言,還要解決的一個問題是如何取樣(選擇)有效的隨機詞 c 和目標詞 t 呢?如果真的按照自然隨機分布的方式去選擇,可能會大量重復的選擇到出現次數頻率很高的單詞比如說“the, of, a, it, I, ...” 重復的訓練這樣的單詞沒有特別大的意義。
如何有效的去訓練選定的詞如 orange 呢?在設置訓練集時可以通過“負取樣”的方法, 下表中第一行是通過和上面一
樣的窗口法得到的“正”(1)結果,其他三行是從字典中隨機得到的詞語,結果為“負”(0)。通過這樣的負取樣法
可以更有效地去訓練skip gram model.
| Context | Word | Target |
|---|---|---|
| orange | juice | 1 |
| orange | king | 0 |
| orange | book | 0 |
| orange | the | 0 |
| orange | of | 0 |
通過負取樣,我們的神經網絡訓練從softmax預測每個詞出現的頻率變成了經典binary logistic regression問題,概率公式用 sigmoid 代替 softmax從而大大提高了速度。
\(x_1=(orange, juice) \rightarrow y_1=1\)
\(x_2=(orange, king) \rightarrow y_2=0\)
\(...\)
\(P(y=1|c,t)=\sigma(\theta_t^Te_c)\)
最后我們通過一個並沒有被理論驗證但是實際效果很好的方式來確定每個被負選樣選中的概率為:
\(P(w_i)=\frac{f(w_i^{\frac{3}{4}})} {\sum_{j=1}^{10000}f(w_j^{\frac{3}{4}})}\)

八、GloVe詞向量
GloVe(Global vectors for word representation)雖然不想Word2Vec模型那樣流行,但是它也有自身的優點,即簡單。
下面先介紹該算法定義的變量的含義:
如下圖示,\(X_{ij}\)表示單詞i在語境j中出現的次數,i就相當於前面內容中提到的t(target),j相當於之前的c(context)。
該算法的主要方法是最小化如下公式(假設共有10000個單詞):
當\(x_{ij}=0\)時,\(f(x_{ij})=0\),並且定義\(0log0=0\)。
所以\(f(x_{ij})\)這么一個加權項就可以避免當\(x_{ij}=0\)時上面的式子是無窮大了。
同時對於像“the、of、a”等這些常用的詞,加權項可以給與適當的權重。而對於像“durian”這類不常用到的單詞,也可以給到更大但不至於過分的權重。
九、情緒分類
平時上淘寶我們都會對買的東西給出文字評價和對應的星級評價,如下圖示。
商家可以通過對這些數據來構建一個情緒分類器,從而可以在一些社交平台上如微博、QQ等大家的文字評論然后對應輸出相應的星級等級,這樣就可以更容易知道自家店是蒸蒸日上還是日落西山了,2333。
下圖展示了情緒分類器的模型。
可以看到下圖中的模型先將評語中各個單詞通過 詞嵌表(數據量一般比較大,例如有100Billion的單詞數) 轉化成對應的特征向量,然后對所有的單詞向量做求和或者做平均,然后構建Softmax分類器,最后輸出星級評級。
但是上面的模型存在一個問題,一般而言如果評語中有像"good、excellent"這樣的單詞,一般都是星級評分較高的評語,但是該模型對下面這句評語就顯得無能為力了:
“Completely lacking in good taste, good service, and good ambience.”
該評語中出現大量的good,如果直接做求和或者平均運算,經過分類器得到的輸出很大概率上是高星級評分的,但這顯然與該評語的本意不符。
之所以上面的模型存在那樣的缺點,就是因為它沒有把單詞的時序考慮進去,所以我們可以使用RNN構建模型來解決這種問題。RNN模型如下圖示:
另外使用RNN模型還有另一個好處,假設測試集中的評語是這樣的
“Completely absent of good taste, good service, and good ambience.”
該評語只是將lacking in替換成了absent of,而且我們即使假設absent並沒有出現在訓練集中,但是因為詞嵌表很龐大,所以詞嵌表中包含absent,所以算法依舊可以知道absent和lacking有相似之處,最后輸出的結果也依然可以保持正確。
十、詞嵌入除偏
現如今機器學習已經被用到了很多領域,例如銀行貸款決策,簡歷篩選。但是因為機器是向人們學習,所以好的壞的都會學到,例如他也會學到一些偏見或者歧視。
如下圖示
當說到Man:程序員的時候,算法得出Woman:家庭主婦,這顯然存在偏見。
又如Man:Doctor,算法認為Woman:Nurse。這顯然也存在其實和偏見。
上面提到的例子都是性別上的歧視,詞嵌入也會反映出年齡歧視、性取向歧視以及種族歧視等等。
人類在這方面已經做的不對了,所以機器應當做出相應的調整來減少歧視。
下面將主要從性別歧視上來舉例說明如何讓機器學習消除偏見。
下圖展示了一些單詞,你可以在心里先想想你看到這些單詞的第一時間認為他們所對應的性別是什么吧~~~
下面正式介紹算法步驟:
- 1.識別偏見方向
因為該例子是以消除性別歧視為目的,所以我們需要計算出圖中這些單詞之間的距離的平均值,進而作為偏見方向(bias direction)
\(e_{he}-e_{she}\)
\(e_{boy}-e_{girl}\)
\(e_{grandmother}-e_{grandfather}\)
將上面所求做平均運算,得到的向量方向即為偏見方向。
為方便理解,已在圖中畫出偏見方向,其余299D(除gender以外的其他單詞特征)向量與偏見方向正交,也在下圖中畫出。
- 2.詞性中和
像“boy,girl”這類詞在性別詞性上是很明確的,而且不存在歧視,所以無需中和(Neutralize)。
而圖中的babysister、doctor則需要中和,具體方法就是將該詞像非偏見方向投影得到一個新的坐標。
- 3.單詞對等距離化
如下圖示,雖然babysister中和化,但是它還是離grandmother更近,所以依舊帶有偏見
所以我們還需要將grandmother、grandfather這類與性別有關的對應詞等距分布在非偏見方向的兩側(紅色剪頭表示移動方向,紅色點表示移動后的新坐標),如下圖示。
