一、业务问题
我们使用的ALS和Embedding算法,成功解决了推荐数据量少且单一的问题,在固定版位(推送、猜你喜欢)下取得了点阅率增长。
然而,在网站核心的搜索场景下,这些推荐算法并不适用。为了解决这个问题,需要对推荐系统进行升级,以更好地赋能业务。
二、技术调研
业务场景
首先,我们来解析一下业务场景:用户在列表页完成筛选后,候选集合按照预设的排序(更新时间)呈现。
但是,面对海量的检索结果,用户或许没有耐心逐一过目。如果对排序做干预,按照点击概率精排物件,将用户和物件精准匹配,对于平台和用户都是喜闻乐见的。
算法模型的价值,就是将用户大概率点击的物件重新精排,在搜索结果前列展示。
模型介绍
DeepCrossing模型:是一个使用深度学习技术,解决推荐系统中特征工程、稀疏向量稠密化等问题的模型,其应用场景为微软 Bing 中的竞价排名搜索,目标为提高广告的点击率以及后续的转化率。
可以从微软发布的 DeepCrossing论文 中,了解到如何在推荐系统中使用深度学习技术:
- 第一个方向是使用 Embedding 层将离散高维的稀疏特征转换为低维密集特征,从而能够直接输入神经网络进行训练;
- 第二个方向是使用神经网络结构自动联合和交叉特征,从而实现端到端的训练和预测。
模型结构:模型自下而上包括 5 层结构:Feature 层、Embedding 层、Stacking 层、Multiple Residual Units 层和 Scoring 层。
我们结合业务场景数据,让大家更好理解:
- Feature:【租金1.2万】【4房】【2卫】【上梅林1】
- Embedding:【物件id:666】【用户id:777】
- Stacking:【666_777_1.2_4_2_1】
- Multiple Residual Units:【666_777_1.2_4_2_1】=> 1 ..
- Scoring:预测【666_777_1.1_4_2_1】=> 0.99
三、DeepCross业务实践
数据准备
数据解析:
- 选定Embedding层:用户id、物件id
- label:取用户对于物件评分,大于0.9则置为1(二分类)
- 物件特征:物件基本属性,比如价格、几房几厅、所属区域等
- 用户特征:用户对历史看过物件评分、评分方差、评分均值等
训练模型
代码影响阅读体验,我把示例和注释放在了这里 demo
通过训练,我们最终得到拟合后的方程式:y_ctr = f(user_feature + post_feature) ,通过请求业务model,就可实现点击概率预测。
效果展示
我们随机选择一组数据:
实践结果:在列表页使用新模型,通过线上A/B测试可知CTR点击率提升约10%以上!
(注:因租屋运营策略调整,目前模型改用在首页租屋推荐场景)
模型优化
为了提升预测精度,我们也可以从以下方向改进:
- 存在较多冗余数据,需要数据过滤,让预测结果更加契合业务
- 数据处理时,可使用多种策略:时间滑窗,归一化..
- DeepCross是二分类模型,能预测用户是否点击,对于点击概率强弱的预测并不友好,可尝试其他模型
- 针对冷启动用户及物件,可以将其相似用户/物件的Embedding赋值给他们,扩大算法覆盖面
四、架构升级
在实践DeepCross过程中,为了适应更多场景及得到更好的推荐结果,我们也对现有的推荐系统同步做了升级。
覆盖搜索场景
- 基于Tensorflow实现DeepCross推荐服务,模型请求和更新都非常便捷。
- 搭建Go应用层服务:响应业务请求,提取用户及物件特征,以及预处理推荐结果。
双模型协同
我们使用多路召回策略,加入ALS模型对数据结果粗排,再取TOP-N给到DeepCross精排,让推荐精准多元化。
数据传输协议
数据传输升级:从HTTP升级到gRPC协议,网络请求提速约36.8%!
五、总结
本文介绍了业务问题、技术调研和DeepCross推荐模型的实践,以及架构升级方案。
通过使用深度学习技术和双模型协同,我们成功地解决了搜索场景下的推荐问题,提升CTR点击率。在架构升级过程中,我们还优化了数据处理和网络传输等方面,提高了推荐系统响应效率。
以上就是我们在推荐系统上的实践经验,欢迎交流,共同进步!
参考资料:
深度学习推荐系统实战 王喆
Deep Crossing: Web-Scale Modeling without Manually Crafted Combinatorial Features 微软论文