word2vec是谷歌團隊提出的,讓詞向量在自然語言處理當中再度流行,並且推廣到了廣告、搜尋、推薦等各個領域當中。word2vec顧名思義,就是乙個生成對詞的向量表達的模型。假設我們使用一組句子組成的語料庫作為訓練資料,其中一句長度為\(t\)的句子為\(w_1,w_2,...,w_t\),假設每個詞都與最相鄰的詞關係最為密切。那麼這種密切的關係可以分為兩種:
cbow。 每個詞都是由相鄰的詞決定的。cbow輸入是某乙個特徵詞的上下文相關的詞對應的詞向量,而輸出就是這特定的乙個詞的詞向量,即先驗概率。
skip-gram。每個詞都都決定了相鄰的詞。skip-gram模型和cbow的思路是反著來的,即輸入是特定的乙個詞的詞向量,而輸出是特定詞對應的上下文詞向量,即後驗概率。
這裡借用一下參考圖示:
不過從經驗上來講,skip-gram效果要好一些。
假如我們選取了\(2c+1\)長度的滑動視窗,從語料庫中抽取乙個句子然後從左到右不斷滑動視窗。每移動一次,視窗中的詞就形成了乙個訓練樣本。有了訓練樣本,我們就可以定義優化目標。以skip-gram為例,每個詞\(w_t\)都決定了相鄰詞\(w_\),基於極大似然估計的方法,我們希望所有樣本的條件概率\(p(w_|w_t)\)之積最大,我們使用對數概率來表示目標函式為
\[\frac\sum_^\sum_\log p(w_|w_t)
\]那麼我們如何定義條件概率\(p(w_|w_t)\)呢?在多分類問題當中,通常使用softmax函式。我們希望,通過詞向量的向量表示,可以用內積直觀的表示出語義的接近程度。那麼我們可以用\(w_o\)代表\(w_\),也就是輸出詞;用\(w_i\)表示\(w_t\),也就是輸入詞。
\[p(w_o|w_i)=\frac'^t v_)}^exp(v_'^t v_)}
\]我們容易忽略乙個事實,那就是輸入詞和輸出詞的向量表達並不在乙個向量空間當中,輸入向量表達和輸出向量表達可以用如下圖來表示:
在這裡,輸入向量表達就是輸入層到隱層的權重矩陣\(w_\),而輸出向量表達就是隱層到輸出層的權重矩陣\(w'_\)。由於輸入向量一般是one-hot形式的向量,那麼輸入向量矩陣\(w_\)的每一行對應的權重向量就是同樣意義上的「詞向量」,它也可以被看做是乙個查詢表,如如數向量是10000詞的one-hot向量,隱層維度為300,那麼輸入層到隱層的權重向量為\(10000\times 300\)。在轉化為詞向量的查詢表之後,每行的權重變成了對應詞的embedding向量。
由於語料庫中的詞數量巨大,對每個詞都要**誤差是巨大的計算量,因此,為了減輕訓練復旦,往往採用負樣本的方法進行訓練,也就是需要對取樣出的幾個負樣本進行計算**誤差。從多分類問題退化成了乙個近似二分類問題。如下所示:
\[e=-\log\sigma(}^t h)-\sum_}\log \sigma(}^t h)
\]\(v'_\)是輸出詞向量(正樣本),而\(w_\)是負樣本集合,\(v'_\)是負樣本詞向量,由於負樣本集合的大小非常有限,通常來說小於10,在每次梯度下降爹地啊過程中,計算複雜度可以縮小為原來的1/1000(假設詞表為10000)。
cbow與skip-gram
(二)通俗易懂理解——skip-gram和cbow演算法原理
推薦系統實踐 0x00 序
最後還是找到了自己算是滿意的工作,也準備開始新的研究領域,推薦演算法。由於我之前的研究內容主要是圍繞著cv展開,所以還是需要提前學習一下推薦演算法的知識。目前選擇了 推薦系統實踐 這本書,看中了它能夠將知識點和 相結合的優勢,並不枯燥也有一部分專案實踐等等。這篇文章就算作自己開始讀這本 推薦系統實踐...
推薦系統實踐 0x03 評測指標
準確度度量乙個推薦系統或者推薦演算法 使用者行為的能力。這個指標是最重要的推薦系統離線評測指標。準確度通過在訓練集上建立使用者的行為和興趣模型 使用者在測試集上的行為,並計算 行為和測試集上實際行為的重合度作為 準確度。準確度有各種不同的研究方向,也就有不同的 準確度指標。該使用者在將來看到乙個他沒...
電影推薦系統word2vec last
word2vec詞向量最後轉成統一長度的電影item唯一表示 1 分詞 訓練 coding utf 8 import gensim from gensim.models import word2vec from gensim.models.doc2vec import doc2vec taggede...