word2vec生成詞向量原理


假設每個詞對應一個詞向量,假設:

1)兩個詞的相似度正比於對應詞向量的乘積。即:$sim(v_1,v_2)=v_1\cdot v_2$。即點乘原則;

2)多個詞$v_1\sim v_n$組成的一個上下文用$C$來表示,其中$C=\sum_{i=1}^{n}v_i$。$\frac{C}{|C|}$稱作上下文C的中心向量。即加和原則;

3)在上下文$C$中出現單詞$A$的概率正比於能量因子$e^{-E(A,C)},where E=-A\cdot C$。即能量法則(可參看熱統中的配分函數)。

因此:

\[p(A|C)=\frac{e^{-E(A,C)}}{\sum_{i=1}^Ve^{-E(v_i,C)}}=\frac{e^{A\cdot C}}{\sum_{i=1}^Ve^{v_i\cdot C}}~~~~(1)\]

其中$V$是整個詞匯空間。

$ref{1}$的分母計算是非常耗時的,下面推導比較方面快速的計算$ref{1}$的方法。

把整個詞匯空間分成兩部分$G$和$H$,同時在下面的公式中$G$和$H$也表示各自的詞向量中心,並且設$A$存在於$G$中,則:

\[p(A|C)=p(A|G,C)\cdot p(G|C) ~~~~(2)\]

where,

\[p(G|C)=\frac{e^{G\cdot C}}{e^{G\cdot C}+e^{H\cdot C}}=\frac{1}{1+e^{(H-G)\cdot C}}~~~~(3)\]

and,

\[p(A|G,C)=\frac{e^{A\cdot C}}{\sum_{w\in G}e^{w\cdot C}}~~~~(4)\]

引入$sigmoid$函數$\sigma(x)=1/(1+e^{-x})$,則

\[p(G|C)=\sigma(-(H-G)\cdot C)=\sigma((G-H)\cdot C)\]

$p(G|C)$只是簡單的計算兩部分向量之差,不能再簡化了。

另外,根據上述定義,很容易得到這個關系$p(G|C)=1-(H|C)$,因為$C$要么落在$G$要么落在$H$。

觀看$ref{4}$,則知$p(A|G,C)$是另一個版本的$p(A,C)$,只是詞匯空間從$V\rightarrow G$而已。然后我們繼續拆分$G$遞歸的計算下去,最后只需要計算各兄弟部分的向量差而已。這是一個典型的二叉樹,划分規則在開始就可確定,如果考慮查詢效率的話,就是一個霍夫曼樹。其中每個葉子節點表示一個單詞,每個中間節點$G~ or~ H$的向量為所有子向量的中心。

展開來就是:

\[p(A|C)=\prod \sigma((G_i-H_i)\cdot C)\]

 

那么問題來了,這個詞向量是怎么搞出來了?學習詞向量哪家強?

 

現在我們這里有一堆的語料,一行一行分好詞的,語料那是相當的多,以至於它涵蓋了自然語言中的所有正確句子,每個單詞在它所在的位置都是恰到好處。現在每個單詞我們有一個對應的詞向量,我們怎么來衡量這批詞向量的好壞呢。

這批詞向量張成一個自然語言的空間(從線性代數來說這樣描述可能不太准確),它自己規定的自然語言空間,在這個空間中,它可以導出給定語料在它的空間中出現的概率。熟悉吧,這就是語言模型。

我們可以根據詞向量計算出來每個單詞在它的位置出現的概率,然后這整個語料在這個向量空間中出現的概率就等於每個詞在其位置出現概率的乘積。

即,

\[p(T)=\prod p(w_i|Context_i)~~~~(5)\]

 $T$為整個語料樣本,$Context_i$為單詞$i$的上下文,理論上是扣除該單詞后剩下的所有單詞包括位置。當然了,我們只考慮它的前后$c$個鄰居。

我們的目標是使$ref 5$最大化,實際中是加$log$加負之后的最小化。怎么以高效率優化這個目標函數呢,這是一個典型的運籌學問題,而且還是非線性規划。我要翻一下運籌學的教材了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM