1 日志收集
- 需要的元素
必要:用户ID,物品ID,事件名称和时间
其他:从什么事件来,从什么页面来,事件发生时用户的相关属性,事件发生时物品的相关属性 - 推荐系统需要的矩阵
UserProfile,ItemProfile,Relation,Event
2 实时推荐
- 三个层次
给得及时,推荐100ms返回
用得及时,用户物品特征及时更新
学得及时,推荐模型的及时更新 - 要点
实时数据kafka,流计算storm,在线学习梯度下降或者RDA和综合FTRL,互动实时推荐通过Bandit算法
3 AB实验
- 实验框架
域,层,桶,发布层 - 流量分配
随机,cookie+层ID,用户ID+层ID,cookie+时间 - 数据分析
- 基本
假设检验,确定可信度,然后确定置信区间 - 样本量
估算需要的样本量 - 显著性
构建统计量,如果在置信区间以外可以否定原假设
- 基本
- 弊端
会造成不好的体验,需要较长时间测试,下线的实验组不会再测试
使用Bandit算法替代流量划分的方式
4 推荐服务
- 服务 数据库和API
- 存储
特征数据:正排索引(以用户ID或者物品ID为主键)(Cassandra(读写性能更高)或者hbase(强一致性)),倒排索引(以标签ID为主键)(Redis,Memecached)
模型数据:大型PS worker分布式参数服务器,小型直接模型文件
召回数据:全局召回,用户召回,JSON序列化存入Redis - 数据录入API
用户录入,物品录入,关系录入,事件录入 - 推荐服务API
猜你喜欢 /Recommend
相关推荐 /Relative
热门排行榜 /Hot
信息流(与前面的区别要加一个展现过滤,用缓存来实现幂等) - 注意
要有唯一曝光ID
商定合适的推荐数量,不可过小(增加服务压力)或者过大(物品浪费)
5 开源工具
- 内容分析:非结构化文本转换为结构化文本
主题模型LightLDA,PLDA;词向量Word2vec,DMWE,FastText;文本分类FastText - 协同过滤和矩阵分解
KNN:Faiss,KGraph
SVD:LightFM
SVD++:
ALS:QMF
BFR: - 模型融合
LightGBM
XGBoost
Wide and deep
libffm - Web服务框架
Spring boot
Tornado
Flask/Django
Proxygen - 完整系统
PredictionIO
recommendationRaccooon
easyrec
hapiger
建议选择细粒度工具,将他们集成为自己的推荐系统