word2vec在工業界的應用場景

witsmakemen發表於2018-03-12

連結:http://x-algo.cn/index.php/2016/03/12/281/
這篇文章主要講應用,不講原理。

通俗的說,word2vec是一種將『詞』變成向量的工具,在nlp的場景中『詞』是顯而易見的,但是在有些時候,什麼可以看做『詞』和『文件』就不那麼容易了。

文章目錄 [展開]

在社交網路中的推薦
前東家工作的時候,有一個個性化推薦的場景,給當前使用者推薦他可能關注的『大V』。對一個新使用者,此題基本無解,如果在已知使用者關注了幾個『大V』之後,相當於知道了當前使用者的一些關注偏好,根據此偏好給他推薦和他關注過大V相似的大V,就是一個很不錯的推薦策略。所以,如果可以求出來任何兩個V使用者的相似度,上面問題就可以基本得到解決。

我們知道word2vec中兩個詞的相似度可以直接通過餘弦來衡量,接下來就是如何將每個V使用者變為一個詞向量的問題了。巧妙的地方就是如何定義doc和word,針對上面問題,可以將doc和word定義為:

word -> 每一個大V就是一個詞
doc -> 根據每一個使用者關注大V的順序,生成一篇文章
1
2
word -> 每一個大V就是一個詞
doc -> 根據每一個使用者關注大V的順序,生成一篇文章
由於使用者量很大(大約4億),可以將關注word個數少的doc刪掉,因為本身大V的種類是十萬級別(如果我沒記錯的話), 選擇可以覆蓋絕大多數大V的文章數量就足夠了。

計算商品的相似度
在商品推薦的場景中,競品推薦和搭配推薦的時候都有可能需要計算任何兩個商品的相似度,根據瀏覽/收藏/下單/App下載等行為,可以將商品看做詞,將每一個使用者的一類行為序看做一個文件,通過word2vec將其訓練為一個向量。

同樣的,在計算廣告中,根據使用者的點選廣告的點選序列,將每一個廣告變為一個向量。變為向量後,用此向量可以生成特徵融入到rank模型中。

作為另一個模型的輸入
在nlp的任務中,可以通過將詞聚類後,生成一維新的特徵來使用。在CRF實體識別的任務中,聚類結果類似詞性,可以作為特徵來使用。

在依存句法分析的任務中,哈工大ltp的nndepparser則是將詞向量直接作為輸入。

具體論文『A Fast and Accurate Dependency Parser using Neural Networks』

向量快速檢索
當我們將一個文件變成一個向量之後,如何根據餘弦/歐氏距離快速得到其最相似的topk個文章,是工程實現上不得不考慮的問題。例如線上可以允許的時間是5ms以內,如果文章數量往往上萬或者更多,O(n)的方式計算明顯不可接受了。

如果文章更新的速度很慢,可以通過離線的方式一天或者幾天計算一次,匯入redis(或者別的)提供線上快速查詢。 但是如果文章實時新增,並且大量流量來自新文章,這個問題就要好好考慮一下。

一般可以通過PQ, kd-tree、simhash、聚類等方式解決,選擇不同的方式和具體的推薦場景、資料分佈有關。

相關文章