Open Liam0205 opened 5 years ago
Click through rate ?
可否讨论下关于智能推荐的技术问题,大二那会儿瞎折腾了解了下智能推荐。
我的步骤:最开始的思路,简单的借鉴了NLP最早的理念:统计。对于所有用户的数据集中的属性(记数据集共$m$条,$n$个属性),哪两个属性共同出现,频率++,得到$n\times n$的矩阵。对于新用户的来临,若冷启动,就推荐大家最喜欢的,若是老用户,就根据历史数据找$n\times n$ 里面最相关的,作为推荐。
问题:其实有用户反馈的很少,冷启动,惊喜推荐,就是历史数据中没有,但是能推荐点用户很喜欢的。(加上时尚潮流还有,比如最近火爆的《哪吒之魔童降世》,可以顺手推一下)
之后:我也不知道咋改了改,属性规约,用户画像,当时想的好像是,确实存在的属性标签为显状态,用户偏好为隐状态,具体咋生搬硬套我也忘了。套了隐马尔可夫模型,还是老问题,没数据咋办,惊喜推荐呢?
当时靠这套理论拿了某数据挖掘的二等奖,but,我看一等奖开源的论文和代码,就是提取特征,神经网络分类,这样更会受到数据、历史分布的影响。(不过那个大公司居然给了他们一等奖)
后来,看到了GAN,在想能不能搞个生成器$G$,不断地生成去逼近历史分布,但是也能随机的生成新东西。但是搭了简单的神经网络,效果一般般,过了暑假我就大四了,也没时间折腾那些。
可否和企业的算法工程师讨教一二?某学渣路过
@muyuuuu 你讲了好几个问题吧,一个个来说……
首先是类似矩阵分解的做法。这类做法,包括 item-CF/user-CF 之类的做法,都属于「根据用户历史行为,探寻 item 与 user 之间关系,再进行推荐」的做法。因为这类做法必须有足够量的用户行为,所以我们称之为「后验类的方法」。后验类的方法的几个问题:1. 正反馈显著;2. 对无行为的 user 或 item 冷启动难以解决;3. 长尾效应明显,长尾 item 难以露出。
解决或者缓解这类缺陷也很简单——寻找先验类的方法。比如基于 item 标题,可以探寻文本上的相似性、语义上的相似性。这些方法都与用户行为无关,之前说的问题也就不存在了。
冷启动的问题其实更多的是一个工程问题。对于 user 侧的冷启动,因为没有历史行为,更多的你只能去做热门推荐。更多的一些探索,可以根据 user 的年龄、性别、地域,取与之具有相同静态属性的用户的平均兴趣,作为 user 侧冷启动的初始值,再去做推荐。也就是除了热门推荐之外,可以推荐和他在静态属性上相同的人普遍消费的 item。对于 item 侧的冷启动相对容易做一些——虽然没有后验类的特征,我们还有先验的嘛。再不济,可以根据产品形态,对 item 侧的新物料,做强制露出。比如,假设你的产品有「订阅」这个概念,比如你订阅了我的账号。那么我的账号发布的新 item,在你那边就强制露出。这是基于社交网络关系做的 item 侧冷启动。
至于你说的一等奖的问题,以及用 GAN 去逼近历史分布的问题……嗯,在我看来,竞赛的成分重了一些,本质上都还是去挖掘已有行为数据的信息的后验类方法。在真实的推荐场景中,不可能全部依赖后验类的方法的。
另外,你提到的,似乎都是「用一个模型解决问题」。在实际工业的推荐系统里,这是不可能的。工业级的推荐系统,item 侧的量级可以有千万、亿、十亿这样的级别,推送到 user 侧的量级却只有十这样的量级。指望用一个模型,在线做这样精度的复杂运算,延迟势必是不可接受的。解决办法也很简单——参考运载火箭,用多级、分段的方式去解决就好了。具体来说,在千万以上级别的物料中,做召回,将数量级下降到千及一下的级别;然后在千以下级别的物料中,做排序;最后再辅以产品策略。
几句话的话,大概就能说到这个程度。之后我会写一些更细节的东西发在博客上,你也可以关注。
https://liam.page/2019/07/27/difference-between-recommendation-system-and-computational-advertising/
这篇谈谈我眼中推荐系统和计算广告之间的差别。 当然,限于角色和身份,我只能站在算法工程师的角度,去谈一谈两种系统的优化目标之间的差异,以及这种差异引起的一系列不同。