推荐系统架构分析

发布于 2022-04-14  389 次阅读


推荐系统架构

数据预清洗处理

app与网页端添加埋点,发送用户行为至kafka,kafka队列存储行为日志,由flink做抽取结合业务数据库的用户项目元数据进一步处理成用户信息、物品信息、场景信息。清洗过程包括剔除掉脏数据、对数据合法性进行校验、剔除无效字段、字段格式检查等过程。

使用flink做流批一体处理,从日志抽取用户操作行为以及场景信息,从业务数据库抽取用户与物品的属性数据,处理成结构化的推荐系统模型所需的样本数据,用于算法模型的训练和评估。生成推荐系统模型服务所需的“用户特征”,“物品特征”和一部分“场景特征”,用于推荐系统的线上推断。

处理完成后将数据加载至最终的存储,比如数据仓库、关系型数据库、key-value型NoSQL中等。对于离线的推荐系统,训练数据放到数仓中,属性数据存放到关系型数据库(业务数据库)中。

为了降低业务数据库的压力,创建binlog通路,数据实时同步hbase。flink从hbase抽取数据。

特征工程

特征分类

用户
  • 偏好标签(可以通过历史偏好物品抽取物品标签)
  • 属性标签
  • 社交关系
  • 轨迹
  • 用户行为
物品
  • 属性标签
  • 元信息
场景
  • 时间信息
  • 所处页面

特征抽取策略

数值类进行归一化与离散化,分类少的数据进行one-hot编码,非结构化或者分类众多无规则数据进行Embedding,Embedding可以使用Word2vec、Item2Vec、GraphEmbedding等方法。抽取后的特征进入特征数据库,供模型与线上业务使用,Embedding向量同步存储至milvus,利用faiss进行topk邻近向量搜索,kv数据进入redis与hbase。

结构化数据
  • 元数据(用户属性、物品属性)中的数值、文本
半结构化数据
  • 日志中的行为数据
非结构化数据
  • 图片
  • 视频
  • 音频
  • 轨迹

模型

召回

召回层就是要快速、准确地过滤出相关物品,缩小候选集,排序层则要以提升推荐效果为目,作出精准的推荐列表排序。使用多路召回来实现召回层,例如矩阵分解、Embedding向量查找topk邻近向量、热门物品、最近浏览。可以在召回层加入业务强相关的逻辑,例如结合近期浏览的物品,根据物品Embedding召回类似物品。在该层也需要进行冷启动策略、推荐物料去重与id去重等业务逻辑。

精排

精排层用于讲召回层输出的物品数量级别再降低一个层次,可以利用特征工程产生的数据训练模型。主流模型如下

preview

补充策略

实时热点,关注最新动态

后续学习

学习深度学习相关的基础知识,实践排序层的模型。


面向ACG编程