推荐系统
1 项目概述及目标
1.1 项目背景
练习使用
1.2 目标
打造个简单的 feed 流
2 需求分析
2.1 功能需求
2.1.1 场景
活动流,例如在 Github 上看到的
Twitter 风格的新闻提要 / Facebook 风格的新闻源
通知系统
2.2 调研
2.2.1 推荐系统流程
传统划分: 召回 + 排序
(1) 召回:根据用户部分特征,从海量的物品库里,快速找回一小部分用户潜在感兴趣的物品。
特点:速度快。
(2) 排序:可以融入较多特征,使用复杂模型,来精准地做个性化推荐。
特点:结果精准。
精细划分: 召回->粗排->精排(Ranking)->重排(ReRank)
(1) 召回(多路召回)
根据用户部分特征,从海量的物品库里,快速找回一小部分用户潜在感兴趣的物品。
(2) 粗排(可用可不用,根据场景选择)
通过少量用户和物品特征,简单模型,对召回的结果进行个粗略的排序,保证一定精准的前提下,进一步减少选取的物品数量。
作用:防止用户召回环节返回的物品数量还是太多,导致排序环节速度跟不上,所以在召回和精排之间加入一个粗排。
(3) 精排(重要)
可以使用任何特征和复杂模型,尽量精准地对物品进行个性化排序。
(4) 重排
改进用户体验,可以采用各种技术及业务策略(技术产品策略主导),比如:去已读、去重、打散、多样性保证、固定类型物品插入等等。
3 总体设计
采用推模式
角色
我们看看角色和每个角色需要的功能:
发送者
发送状态:add_activity()
接收者
关注:follow()
读取Feed流:get_activity()
send
|
| add_activity()
|
V
+-------+
| queue |
+-------+
/ | ^
/ | \
/ 2 |3 \ 1
/ | \
V V \
+-------------------------------------------------------+
| +---------------+ +--------------+ +------------+ |
| | | | +-----+-----+| | | |
| | self | | |other|other|| | relation | |
| | | | +-----+-----+| | | |
| +-------+-------+ +-------+------+ +------------+ |
+---------+-------------------+-----------------^-------+
| | |
| | |
| get_activity | get_activity | follow
| | |
| | |
V V |
4 详细设计
5 传送门
Last updated