深度学习推荐系统笔记(一)架构特征篇

目录

  • 推荐基础架构
    • 推荐目标
    • 工业推荐系统架构
    • 深度学习基础
    • 理论相关问答
    • 实践相关问答
  • 特征工程与Embedding
    • 推荐系统常用特征
    • Spark特征处理
    • Embedding技术
    • Graph Embedding技术
    • 相关问答

本文为极客时间<<深度学习推荐系统实战>>的课堂笔记。

推荐基础架构

推荐目标

  1. 推荐系统目标:在信息过载的情况下,用户如何高效获取感兴趣的信息。
  2. 推荐系统目标形式化定义
    对于某个用户 U (User),在特定场景C (Context)下,针对海量的“物品”信息构建一个函数 ,预测用户对特定候选物品I(Item)的喜好程度,再根据喜好程度对所有候选物品进行排序,生成推荐列表的问题。
  3. 推荐系统逻辑架构的中心:抽象函数 f ( U , I , C ) f(U,I,C) f(U,I,C) ,即为推荐系统模型。
  4. 深度推荐系统的优势
    • 提升模型的函数拟合能力,最大程度接近最优函数 f(U,I,C) ;
    • 模拟用户兴趣的变迁过程,甚至用户做出决定的思考过程。如阿里的深度兴趣进化网络。

工业推荐系统架构

工业级推荐系统技术架构主要分为 数据模型 两部分。

数据部分负责:数据的"收集"和"处理"。
数据处理方式:

  • 实时数据处理:客户端和服务器端实时数据处理;CGI LogID上报
  • 准实时数据处理:流处理平台准实时数据处理;Spark Streaming Flink
  • 离线数据处理:大数据平台离线数据处理 Spark

大数据加工后数据出口:

  • 生成样本数据:用于模型训练 推理
  • 生成特征数据
  • 生成系统监控、BI需要的统计型数据

模型部分负责: 生成推荐列表
模型结构:召回、排序、重排
模型训练方式

  • 离线训练:利用全量样本和特征,使模型逼近全局最优点
  • 在线更新:准实时消化新的样本,更快反应新的数据变化趋势,满足模型实时性需求。

模型评估方式

  • 离线评估
  • 线上A/B

深度学习基础

深度学习在推荐系统中的三个典型更新:

  • embedding技术在召回层的应用
  • 深度学习模型在排序层的应用
  • 强化学习在模型更新、工程模型一体化方向的应用 ?

神经元:神经网络的基础结构,参照生物学中的神经元构造,抽象出带有输入、输出和激活函数的数学结构
神经网络:将多个神经元以串行、并行、全连接等方式连接起来形成的网络
神经网络训练方法:基于链式法则的反向传播

理论相关问答

  • 手动实现一个BP神经网络(numpy 版本)
    https://towardsdatascience.com/deep-neural-networks-from-scratch-in-python-451f07999373

  • 手动实现一个BP神经网络(tensorflow 版本)

  • 手推BP,链式法则计算梯度
    https://juejin.cn/post/6844903780157227022
    https://www.jianshu.com/p/dc1daf3040af

  • 激活函数相关
    https://www.analyticsvidhya.com/blog/2020/01/fundamentals-deep-learning-activation-functions-when-to-use-them/
    https://www.cnblogs.com/hutao722/p/9732223.html
    https://blog.bennettyang.top/post/why-can-we-use-non-differentiable-relu-in-gradient-descent/
    https://blog.csdn.net/hhhhhhhhhhwwwwwwwwww/article/details/120301830

实践相关问答

  • 召回有优化之后,排序并不能捕捉到召回新增的特征,在排序后召回的优化点弱化很多,这种一般怎么处理?比如:召回优化增加了性别+年龄的特征,但是排序层没有用这维特征,导致根据该特征召回的内容排序后都在靠后位置没有机会曝光。
    作者回复: 非常好的实践经验。在设计召回层和排序层的时候一般要联合设计,召回层要特别关注召回率指标。如果你认为你的排序模型效果是非常不错的,把性别和年龄特征召回的item排在后面,就说明二者相关的item不应该被召回。 如果年龄和性别这两个特征对结果影响很大,那为什么排序层模型训练的时候不引入这两个特征呢? 所以需要再重新评估一下两个层,做一个重新的设计。
  • :当数据特别稀疏时,设计合适模型的思路是什么?我采集到的数据中有非常多用户只有很少的物品交互记录,我使用了(协同过滤类的)深度学习模型,但是过拟合现象很严重。
    作者回复:数据如果过于稀疏的话,确实不适合深度学习模型。如果确实非常稀疏话,还是推荐一些简单模型,比如基于物品的协同过滤模型或者一些lookalike的方法
  • 你觉得都有哪些因素影响着深度学习网络的结构

    1)面向的业务场景及问题类型会影响网络结构。比如关注时间信息多一些,RNN就更适合;关注局部信息,CNN就更适合。
    2)问题的复杂程度、数据规模会影响网络结构。问题越复杂,网络的假设空间维度越高,网络结构也会越复杂;数据量越大、维度越高,需要更加复杂的网络结构充分学习;
    3)实际工作中的**算力、资源限制(时间、空间)**限制会影响网络结构,它们会限制使用模型的复杂程度。
  • 问:深度学习模型是越深越好吗?为什么?
    答:
    理论上,在同样参数量限制下,deep is better,更省参数更强能力,例如两个3*3conv和单层5*5conv。
    但是在实践中,模型不是越深越好,其深度是受限制的。
    1)网络深度和数据规模有关。数据量大、特征多,可以使用较深的神经网络进行学习;但是数据量少,使用深层神经网络容易过拟合。
    2)网络深度和网络结构设计有关。加了短连接的Resnet、DenseNet能搭建起更深的网络模型,其为梯度的反向传播提供了捷径,使得深层的神经网络不再难以训练。
    3)网络深度和计算资源有关。网络越深对资源需求越大,需要权衡。
    4)网络深度和业务指标,特别是响应时间有关。网络过深会影响推断时间,推荐系统响应时间限制在100ms以内。

特征工程与Embedding

推荐系统常用特征

  • 用户行为数据:包含用户显性反馈行为、用户隐性反馈行为
  • 用户关系数据:
    关系:关注\好友关系
    关系:互相点赞,处于同一个社区,同看一部电影
    利用用户关系数据的方式
    1)使用用户关系作为召回层的一种物品召回方式
    2)通过用户关系建立关系图,使用graph embedding的方式生成用户和物品的emb
    3)直接利用关系数据,通过"好友"的特征为用户添加新的属性特征
  • 属性、标签类数据
    使用方式:
    1)通过multi-hot编码方式将其转换为特征向量
    2)重要属性标签转换为embedding,如业界最新做法,将标签属性类数据和描述主体一起构建成知识图谱,再在其上施以graph embedding或gnn生成各节点embedding,再输入推荐模型。(业界知名工作 阿里EGES paper)
  • 内容类数据
    通过CNN\RNN等手段,提取特征,再通过multi-hot编码,embedding等方式输入推荐系统进行训练。(多模态)
  • 场景信息
    时间、地点、推荐页面等特征,描述用户所处的客观推荐环境

Spark特征处理

  • Spark分布式平台:计算节点之间不共享内存,通过网络通信的方式交换数据。
  • Spark计算过程:Stage内部数据高效并行计算,Stage边界处进行消耗资源的shuffle操作或最终的reduce操作。
  • 类别型特征的处理方式
    1)转换为 One-hot 特征: OneHotEncoderEstimator()
    2)转换为 Muilti-hot 特征:自己写udf转为vec
  • 数值型特征的处理方式
    1)特征归一化:MinMaxScaler() (为什么归一化:拉平量纲)
    2)特征分桶:QuantileDiscretizer()
    3)非线性方法改变特征分布:对特征值平方、开方,改变特征分布(Youtube DNN方法)

Embedding技术

  • Embedding技术在特征工程中的作用
    1)适用于处理稀疏特征,将稀疏高维特征转换为稠密低维特征
    2)可以融合大量有价值信息,表达能力更强。
  • Embedding在深度学习推荐系统中的应用
    1)直接应用。生成向量,基于向量间的相似性实现某些推荐系统的功能;可应用在召回层,获得物品的相似物品之类的召回链路;
    2)预训练应用,作为特征向量的一部分和其他特征向量进行拼接;
    3)End2End应用,不预训练embedding,而是直接在深度模型中将embedding层加入模型,比如deep crossing wide&deep
  • 经典Embedding方法:Word2Vec技术
    1)skipgram方法:中心词预测上下文
    2)cbow方法:上下文预测中心词
    3)使用输入层-隐层的权重矩阵作为词向量查找表(lookup-table),存到线上的数据库中进行读取使用。
  • Item2Vec w2v的推广

参考链接
CS224(1)
CS224(2)

Graph Embedding技术

  • 互联网中的图结构数据
    社交网络
    知识图谱
    行为关系类图 用户和物品组成的"二部图"
  • Graph Embedding经典方法 随机游走:DeepWalk
    1)基本思想:在由物品组成的图结构上进行随机游走,产生大量物品序列,然后这些物品序列作为训练样本输入w2v进行训练,最终得到物品的embedding。
    2)执行过程:用户行为序列 -> 构建物品关系图(有向,有权值) -> 随机游走 -> 使用word2vec模型产生embedding
    3)算法细节
    随机游走采样的次数、长度均属于超参数
    随机游走的跳转概率:到节点 v i v_i vi后,下一步遍历 v i v_i vi的邻接点 v j v_j vj的概率。
    P ( v j ∣ v i ) = M i j ∑ j ∈ N + ( V i ) , v j ∈ N + ( V i ) P(v_j | v_i) = \frac{M_{ij}}{\sum_{j \in {N_{+}}(V_i)}}, v_j \in N_{+}(V_i) P(vjvi)=jN+(Vi)Mij,vjN+(Vi)
    其中,N+(vi) 是节点 vi所有的出边集合,Mij是节点 vi到节点 vj边的权重。
    如果是有向有权图,跳转概率为跳转边权重占所有相关出边权重之和的比例
    如果是无向无权图,跳转边权重恒等于1,分母为所有边集合。
  • Graph Embedding Node2Vec: 同质性和结构性的权衡
    1)基本思想:调整随机游走跳转概率,让 graph embedding结果在网络的同质性和结构性之间权衡。
    同质性:距离相近节点的embedding应该尽量近似。同质性的物品很可能是同品类、同属性或者经常被一同购买的物品。
    同质性更倾向于DFS(深度优先搜索)。
    结构性:结构上相似的节点的embedding应该尽量接近。结构性相似的物品可能是各品类的爆款、最佳凑单商品等拥有类似趋势或结构性属性的物品。
    结构性更倾向于BFS(广度优先搜索)。
    2)算法实现:通过节点中的跳转概率控制跳转的倾向性。
    从当前节点v到下一个节点x的概率:
    π v x = α p , q ( t , x ) ⋅ w v x \pi_{vx} = \alpha_{p,q}(t,x) \cdot w_{vx} πvx=αp,q(t,x)wvx
    w v x w_{vx} wvx是边 v x v_x vx的原始权重, α p , q ( t , x ) \alpha_{p,q}(t,x) αp,q(t,x) 是Node2vec定义的一个跳转权重;
    α p , q = { 1 p 如 果 d t x = 0 1 如 果 d t x = 1 1 q 如 果 d t x = 2 \alpha_{p,q} = \left\{ \begin{aligned} \frac{1}{p} &&如果 d_{tx} = 0 \\ 1 && 如果 d_{tx} = 1 \\ \frac{1}{q} && 如果 d_{tx} = 2 \\ \end{aligned} \right. αp,q=p11q1dtx=0dtx=1dtx=2
    d t x d_{tx} dtx指节点 t 到节点 x 的距离。
    i. 如果节点x和t直接相连, d t x = 1 d_{tx}=1 dtx=1, 跳转权重=1
    ii. 如果节点x是节点t, d t x = 0 d_{tx}=0 dtx=0, 跳转权重= 1 p \frac{1}{p} p1,参数p为返回参数,p越小,随机游走返回节点t的可能性越大,更表达网络的结构性(BFS)
    iii. 如果节点x不是节点t相连的节点, d t x = 2 d_{tx}=2 dtx=2, 跳转权重= 1 q \frac{1}{q} q1,参数q为进出参数,q越小,随机游走到远方节点的可能性越大,更表达网络的同质性(DFS)。
    3)可以将不同偏向的embedding同时输入后续深度学习网络供网络训练。

相关问答

特征工程相关问答
Embedding相关问答

embedding预训练和embedding端到端训练的特点:
预训练的特点:
1 预训练好的emb本身有一定意义,喂给dnn后理论上可以加速收敛;
2 可能走到局部最优解。预训练emb通过其他方法训练,本身不对该模型服务
端到端训练特点:
1 参与整个模型训练,可以找到embedding层在整个模型结构下的最优解,预训练可能损失一些效果。
2 比较难收敛,包含大量参数;可能因为矩阵过大,计算资源不够导致无法训练。
业界:
使用预训练emb比较多,emb在深度模型中固定住,不更新。

业界用embedding如何评价优劣
一般用线上ABTest

线上快速召回-ann

协同过滤模型
基于用户的协同过滤模型
基于物品的协同过滤模型

优化方法
随机梯度下降
adam优化方法

你可能感兴趣的:(面经笔经,推荐算法)