前言
Word Embedding是整個自然語言處理(NLP)中最常用的技術點之一,廣泛應用於企業的建模實踐中。我們使用Word Embedding能夠將自然文本語言映射為計算機語言,然后輸入到神經網絡模型中學習和計算。如何更深入地理解以及快速上手生成Word Embedding呢?本文對Word Embedding原理和生成方法進行了講解。
一、Word Embedding初探
什么是Word Embedding
一句話概述,Word Embedding即詞向量,是一種函數映射關系。我們知道,在機器學習中,特征都是以數值的形式進行傳遞的。同樣的,在NLP中,文本特征也需要被映射成數值向量。例如,我們將單詞“你好”進行Word Embedding后,可以把其映射成一個5維向量:你好 ——> (0.1, 0.5, 0.3, 0.2, 0.2)。
詞向量的映射過程
一般來說,我們采用“詞 ——> 向量空間1 ——> 向量空間2”的映射過程實現文本單詞向量化。整個映射過程可以分為兩步:
1、詞 ——> 向量空間1
該步驟解決把一個詞轉換成vector(數值向量)的問題。例如,將文本單詞轉換成One-Hot向量。
2、向量空間1 ——> 向量空間2
該步驟解決vector的優化問題,即在已經有了一個vector的情況下,尋求更好的辦法優化它。
二、使用One-Hot和SVD求Word Embedding方法
One-Hot(詞——>向量空間1)
One-Hot是目前最常見的用於提取文本特征的方法之一。本文使用One-Hot完成映射過程的第一步,即詞——>向量空間1。
我們將語料庫中的每一個詞都作為一個特征列,如果語料庫中有V個詞,則有V個特征列,例如:
在這一映射過程中,One-Hot存在以下缺點:1)容易產生稀疏特征;2)容易引發維度爆炸;3)使得詞間失去語義關系。
例如,按照常識,旅店(hotel)和汽車旅店(motel)間應該是具備某種相似性的,但是我們的映射結果卻表明他們的向量積為0。旅店(hotel)和汽車旅店(motel)之間的相似性等於其和貓(cat)之間的相似性,這顯然是不合理的。
改進方向:
1)嘗試將詞向量映射到一個更低維的空間;
2)同時保持詞向量在該低維空間中具備語義相似性,如此,越相關的詞,它們的向量在這個低維空間里就能靠得越近。
SVD(向量空間1——>向量空間2)
1、如何表示出詞和詞間的關系
SVD,即奇異值分解(Singular Value Decomposition),是在機器學習領域廣泛應用的算法,它不僅可以用於降維算法中的特征分解,也廣泛應用於推薦系統,以及自然語言處理等領域,是很多機器學習算法的基石。本文使用SVD來解決vector的優化問題。
我們首先構造了一個親和矩陣(affinity matrix),先保證在不降維的情況下,能夠反映出詞和詞間的關系。構造親和矩陣的方式有很多種,這里列舉較常見的兩種方式。
✦方式一
假設你有N篇文章,一共有M個去重詞,則可以構造親和矩陣如下:
其中每一個值表示單詞在某篇文章中的出現次數。這個矩陣可以反映詞的一些性質。比如一個詞是“播種”,那么它可能在“農學”類的文章里出現得多一些;一個詞是“電影”,那么它可能在“藝術”類的文章中出現得多一些。
✦方式二
假設我們有M個去重單詞,則可構造M*M的矩陣,其中每個值表示相應的兩個單詞在一篇文章里共同出現的次數,例如:
2、對親和矩陣進行分解
有了親和矩陣,就可以對其進行SVD分解,這個目的就是進行降維了,結果如下:
我們把原親和矩陣X(左邊)分解成了右邊的三部分,右邊的三個部分從左到右可以這么理解:
✦ U矩陣:從舊的高維向量空間到低維向量空間的一種轉換關系;
✦ ** σ矩陣**:方差矩陣。每一列表示低維空間中每一個坐標軸的信息蘊含量。方差越大,說明在該坐標軸上數據波動顯著,則信息蘊含量越豐富。在降維時,我們首先考慮保留方差最大的若干個坐標軸;
✦ V矩陣:每個詞向量的新表示方式。在和前兩個矩陣相乘后,得到最終的詞向量表示方式。
此時,右邊的矩陣依然是V維的,還沒有實現降維。因此,正如前文所說,我們取top k大的方差列,將U,σ和V三個矩陣按照方差從大到小的順序排列好,這樣就能得到最終的降維后的結果了:
3、SVD缺點
1)親和矩陣的維度可能經常變,因為總有新的單詞加進來,每加進來一次就要重新做SVD分解,因此這個方法不太通用;2)親和矩陣可能很稀疏,因為很多單詞並不會成對出現。
改進思路:
1)在降低稀疏性方面,可以不僅僅關注和一個單詞有上下文關系的那些詞;2)對於一個模型從沒有見過一個單詞,則考慮從上下文關系中猜到它的信息,以增加通用性。
沿着這兩個思路,我們可以考慮引入CBOW和Skip-Gram,來求word embedding。
三、CBOW和Skip-Gram求Word Embedding
CBOW的全稱是continuous bag of words(連續詞袋模型),其本質也是通過context word(背景詞)來預測一個單詞是否是中心詞(center word)。Skip-Gram算法則是在給定中心詞(center word)的情況下,預測一個單詞是否是它的上下文(context)。
本文主題是embedding,這里我們提到預測中心詞和上下文的最終目的還是通過中心詞和上下文,去訓練得到單詞語義上的關系,同時把降維做了,這樣就可以得到最終想要的embedding了。
CBOW
思路:
假設已知一個center word和一串context
可嘗試訓練一個矩陣V,它的作用是把單詞映射到新的向量空間中去(這就是我們想要的embedding!)
同時還可訓練一個矩陣U,它的作用是把embedding后的向量映射到概率空間,計算一個詞是center word的概率
訓練過程:
過程詳述:
(1)假設X的C次方是中間詞,且context的長度為m,那么context樣本可以表示成
其中每一個元素都是一個One-Hot vector。
(2)對於這些One-Hot變量,我們希望可以用Word Embedding將它映射到一個更低維的空間。這里要補充介紹一下,Word Embedding是一種function,映射到更低維的空間是為了降低稀疏性,並保持詞中的語義關系。
(3)取得embedding后輸入 vector的平均值。之所以要取平均值,是因為這些單詞都具有上下文聯系,為了訓練方便,我們可以用一個更緊湊的方法表示它們。
(4)這樣,我們就實現了一個文本在低維空間中的平均embedding。
接下來,我們需要訓練一個參數矩陣,對這個平均embedding進行計算,從而輸出平均embedding中每一個詞是中心詞的概率。
CBOW一條龍訓練過程回顧
softmax訓練打分參數矩陣
交叉熵:
skip-gram
skip-gram 已知中心詞,預測context。此處不再贅述。
總結
本文對Word Embedding原理和生成方法進行了講解,對Word Embedding生成過程中的相關問題進行了解答,希望能幫助讀者提升Word Embedding的實踐效率。
如今,機器學習快速發展,並應用到眾多行業場景。作為一家數據智能企業,個推在大規模機器學習和自然語言處理領域持續探索,也將Word Embedding應用到標簽建模等方面。目前,個推已經構建起覆蓋數千種標簽的立體畫像體系,為移動互聯網、品牌營銷、公共服務等領域的客戶開展用戶洞察、人口分析、數據化運營等持續提供助力。
后續個推還將繼續分享在算法建模、機器學習等領域的干貨內容,請保持關注哦。(本文作者:猛猿&小東邪)