推荐系统陈开江 - C11 关键模块

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
    建议选择细粒度工具,将他们集成为自己的推荐系统

你可能感兴趣的:(推荐系统陈开江 - C11 关键模块)