写点什么

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

  • 2019-08-22
  • 本文字数:1888 字

    阅读完需:约 6 分钟

鸟枪换炮,如何在推荐中发挥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 KeyedVectorswv_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


2019-08-22 08:059195

评论

发布
暂无评论
发现更多内容

体验为先,博睿数据打造以用户会话为中心的监测体系

博睿数据

博睿数据 数据链DNA DEM

【签约计划】百位签约创作者名单公布

InfoQ写作社区官方

签约计划

剪视频一点都不难,多款超实用剪辑软件全方位评测!

懒得勤快

短视频 视频剪辑 视频制作

腾讯安全姬生利:《数据安全法》下,云上数据安全最佳实践

腾讯安全云鼎实验室

数据安全 云安全 数据安全法

一份283页pdf,五大核心内容,熬夜“啃完”,竟拿下了阿里offer

Java 程序员 架构 面试

Rust从0到1-泛型-生命周期

rust 泛型 生命周期 generic lifetimes

工作年限、成长路线、进阶技术。怎样才能成为架构师?

Linux服务器开发

Linux服务器开发 Linux后台开发 软件架构师 服务器架构师 C++架构师

网络为本,博睿数据NPMD用20%的投入实现80%的功能

博睿数据

博睿数据 数据链DNA NPMD

前端 JavaScript 复制粘贴的奥义——Clipboard 对象概述

编程三昧

JavaScript 大前端

1小时学会不打代码制作一个网页精美简历(1)

1_bit

大前端 低代码 iVX 低代码开发平台

低代码助力企业生产管理8大招式,你学废(hui)了吗?

优秀

低代码

【小技巧】Google浏览器设置之Tab折叠分组

恒生LIGHT云社区

推荐 浏览器书签 谷歌 工具分享

双指针法

后台服务器开发

c++ 双指针 LeetCode

为什么大家都在用WebRTC?

anyRTC开发者

音视频 WebRTC 语音通话 视频通讯

ROS CDK | 云上资源自动化部署新模式

郭旭东

阿里云 ROS 基础设施即代码 IaC

新版发布|ShardingSphere 5.0.0-beta 来了!

SphereEx

ShardingSphere

高寿命NVMe SSD应用场景探讨

怀瑾握瑜

区块链 数据库 云计算 SSD 虚拟货币

管理者如何避免主观偏见

石云升

职场经验 管理经验 6月日更

架构实战营 模块六:课后作业

👈

架构实战营

字节跳动亿级视频处理系统高可用架构实践

火山引擎开发者社区

架构 后端 音视频

墨奇,以“一手之力” 证明你就是你

E科讯

网络态势感知是什么?

郑州埃文科技

多云部署又添新「云」,EMQ X Cloud 正式支持腾讯云部署

EMQ映云科技

阿里云 IoT 华为云 云平台 #腾讯云

微警务系统搭建,智慧派出所平台建设解决方案

自从有了这个工具,一键代码迁移不在话下

华为云开发者联盟

代码迁移 鲲鹏DevKit 汇编翻译 汇编语言 Kunpeng

2021年,想要成为年薪百万的Java架构师需要掌握哪些技术?

Java架构师迁哥

唯品会:在 Flink 容器化与平台化上的建设实践

Apache Flink

flink

Flink Job 概览

Alex🐒

flink 翻译 flink1.13

开发5年!三面字节,成功拿到27k*17offer,原来也没那么难

Java 程序员 架构 面试

【Linux】使用 systemd 管理 frp 服务

赖猫

Linux 后端

Flink 和 Iceberg 如何解决数据入湖面临的挑战

Apache Flink

flink

鸟枪换炮,如何在推荐中发挥AI Lab开源中文词向量的威力?_AI&大模型_深度传送门_InfoQ精选文章