本文主要工做是將文本方法 (word2vec) 和知識庫方法 (transE) 相融合做知識表示,即將外部知識庫信息(三元組)加入word2vec語言模型,做爲正則項指導詞向量的學習,將獲得的詞向量用於分類任務,效果有必定提高。git
一. word2vec 模型github
word2vec 是 Google 在 2013 年開源推出的一款將詞表徵爲實數值向量的高效工具,使用的是 Distributed representation (Hinton, 1986) 的詞向量表示方式,基本思想是經過訓練將每一個詞映射成 K 維實數向量後,可經過詞之間的距離(好比 cosine 類似度、歐氏距離等)來判斷它們之間的語義類似度。word2vec 輸出的詞向量能夠被用來作不少 NLP 相關的工做,好比聚類、找同義詞、詞性分析等。同時 word2vec 還發現有趣的單詞類比推理現象,即 V(king) - V(man) + V(woman) ≈ V(queue) 。算法
word2vec 本質上是一種神經機率語言模型 (Bengio,2003),經過神經網絡來訓練語言模型,而詞向量只是副產品。其中有兩個重要模型 —— CBOW 模型 (Continuous Bag-of-Word Model) 和 Skip-gram 模型 (Continuous Skip-gram Model),同時做者給出了兩套框架,分別基於 Hierarchical Softmax(hs) 和 Negative Sampling(NEG),本文使用了基於Negative Sampling 的 CBOW 模型,下面進行簡單介紹:數據庫
基於 Negative Sampling 的 CBOW 模型網絡
CBOW 模型包含三層:輸入層,投影層和輸出層,在已知當前詞 wt 的上下文 wt-2, wt-1, wt+1, wt+2 的前提下預測當前詞 wt(見下圖)框架
模型優化的目標函數是以下的對數似然函數,關鍵就在於 的構建。分佈式
傳統神經機率語言模型使用的是 softmax,但 softmax 計算複雜度高,尤爲語料詞彙量大的時候。函數
在 word2vec 中,使用 Hierarchical Softmax 和 Negative Sampling 來近似計算,目的是提升訓練速度並改善詞向量的質量。與 Hierarchical Softmax 相比,NEG再也不使用複雜的 Huffman樹, 而是採用隨機負採樣的方法,增大正樣本的機率同時下降負樣本的機率。工具
在 CBOW 模型中,已知詞 w 的上下文 Context(w),須要預測 w,所以對於給定的 Context(w),詞 w 就是一個正樣本,其它詞就是負樣本,對於一個給定的樣本(Context(w), w),咱們但願最大化學習
其中,NEG(w) 表示負樣本集,正樣本標籤爲 1,負樣本標籤爲0,其機率計算以下
或者寫成總體表達式
故優化目標就是最大化 g(w),增大正樣本的機率同時下降負樣本的機率。對於一個給定的語料庫C,函數G就是總體優化的目標,爲了計算方便,對G取對數,最終目標函數以下:
利用隨機梯度上升對上式進行求解便可,這裏直接給出梯度計算結果,
,
故參數θu更新公式以下:
對於 w’ 屬於 Context(w) ,即其上下文詞向量更新公式以下:
下面以樣本 (Context(w), w) 爲例,給出基於Negative Sampling 的 CBOW 模型訓練過程的僞代碼,與 word2vec 源碼 相對應關係以下: 對應
,
對應
,
對應
,
對應
。以後咱們結合 transE 模型時,也是根據 word2vec 源碼進行改進。
關於word2vec的數學原理以及公式推導過程,強烈推薦@peghoty的博客:word2vec中的數學原理詳解
二. transE 模型
TransE 是基於實體和關係的分佈式向量表示,由 Bordes 等人於2013年提出,受word2vec啓發,利用了詞向量的平移不變現象。將每一個三元組實例 (head,relation,tail) 中的關係 relation 看作從實體 head 到實體 tail 的翻譯,經過不斷調整h、r和t (head、relation 和 tail 的向量),使 (h + r) 儘量與 t 相等,即 h + r ≈ t。該優化目標以下圖所示:
TransE 定義了一個距離函數 d(h + r, t),它用來衡量 h + r 和 t 之間的距離,在實際應用中可使用 L1 或 L2 範數。在模型的訓練過程當中,transE採用最大間隔方法,其目標函數以下:
其中,S是知識庫中的三元組,S’是負採樣的三元組,經過替換 h 或 t 所得。γ 是取值大於0的間隔距離參數,[x]+表示正值函數,即 x > 0時,[x]+ = x;當 x ≤ 0 時,[x]+ = 0 。算法模型比較簡單,梯度更新只需計算距離 d(h+r, t) 和 d(h’+r, t’).
模型訓練完成後,可獲得實體和關係的向量表示,進一步可作關係抽取和知識推理的任務。下面是算法僞代碼:
三. word2vec + transE 模型
在咱們的模型中,主要利用的是百科詞條抽取的 infobox 信息,構成三元組信息 (h, r, t),例如 (百度,董事長,李彥宏),假設信息是事實,一個基本想法就是在訓練 word2vec 過程當中,加入這些三元組信息,使得關聯的 h 和 t 某種程度上更接近,也能夠說是一種正則化約束,例如三元組信息是類別信息,即詞語屬於哪一個領域的信息。
爲了與 word2vec 模型融合,利用 transE 思想,從新定義 (h+r, t)的目標函數爲機率函數(其實就是 softmax):
其中 是包含 wi 的全部關係,|V| 是字典的大小。
是由 wi 和 r 的向量線性相加所得,即
,
表示詞 t 對應的參數。
這樣一來,咱們就能夠構建基於 word2vec 和 transE 的模型目標函數,以下:
其中,式子左邊是基於 CBOW 的 word2vec 模型,右邊是關係詞向量模型,γ 是平衡兩個模型貢獻比率的參數,|C|是整個語料庫的大小。訓練的時候一樣採用Negative Sampling 的方法近似計算 softmax。 咱們來看下關係詞向量模型(右半部分)的求解過程:
(1)
在 Negative Sampling 中,三元組一樣被分爲正樣本和負樣本,根據Local Closed World假設,不在知識庫中的三元組視爲負樣本,即 (wi, r, t) 成立的時候,對應的 t 爲正樣本,而其餘詞語都爲負樣本,舉個例子(百度,董事長,李彥宏)是正樣本,(百度,董事長,馬雲)是負樣本。對於給定的一個詞 wi 和對應的一個關係 r,訓練的目標似然函數以下:
(2)
是否是有點眼熟?細心朋友能夠發現,這和 word2vec 模型的目標似然函數是類似的,將(2)式代入(1)上述關係詞向量模型最終的目標似然函數就是
根據 word2vec 的梯度推導,咱們能夠獲得參數的梯度更新以下:
關係詞向量模型的實體 wi 和關係 r 梯度更新以下:
,
模型僞代碼以下,與 word2vec_transE 源碼(github) 相對應關係以下: 對應
,
對應
,
對應
,
對應
,
對應
,
對應
實驗過程及結果
實驗過程,訓練語料源於百度百科摘要數據,高頻關係三元組 (h, r, t) 168403條,關係 r 有 1650 種,訓練時間 2h (比 word2vec 原始代碼訓練要耗時是正常的),利用訓練後的詞向量作分類任務,效果比原始 word2vec 訓練詞向量高 2%,可見加入外部數據庫信息必定程度上能提高詞向量的表達能力。
一些問題
(1)語料髒!百度百科數據太髒了,詞條排版屬性格式不一,信息前期預處理麻煩。
(2)模型其實是增長約束,依然無法解決一詞多義問題
(3)這裏加入的信息只是 infobox 抽取的三元組,信息利用率不高,可進一步利用百科連接,分類等信息。
項目地址:github
參考
[1]. Tomas Mikolov, Kai Chen, Greg Corrado, and Jeffrey Dean. (2013). Efficient Estimation of Word Representations in Vector Space. In Proceedings of Workshop at ICLR.
[2]. Bordes, A., Usunier, N., Garcia-Duran, A., Weston, J., & Yakhnenko, O. (2013). Translating embeddings for modeling multi-relational data. In Proceedings of NIPS.
[3]. peghoty的博客:word2vec中的數學原理詳解
[4]. 張柏韓:基於知識庫的詞向量研究與應用