王喆《深度学习推荐系统》 推荐系统架构

推荐系统要解决什么问题?----让每个人都用着舒心

        对于用户来说,他在他此时浏览的每个软件场景下,能不能很快地获得让他感兴趣的信息,甚至会出现一些“惊喜”,让他知道,呀,这个好!

        网络的产品、信息浩如烟海,每个人的喜好还不一样,有的人根本不知道自己喜欢什么,想要什么;有的人大概知道,但是本身就很犹豫;有的人确实比较坚定(比如我就想看看机械键盘,想买一个)。

        所以,一个好的推荐系统要以尽可能全覆盖的满足每一个使用这个软件或产品的人,让尽可能全的人觉得,嗯,这里的内容挺好,竟然是个小机灵鬼,让我节省不少时间。

        更进一步地:从系统角度讲:

        对于某个user, 在特定的场景(context)下,针对海量“物品信息”构建一个函数,to 预测用户对特定候选物品们的喜好程度,再根据喜好程度进行排序,生成推荐的列表;并通过用户的行为及时的更新推荐列表。

注 : 推荐系统中的数据 :

  • 用户信息                        : 
  • 物品信息                         :
  • 上下文(场景)信息      :

为什么深度学习对推荐系统重要?

  1. 深度学习能拟合出更加泛化的模型,能满足更多场景和更多不同喜好的人的要求。
  2. 让深度学习模型的神经网络模拟很多用户兴趣的变迁过程,甚至用户做出决定的思考过程。
  3. 大数据与深度学习相互需要相互促进,最终共同发展,能在一起处理更加海量的信息。

推荐系统的通用架构:

  • 推荐系统 = 数据 + 模型
  • 数据部分 =  收集 + 处理
    • 通用主流框架  = 大数据离线批处理 + 在线实时流处理
    • 实时性  大-> 小    ||    处理数据量 小 -> 大
      • 客户端与服务器端实时数据处理
      • 流平台准实时
      • 大数据平台离线批处理
    • 这些数据用来干什么?
      • 用于训练和预估: 生成模型需要的样本数据
      • 用户线上推断:生成用户特征、物品特征和一部分场景特征 
      • 用于统计和监控的数据
    • 其实 数据的质量决定了推荐系统的上限,模型只能逼近这个上限
  • 模型部分:  召回 + 排序 + 重排序 (一般来说)  也有 召回+粗排+精排+重排
    • 召回层: 得到用户可能感兴趣的物品
      • 海量----几万
      • 用一些规则算法 + 简单的模型 的 多模型联合召回方式
      • 主要在离线时处理
      • embedding技术可以实现快速召回
    • 排序层;利用一些排序模型对召回候选集进行精排
      • 几万-----几千  (只是举例啦)
      • 用到机器学习算法(GBDT +LR最常见)+ 一些深度学习算法(deepFM DIN 等)
      • 近似在线层
    • 重排序:也称为补充策略层
      • 几千-200 
      • 返回给用户的推荐列表前,需要做的多样性处理 即
        • 推荐列表应组成: 算法结果 + 运营指定 + 热点物品 + 广告 + 推荐一些冷门 等等
      • 效果:让推荐列表 看着 多样、流行、新鲜、惊喜,同时也能满足投资广告方的曝光需求
    • 模型评估:
      • 离线时 有离线评估指标
      • 在线主要用到线上A/B测试

王喆《深度学习推荐系统》 推荐系统架构_第1张图片

问题

  1. 如今主流数据处理框架是 flink做 流计算,spark做全量数据批量处理,目前能形成真正的批流一体么?
    1. 现在很难,但在往那方向走;
    2. 历史遗留:以前只有spark,没用flink,很多公司的数据体系都是在spark基础上的,这就跟TensorFlow1的代码想改成TensorFlow2 也会有很多意想不到的问题。
    3. spark本身也在发展,有flink的竞品spark streaming。 而且spark社区和积累很成熟。
  2. 用户实时行为后,生成实时推荐列表的数据是如何走的?
    1. 实时用户请求里边包含的特征一般是直接在服务器内部(很多用redis)提取出的,肯定不用再在数据流中重新走一遍。
    2. 但线上请求数据最终会落盘到日志数据中。这时流处理批处理的平台会对这些数据进行处理,生成今后可供使用的特征及训练用样本。
  3.  一般来说,近线层处理好的数据、特征会存储到redis等内存型数据库供online service使用。

 

你可能感兴趣的:(推荐系统)