39

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

 4 years ago
source link: https://www.tuicool.com/articles/UVfu6nI
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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK