歷史
詞向量大致經過3個時期:
- 最早在做檢索系統,或者推薦系統時候,需要計算query和文檔,或者user和文檔之間的相關性,涉及到相關性,很直觀的利用到了向量的歐式距離活着餘弦距離。所以這個時期的向量化主要是基於整體數據的矩陣分解,使用的是整體數據的global信息。
- 詞向量的是一個主題迴歸的過程,相同主題的詞的向量彼此就比較接近。
- 分佈式語義的表示,使用機器學習的方式,然後選擇合適的學習目標,然後詞的向量作爲變量來學習迭代。
下面是整體大綱:
- Global Matrix Factorization
1.1 Vector Space Model (VSM)
1.2 Latent Semantic Analysis (LSA)
2.3 Latent Dirichlet Allocation (LDA) - Distributed Word Embedding
2.1 A Neural Probabilistic Language Model
2.2 CBOW and SKip-Gram by Tomas Mikolov
2.3 Global Vector by Manning - out of vocab training
Learning to Compute Word Embeddings On the Fly
[Character Embedding] (https://arxiv.org/abs/1601.01343)
1. Global Matrix Factorization
這個階段的向量空間大致是基於詞和文檔組成的矩陣,然後根據某種規則來降維,達到學習詞和文檔的向量化表示。因爲類似處理矩陣的信息,所以用到了全局的信息,是一個Global算法。
這樣的算法的優勢是利用了全局的統計信息,對於文檔的表示具有優勢。
但是對於單個詞來說,還是比較缺乏個性化的訓練,對詞的語義表示來說是比較匱乏的。
在維度上和計算量方面都是一個挑戰,在大預料庫上面訓練基本是不太可能的。
1.1 Vector Space Model-高緯向量空間
這個階段向量是用來表示文本段的,比如一個query,一個文檔,還沒有具體落到一個詞上面
最初使用向量空間模型的是在搜索場景,假設Query 和 Document都可以用一個向量來表示,
那麼計算Query和Document的相關性可以直接轉化爲求解他們向量的距離(如:歐式距離,餘弦距離等)
最初的做法是用基於BOW(詞袋)的思想,向量的維數是詞的個數,每一個維度代表文檔中對應詞是否出現出現爲1否則爲0(或者其他的權重變形,如:增加tf-idf信息)
假設:
其中向量的維度爲包含的詞的個數,這樣 Query 和Document的相似性爲:
然後Query 和 Document 的term的權重計算方式
term的權重都是基於term在全局和Query或者Document裏面的統計值進行計算
主要用到的是tf-idf及各種變形來進行
主要方式如下:

這個階段向量的計算已經解決了部分相似性和計算量的問題。
但是完全基於詞是否出現這樣的向量的弊端很明顯
比如:
高興/愉快, ship/boat 在這裏是完全不同的詞,但是實際上他們的語義是接近的
弊端:
- 在語義表示(Sematic)方面非常弱
- 向量的維度非常高
1.2 Latent Semantic Analysis-低維潛在語義
上面講的高緯度的向量空間,爲了解決
- 向量的維度過高,導致計算複雜度上升;
- 完全基於詞頻的統計會導致計算損失過多的語義方面的信息。很接近的,但是如果基於詞頻,就是完全不同的兩個id
這個階段是將高緯向量利用SVD方式進行降維,保留詞的語義表示。
基於SVD分解:
假設 term 和 Document組成的矩陣爲
其中m爲term的個數,n爲Document的個數。
根據SVD分解,我們可以知道,X可以分解爲一個左正交矩陣 * 對角矩陣 * 右對角矩陣的格式
其中
注:
所以
因爲
如果S的元素是從大到小排列的,那麼這種分解是唯一的
基於特徵值降維/降噪解釋
這裏我們簡單的回顧下特徵值和特徵向量的作用:
假設一個矩陣A分解後的特徵向量是一組正交基
這裏
V是一組正交基,那麼所有這個空間的向量都可以表示爲V的線性組合
所以
所以不同的特徵值大小代表矩陣在這個方向上面的重要程度,如果絕對值趨於0,那麼這個方向上面的信息是不重要,或者可能是噪音。
假設我們要簡化線性組合表示,是表示變的簡單,且不希望我們的信息損失太多。
這裏很直觀的是:直接將絕對值排在後面的特徵值置爲0
應用
S是一個對角矩陣,且它的對角元素是非負遞減的,所以如果我們需要保留r維的向量,我們只要捨棄S的第r個元素後面的秩,將這些元素置爲0。
這樣我們得到矩陣
優勢:
1. 既得到詞的語義向量,又得到Document的向量,所以不僅可以做詞的聚類,可以做Document的聚類
2. 降維作用明顯,又保留重要的信息
3. 這是全局的算法,基於的是所有詞和所有Document的信息,所以得到的解是全局最優的
4. 是一個topic算法:每一個term的表示都是這些特徵向量方向上面的線形組合,這些特徵向量是彼此沒有交集的,所以一個特徵方向是一個很好的topic表示
類似:
1. 不能解決一詞多義的問題
2. SVD的計算非常複雜,增量訓練困難
3. r的選擇不是學習的
1.3 Latent Dirichlet Allocation
LDA
上面介紹LSI,它是一個topic算法,
這裏的LDA介紹的也是類似的算法,每一個詞得到一個k維的向量,每一個向量是在這個topic下面的概率
假設有k個topic,我們得到每一個詞的表示是一個k維的向量,裏面的每一個元素代表這個詞在這個topic下面的概率
方法的目標:
給定topic數k, 計算每個詞在這些topic下面的概率,得到詞的概率向量
求解方式是構造概率模型,然後以概率最大化的方式計算得到
一些不證明的先驗知識:
- 給定一個文檔Document,它屬於哪個topic是服從多項式分佈的,但是分佈服從的參數
θ 是不同 - 給定一個topic,在這個topic出現某個詞也是服從多項式分佈。
- 假設
θ 的先驗分佈是Dirichlet分佈,那麼,先驗 Dirichlet分佈 + 多項式分佈=後驗Dirichlet分佈,所以這裏θ 的先驗分佈選擇Dirichlet分佈,另外一方面Dirichlet經常被用來作爲非均衡自由度下的向量採樣(比如Beta分佈是它的1個自由度的形式,我們經常使用Beta分佈來擬合點擊率或者轉化率分佈,然後將擬合出來的分佈作爲ctr預估的先驗分佈,或者作爲e && e策略的先驗分佈)。
最大似然函數
這裏跟着這個式子,通俗的介紹下這個式子的符號代表的意思:
α,β 是需要求的參數,分別代表θ 先驗Dir分佈的
這裏先簡單的用通俗的表達說下統計知識:一個Document在樣本中屬於哪一個topic服從多項式分佈,這個多項式的分佈參數我們認爲它服從Dirichlet分佈(如果二元參數就是一個Beta分佈),那麼它的後驗校正分佈也是是一個Dirichlet分佈。
- 我們都知道先驗分佈是獨立於單個樣本的,只和整體的統計有關係,假定Dirichlet先驗分佈的參數
α 是一個要學習的參數。那麼給定文檔i,我們從先驗Dirichlet概率分佈得到θ , 它是多項式分佈的參數。 - 得到的
θ ,就得到這個文檔在各個topic下面的概率zn - 假設概率矩陣爲
β ,βij=p(wj=1|zi=1) ,當topic 爲i時,每個詞出現的概率。 - 給定
zn 和β ,我們就可以得到,這樣就可以在p(wn|zn,β) 的概率分佈下面得到wn
然後我們開始介紹下式子的由來:
首先對於一個文檔
我們需要已經知道
- 首先
θ 是從Dir(α) 分佈裏面採樣得到的 - 得到
θ , 就得到文檔屬於每一個topic的多項分佈,zn~Multinomial(θ) ,∑znp(zn|θ)=1 - 對於給定的topic 概率
zn 和詞的概率分佈β , 然後從文檔中採樣出N個詞。對於每一個詞wn , 它基於當前的分佈的概率爲:p(wn|zn,β) , 然後對於所有的topic,我們得到該詞的概率:∑znp(zn|θ)p(wn|zn,β) 。然後這個文檔的N個詞的聯合概率爲:∏Nn=1∑znp(zn|θ)p(wn|zn,β) - 然後對於採樣的
θ 機型期望計算得到:p(Dd|α,β)=∫p(θ|α)(∏n=1N∑znp(zn|θ)p(wn|zn,β))dθ - 然後對於M個文檔,我們利用因子相乘的方式,對每個文檔的概率進行累乘,得到:
p(D|α,β)=∏d=1M∫p(θ|α)(∏n=1N∑znp(zn|θ)p(wn|zn,β))dθ
關於優化方式,從上面的步驟我們可以看到,求解的過程是一個近似逼近的過程,比如Laplace逼近,變量逼近,MCMC等,也可以用基於凸優化的變量逼近方式。
2. Distributed Word Embedding
這個階段,已經開始關注到詞本身的一些向量表示,更多的關注詞的向量表示和機器學習的目標結合,弱化了全局詞的統計信息。
(Bengio) 在一些語言模型中嘗試將詞作爲一個向量變量來做提督下降優化,這樣出來的詞的向量表示需要結合特定的語言構造模型來使用,單獨是用詞的向量的意義性不大。
(Cbow,Skip-Gram, Tomas Mikolov) 他們嘗試以詞是否鄰近作爲目標,兩個詞的向量直接做點積,如果數值大代表相近,如果距離遠代表不相似,這樣每個詞的訓練只是和他的語料庫裏裏面的相鄰的詞有關。學些出來詞之間的距離是有實際意義的。
(global vector, Manning) 在Mikolov的基礎上,融入了詞的全局統計信息
2.1 Neural Probabilistic Language Model
A Neural Probabilistic Language Model
這種工作其實開創了NLP的Embedding工作的先河,使得詞的表示可以合理的使用語義數值向量,而不是隻有count等統計信息,一旦有了語義方面的數值表示,不管在統計模型還是在神經網絡,都可以做很多的事情。
對於一個統計語言模型,它的統計信息可以被表示成條件概率的形式:
這個在長文本上面的效果不是很好,計算量特別大,所以常見的是N-Gram 模型,每個詞和序列的前N-1個詞相關。
似然函數
對於所有的文本信息:
softmax 層
我們看單個概率
我們知道
我們令:
所以
滿足這樣的f函數有很多,在神經網絡裏面,我們常用的是 softmax 函數。
比如:
Embedding 層
再看對詞
令:
中間業務 層
在Embedding層和softmax直接可以根據業務目標,定義各種層級

比如像這種單層的結構,也可以在各種NLP task 裏面,定義各種複雜的結構,比如RNN
這種方式:
詞向量的計算就不需要大矩陣的處理,可以用SGD等方式優化收斂,處理大規模的數據
然後能將詞向量的表示和訓練的任務相結合,訓練出固定維度的低緯向量
2.2 CBOW and SKip-Gram by Tomas Mikolov
Cbow,Skip-Gram, Tomas Mikolov and negtive sample, Tomas Mikolov
Neural Probabilistic Language Model(NPLM) 雖然開創了Embedding的先河,但是還是存在幾個問題需要解決:
- 基於深度模型訓練,對於大規模的預料數據,訓練是非常耗時耗資源的。
- 學習出來的詞的表示遷移能力不強,詞向量之間本身的距離沒有太多實際的物理含義。
這裏 Mikilov 等人在此基礎上對上面的模型做了改進

差異點:
1. 語料feature的滑動窗口不同
- NPLM:使用的是前N-1 個詞作爲訓練序列,第N個詞作爲預測序列,
- 這裏有兩種方式改進,一個詞是和它的前後詞都是關聯的,假設選擇的序列長度是2n +1,前n後n。
- CBOW(Continual bag of word):feafure爲前n後n個詞,他們的權重一樣,預測爲當前的值;
- Skip-Gram:中訓練的語料feature爲當前的詞,預測的爲前後n個詞。
2. 輸出層的函數不一致
- 在NPLM中,使用的是Softmax來預測當前的詞,但是一方面由於詞的量很大,比如漢語詞可能幾十萬,softmax在這麼大的空間中計算很浪費計算量;另外由於Softmax容易飽和,導致訓練的精度變低。
- 這裏(以Negative Sample)爲例,把softmax蛻化爲二分類,正樣本爲前後的預料庫,負樣本可以以採樣的形式生成,一個正樣本對應於5~20 個負樣本差不多就可以有很好的結果,採樣的話如果簡單話可以直接隨機採樣,比如:
p(w)~f(w)3/4 ,U(x) 是詞的一元count分佈,Z是歸一常量。或者更復雜點的p(w)~1−tf(w)‾‾‾‾√ 。所以目標函數簡化成:logσ(h(wn))+∑kEwneg[logσ(−h(wneg))]
3. 對於中間層h(w)的生成
- 在NPLM,各種複雜的forward 或者循環結構
- 這裏爲了使得詞之間的cosine或者歐式距離是有意義的,在構造logits時,直接可以用
wiwj 代表兩個詞來構造,比如在CBOW中,前後n個詞在預測當前詞的時候,隱藏層可以這麼構造:logits=h(wn)=(12n(w−n+w−n+1+...+wn−1+wn))⨀wn , 這樣其實有兩個隱藏的好處:1.cosine可以直接衡量詞向量;2.詞向量的可加性,如:v(man) + v(king) - v(woman)=v(quen)
CBOW和Skip-Gram According to Mikolov:
- Skip-gram: works well with small amount of the training data, represents well even rare words or phrases.
- CBOW: several times faster to train than the skip-gram, slightly better accuracy for the frequent words
- This can get even a bit more complicated if you consider that there are two different ways how to train the models: the normalized hierarchical softmax, and the un-normalized negative sampling. Both work quite differently.
2.3 Global Vector by Manning
global vector: Manning
背景
Cbow 或者Skip-Gram取得了很大的成功,不管在訓練效率還是在詞向量的計算效果上面。
但是考慮到Cbow/Skip-Gram 是一個local context window的方法,比如使用NS來訓練,缺乏了整體的詞和詞的關係,負樣本採用sample的方式會缺失詞的關係信息。
另外,直接訓練Skip-Gram類型的算法,很容易使得高曝光詞彙得到過多的權重
Global Vector融合了矩陣分解Latent Semantic Analysis (LSA)的全局統計信息和local context window優勢。融入全局的先驗統計信息,可以加快模型的訓練速度,又可以控制詞的相對權重。
概率及表示
首先用符號

我們看這個
我們知道solid是ice的形狀,gas是steam的狀態,如果用概率表示,我們希望
爲了數值化這個相對大小,我們引入他們的比例:
下一步:
首先它應該和
因爲
我們構造一個函數F
當然滿足這種關係的F函數是很多的,我們對F的構造進行分析:
- 既然F要體現
wi,wj 的相對對比大小關係,直接可以想到的是wi−wj 和wi/wj ,相對來說wi−wj 更加簡單,所以我們更新F的展現方式F(wi−wj,wk^)=PikPjk - 看最終的比例是一個常量的形式,但是F的輸入變量都是向量,一種最直接的方式是對向量做點積,得到常量。
F((wi−wj)Twk^)=PikPjk - 對於
Pik=XikXi ,它應該也可以直接表示成F的函數形式,爲:F(wTiwk^)=Pik - 綜上,滿足這種函數的F,我們很快會想到:F=exp, 所以,
wTiwk^=log(Pik)=log(Xik)−log(Xi)
目標函數構造
我們來看
我們知道
觀察
目標函數:
爲了避免
f(0)=0 ,或者至少當x趨近於0時,xlog2(x) 有限f(x) 非遞減函數,這樣可以避免出現次數低的詞的條件概率過低f(x) 有上界,避免頻率高的詞權重過高
這裏的
所以得到最終的目標函數:
到這裏,全部的問題已經解決,
對比Skip—Gram 對比:
我們看下詞向量訓練的似然函數, 然後從似然函數反推出上面的目標函數:
然後Negative sample的處理是,負樣本採樣,得到:
對於Global Vector
這裏如果詞i和詞j同時出現
因爲:
所以:
將交叉熵距離改成平方差距離方式:
其中
所以
到這裏,我們已經詳細的介紹了詞向量的歷史以及各種算法