鳥槍換炮,如何在推薦中發揮AI Lab開源中文詞向量的威力?

本文來自“深度推薦系統”專欄,這個系列將介紹在深度學習的強力驅動下,給推薦系統工業界所帶來的最前沿的變化。本文則結合作者在工作中的經驗總結,着重於介紹在推薦系統中如何使用騰訊AI Lab開源的中文詞向量。

近年來,深度學習技術在自然語言處理領域中得到了廣泛應用。用深度學習技術來處理自然語言文本,離不開文本的向量化,即把一段文本轉化成一個n維的向量。在當前“萬物皆可embedding”的思想領導下,詞向量既是NLP領域中一個非常基礎的工具,也是推薦、廣告等業務場景中用於召回以及排序等階段的簡單且實用的核武器,主要用於進行語義相似度度量等。

詞向量的核心是word2vec[1],相應原理介紹不是本文介紹的重點。常用的訓練工具有gensim,fasttext等,一般的訓練步驟包括:收集語料 --> 文本過濾 --> 分詞 --> 去除停用詞 --> 訓練模型。

目前,針對英語環境,工業界和學術界已發佈了一些高質量的詞向量數據,並得到了廣泛的使用和驗證。其中較爲知名的有谷歌公司基於word2vec算法[1]、斯坦福大學基於GloVe算法[2]、Facebook基於fastText項目[3]發佈的數據等。然而,目前公開可下載的中文詞向量數據還比較少,並且數據的詞彙覆蓋率有所不足,

騰訊AI Lab開源中文詞向量

騰訊AI Lab採用自研的Directional Skip-Gram (DSG)算法 [4] 作爲詞向量的訓練算法。DSG算法基於基本的Skip-Gram,在文本窗口中詞對共現關係的基礎上,額外考慮了詞對的相對位置,以提高詞向量語義表示的準確性。

數據簡介:mp.weixin.qq.com/s/2Sto

數據下載地址:ai.tencent.com/ailab/nl

索引詞庫大小:800w;詞向量維度:200

如何在推薦中使用開源詞向量

在推薦系統的基於內容召回策略中,一般需要根據用戶已經點擊過的文章所包含的tag詞或者主題,爲用戶推薦與點擊歷史中最相似的文章。其中有一種做法就是從文章中抽取T個tag相應的詞向量來表示這篇文章的文章向量(如vec_doc = w1 * vec_t1 + w2 * vec_t2 + …,這裏w1,w2是文章中tag詞相應的權重);然後,根據用戶的點擊歷史計算文章向量的相似度,取topk個返回。下面主要實際業務場景中簡單的使用步驟:

  • 向量裁剪:從騰訊AI Lab官網下載下來的原始詞向量庫比較大,16G並且包含大量的停用詞。這裏可首先計算自己業務場景的tag庫與這份開源中文自己向量的tag集合之間的交集得到裁剪後的向量庫。

  • 加載詞向量:可以使用gensim進行加載。可以參考gensim使用手冊:radimrehurek.com/gensim

from gensim.models.word2vec import KeyedVectors
wv_from_text = KeyedVectors.load_word2vec_format('Tencent_AILab_ChineseEmbedding.txt', binary=False)
  • 部分測試數據
model=wv_from_text.wv

print(model.most_similar("如懿傳"))
[('海上牧雲記', 0.8060665130615234), ('孤芳不自賞', 0.7940512299537659), 
 ('醉玲瓏', 0.7932543754577637), ('凰權', 0.7888569831848145), 
 ('古裝劇', 0.7873178720474243), ('琅琊榜2', 0.7863854765892029), 
 ('延禧攻略', 0.7858327031135559), ('那年花開月正圓', 0.7804251909255981), 
 ('大劇', 0.7796347737312317), ('鳳囚凰', 0.7741515040397644)]

print(model.similarity("郭靖","黃蓉"))
0.9186713635202067

print(model.n_similarity(["中國","北京"],["俄羅斯","莫斯科"]))
0.6441469472853117

print(model.doesnt_match(["洪七公","王重陽","郭靖","黃藥師"]))
王重陽

工業實際應用注意事項

實際使用中我們發現業務場景的tag覆蓋率與文章覆蓋率都有極大比例的提升。同時也帶來了業務CTR的明顯提升。

  • 總體老說騰訊AI Lab開源的這份中文詞向量的覆蓋度比較高,精度也比較高。但是詞向量裏含有大量停用詞,導致文件比較大加載速度較慢(數分鐘),而且內存消耗較大,實際使用時根據場景需要裁剪以節省性能;
  • 根據不同領域的情況,有可能某些特定垂直領域的詞語之間的相關性計算不是特別準,需要根據業務場景需要加入相應的語料進行增量訓練後再使用;
  • 另外,隨着時間的推移會不斷出現新詞,物名,人名等,就需要重新訓練模型。如果後期AI Lab不再更新維護這份詞向量的話,則需要自己進行維護迭代升級。

參考文獻

  1. Distributed Representations of Words and Phrases and their Compositionality
  2. GloVe: Global Vectors for Word Representation
  3. Enriching Word Vectors with Subword Information
  4. Yan Song, Shuming Shi, Jing Li, and Haisong Zhang. Directional Skip-Gram: Explicitly Distinguishing Left and Right Context for Word Embeddings. NAACL 2018

本文授權轉載自知乎專欄“深度推薦系統”。原文鏈接:https://zhuanlan.zhihu.com/p/64385839

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章