53

鸟枪换炮,如何在推荐中发挥 AI Lab 开源中文词向量的威力?

 4 years ago
source link: https://www.tuicool.com/articles/i6ZnMrf
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

本文来自“深度推荐系统”专栏,这个系列将介绍在深度学习的强力驱动下,给推荐系统工业界所带来的最前沿的变化。本文则结合作者在工作中的经验总结,着重于介绍在推荐系统中如何使用腾讯 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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK