这一天,推荐小组的组员大 T 跑到我的座位旁边来,发生了以下对话:
T:阿星,为什么我们的推荐系统这么 LOW?
我:怎么讲?
T:我们到现在只有协同过滤、关联规则这种老古董、老掉牙的算法,难道不 LOW 吗?
我:……
我:咱们做推荐系统的目标是什么?
T:提升咱们线上的推荐质量、为商城带来更多的收入。
我:那现在这个目标达到了吗?
T:暂时来看,是达到了。
我:那为什么嫌算法 LOW?老算法新算法,能达到目标的就是好算法,再说了,高大上的算法也不一定有效果。
T:我就是感觉平时学的那些深度学习、强化学习啥的到现在都没用上。
我:算法终究是为了业务服务的,没有业务支撑,算法就是个花架子,作为一名从业者你要清楚这一点。
T:……
我:不过我也明白你的想法,毕竟一名优秀的算法工程师总喜欢去尝试各种各样的 IDEA,既然你提到了深度学习,那么我们就首先从基础做起,先试验一下 Word2Vec(词向量)在推荐系统召回部分的作用。
T:真的么?那太好了!我再回去温习温习!
(蹬蹬蹬蹬蹬……T 一脸满足倏然离去……)
接下来这几篇,咱们就来好好地讲述词向量的原理、公式推导、实现技巧以及场景应用等诸多必须掌握的要点。同时词向量也伴随着深度学习的不断发展几乎成了所有深度模型中必不可少的一部分。掌握了词向量基础,对以后 Deep Learning 的学习有着极大的裨益,所以还请对深度学习感兴趣的读者务必要好好地学习这项技术。
我们先以一个例子来将词向量的概念具体化。
学霸与学渣
现在我们有 5 位同学:A、B、C、D 和 E。同时有 5 门课程:语文、数学、英语、物理和化学。
在某一次考试之后,5 位同学的分数如下表所示:
姓名 | 语文(150) | 数学(150) | 英语(150) | 物理(100) | 化学(100) |
---|---|---|---|---|---|
A | 120 | 120 | 120 | 80 | 80 |
B | 120 | 120 | 112 | 90 | 85 |
C | 90 | 105 | 90 | 75 | 60 |
D | 105 | 75 | 90 | 70 | 60 |
E | 105 | 60 | 105 | 65 | 60 |
用向量表示为:
A: [120, 120, 120, 80, 80]
B: [120, 120, 112, 90, 85]
C: [90, 105, 90, 75, 60]
D: [105, 75, 90, 70, 60]
E: [105, 60, 105, 65, 60]
先将各向量归一化,得到如下归一化后的向量(语文、数学和英语除以 150,物理化学除以 100):
A: [0.80, 0.80, 0.80, 0.80, 0.80]
B: [0.80, 0.80, 0.75, 0.90, 0.80]
C: [0.60, 0.70, 0.60, 0.75, 0.60]
D: [0.70, 0.50, 0.60, 0.70, 0.60]
E: [0.70, 0.40, 0.70, 0.65, 0.60]
得到了向量之后,通常情况下我们会去计算相似度得分——cosine 得分,比如:
cosine_similarity(A, B) = cosine_similarity([0.80, 0.80, 0.80, 0.80, 0.80], [0.80, 0.80, 0.75, 0.90, 0.80]) = 0.998
cosine_similarity(A, E) = cosine_similarity([0.80, 0.80, 0.80, 0.80, 0.80], [0.70, 0.40, 0.70, 0.65, 0.60]) = 0.983
俗话说人以群分,这么看来 A 和 B 是一类人,而 D 与 E 又是另一类人。
网友评论