目录
[Embedding 技术在推荐系统中的应用](#Embedding 技术在推荐系统中的应用)
[Embedding 与深度学习推荐系统的结合](#Embedding 与深度学习推荐系统的结合)
[YouTube 推荐系统召回层](#YouTube 推荐系统召回层)
[推荐模型离线训练之 Spark MLlib](#推荐模型离线训练之 Spark MLlib)
[推荐模型离线训练之Parameter Server](#推荐模型离线训练之Parameter Server)
[推荐模型离线训练之 TensorFlow](#推荐模型离线训练之 TensorFlow)
[1.Holdout 检验](#1.Holdout 检验)
[P-R 曲线](#P-R 曲线)
[ROC 曲线](#ROC 曲线)
[推荐工程师的 4 项能力](#推荐工程师的 4 项能力)
前深度学习时代一推荐系统的进化之路
2006 年,矩阵分解的技术成功应用在推荐系统领域 其隐 量的思想与深度 学习中 Embedding 技术的思 相承; 2010 年, FM 被提出,特征交叉的概念被引入推荐模型 其核 思想一一特征交叉的思路也将在深度学习模型中被发扬光大; 2012 年, LS-PLM 在阿里巴巴大规模应用 其结构已经非常接近 层神经网络; 2014 Facebook GBDT 自动 处理特征,揭开了特征工程模型篇章 这些概念都将在深度学习推荐模型中继续应用,持续发光
传统推荐模型的特点总结
浪潮之巅一深度学习在推荐系统中的应用
主流深度 习推荐模型的演 图谱 层感知 Multi-Layer Perceptron , MLP) 心,通过改变神经网络的结构,构建特点各异 深度习推荐模型,其主要的演变方向如下
简单模型的"记忆能力"强,深度神经网络的"泛化能力"强,那么设 Wide&Deep 模型的直接动机就是将 者融合,具体的模型结构如图
Wide & Deep 模型
在具体的特征工程和输入层设计中,展现了 Google Play 的推荐团队对业务 的深刻理解从图中可以详细地了解到 Wide&Deep 模型到底将哪些特 征作为 Deep 部分的输入,将哪些特征作为 Wide 部分的输入。
Deep 部分的输入是全量 的特征向 需 要经 Embedding 层输入连 Concatenated Embedding) 拼接成 1200 维的Embedding ,再依次经过 ReLU 全连接层 最终输入 LogLoss 输出
Deep 部分的输入是全量 的特征向
FNN ,DeepFM, NFM 结合 FM 思路的深度 习模型它们的特点都 是典型的多网络的基础上加入有针对性的特征交叉操作,让模型具备更强的非线性达能力。
无论是 FM ,还是其改进模型 FFM ,归根结底是一个 阶特征交叉的模型。
沿着特征工程自动化的思路,深度学习模型从 PNN 路走来,经过了 Wide&Deep ,Deep&Cross FNN, DeepFM ,NFM 模型,进行了大 基于不同特征 操作思路的 但特征工程的思路走到这里几乎已 穷尽了可能的 尝试, 型进 步提升的 间非常小,这也是模型的 局限性所在 ,从这之后,越来越多的深度学习推荐模型开始探索更多"结构"上的尝试, 诸如注意力机制、序列模型、强化 在其他领域大放异彩的模型 构也逐渐 进入推系统领域,并且在推荐模型的效果提升上成果显著。
DIN (Deep Interest Network) 模型是阿里巴巴在 2018 年提出的一种应用于推荐系统的深度学习模型。与基于 FM (Factorization Machine) 和 AFM (Attentional Factorization Machine) 的模型相比,DIN 模型在以下几个方面进行了改进:
-
注意力机制的引入
DIN 模型引入了注意力机制来捕捉用户的多样化兴趣。与 AFM 模型类似,DIN 模型也使用了注意力机制,但 DIN 的注意力机制更加精细和具有业务针对性。DIN 模型中的注意力机制可以根据候选商品与用户历史行为的相关性,动态地分配不同的权重,从而更准确地刻画用户对候选商品的兴趣。
-
考虑了用户行为的时序特征
DIN 模型考虑了用户行为的时间序列信息,通过引入 LSTM (Long Short-Term Memory) 等循环神经网络结构,建模用户兴趣的动态变化。与传统的 FM 和 AFM 模型不同,DIN 模型可以捕捉用户兴趣的时序演变规律,更好地适应用户兴趣的动态变化。
-
引入了负采样策略
DIN 模型在训练过程中引入了负采样策略,通过对负样本的采样和学习,提高了模型的区分能力。与传统的 FM 和 AFM 模型相比,DIN 模型通过负采样策略,可以更好地学习到用户的真实兴趣偏好,提高推荐的准确性。
-
针对业务场景的优化
DIN 模型是针对阿里巴巴的推荐业务场景而设计的,考虑了实际业务中的一些特点和需求。例如,DIN 模型引入了商品类别信息,通过建模用户在不同类别下的行为差异,提高了跨类别推荐的效果。此外,DIN 模型还考虑了用户行为的权重衰减,根据行为发生的时间距离当前时刻的长短,对不同时刻的行为赋予不同的权重,更符合用户兴趣的时间衰减规律。
基于引进"序列"信息的动机,阿里巴巴对 DIN 模型进行了改进,形成了 DIEN 模型的结构 如图所示,模型仍是输入层+Embedding 层+连接层+多层全连接神经网络+输出层的整体架构图
Embedding 技术在推荐系统中的应用
Embedding的原理
- 图中左侧是一个包含 n 个节点的输入层,每个节点表示一个离散的特征。通过 one-hot 编码,每个特征都用一个长度为 n 的稀疏向量表示,其中只有对应位置为1,其余位置为0。
- Embedding层实际上是一个大小为 m×n 的矩阵(权重矩阵),其中 m 表示Embedding的维度,n表示输入特征的个数。通过矩阵乘法,原来的稀疏的 one-hot 向量被转换为一个 m 维的实值稠密向量。这个过程可以看作是一种特征的压缩与表征学习。
- Embedding层的输出是这些稠密向量的拼接。图中右侧显示,输出的维度是 Embedding维度 m 乘以输入特征的个数 n(n=3)。这些低维稠密的Embedding向量可以进一步作为深层神经网络的输入,用于下游的各种任务。
- Embedding层帮助将离散稀疏的高维输入转换为实值稠密的低维表示,既能降低输入维度,又能学习到合适的特征表示,供后续网络使用。它在自然语言处理、推荐系统等领域有广泛应用。
Embedding 输入向 维度往往 导致整 Embedding 参数数量巨 Embedding 的加入 慢整个神经网络的收敛速度。正因如此,很多 程上要求快速更新的深度学习推荐系统放弃了 Embedding层的端到端训练,用预训练 Embedding 层的方式替代为了解决 "Embedding 层训练开销巨大"的问题, Embedding 的训练往往独于深度学习网络进行 在得到稀疏特征的稠密表达之后,再与其他特征 起输入神经网络进行训练。
Embedding的分类
Word2vec
2013 年谷歌提出 Word2vec, Embedding 技术从自然语言处理领域推广到广告、搜索、图像、推荐等深度学习应用领域, 成了深度学习知识框架中不可或缺的技术点 作为经典的Embedding 方法,熟悉 Word2vec 对于理解之后所有的 embedding 技术和概念至关重要。
Word2vec 是一个生成"对词"的向量表达的模型。
Word2Vec 是用于将词映射到低维向量空间的模型,目标是学习一个能捕捉词语语义关系的词向量表示。通过这种表示:
- 语义相似的词在向量空间中距离较近。
- 词与词之间的某些关系可以通过向量运算表示(如 "国王 - 男人 + 女人 ≈ 女王")。
Wod2vec 的两种模型结构CBOW和Skip-gram
下面重点介绍Skip-gram 模型,该模型的核心思想是通过一个词预测其上下文(即周围的词)。
具体过程
- 输入 :一个中心词(
w(t)
)。- 输出 :该词的上下文词(
w(t-2), w(t-1), w(t+1), w(t+2)
等)。
- 训练目标:最大化中心词和上下文词之间的共现概率。
Word2vec 的神经网络结构图
输入层
- 输入是一个中心词
w(t)
,通常表示为一个独热向量(One-hot Vector),维度等于词汇表大小(V
)。- 一个独热向量在
V
维中只有一个位置为 1,其余位置为 0。隐藏层
- 通过一个嵌入矩阵(
W
),将高维的独热向量映射到低维的向量空间(词嵌入维度为d
)。这一步是线性变换:h=W⋅x
其中:
- x:输入的独热向量。
- W:嵌入矩阵,尺寸为 V×d。
- h:隐藏层输出(即词向量表示)。
输出层
- 从隐藏层的输出 h 预测目标上下文词 w(t−2),w(t−1),w(t+1),w(t+2)
- 使用另一个矩阵 W′(与输入嵌入矩阵相互独立)将隐藏层输出映射回 V 维的词汇空间,并通过 softmax 函数计算每个词的概率: P(wcontext∣wcenter) = softmax(W′⋅h)
训练目标
- 最大化中心词 w(t)和上下文词 w(t−2),w(t−1),w(t+1),w(t+2)的条件概率。
- 损失函数通常为负对数似然(Negative Log-Likelihood)。
Skip-gram 的窗口大小
- Skip-gram 模型会定义一个窗口大小(Window Size) ,即在上下文中考虑多少个词。例如:
- 如果窗口大小为 2,则中心词
w(t)
的上下文为 w(t−2),w(t−1),w(t+1),w(t+2)。- 窗口越大,模型捕获的上下文范围越广,但计算复杂度也会增加。
优势
- 捕捉语义关系:Skip-gram 可以学习到词之间的语义关系。
- 小数据集表现良好:与 CBOW 模型相比,Skip-gram 在小数据集和稀疏数据上效果更好。
Item2vec
既然 Word2vec 可以对词序列" 中的词进行 embedding 那么对于用户购买列"中的 个商品,用户观
看"序列"中的 个电影 ,也应该存在相应的 Embedding 方法,这就 ltm2vec方法.
Item2vec Word2vec 唯一 的不同在于, Item2vec 摒弃了时间窗口的概念,认为序列中任意两个物品都相关, 因此在Item2vec 的目标函数中可以看到,其是两两物品的对数概率的和,而不仅是时间窗口内物品的对数概之和
双塔模型
事实上, Embedding 对物品进行向 化的方法远不止 ltem2vec 广义上讲, 任何能够生成物品向 的方法都可以称为 ltem2vec 典型的例子是曾在百度 Facebook 等公司成功应用的双塔模型。
ltem2vec 方法也有其局限性,因为只能利用序列型数据,所以Item2vec 在处理互联网场景下大量的网络化数据时往往显得捉襟见肘,这就是 Graph Embedding 技术出现的动因
Embedding 与深度学习推荐系统的结合
典型的采用 Embedding 预训练方法的模型是 FNN 模型 它将 FM 模型训练得到的各特征隐向 作为 Embedding 层的初始化权重,从而加快了整个网络的收敛速度。
Embedding 的本质是建立高维向量到低维向量的映射,而"映射"的方法并不局限于神经网络,可以是任何异构模型 例如 GBDT + LR 组合模型,其中 GBDT 部分在本质上就是进行了一次 Embedding 操作, 利用 GBDT 模型完成 Embedding 预训练,再将 Embedding 输入单层神经网络(即逻辑回归)进行点击通过率CTR(Click-Through Rate)预估。
Deep Crossing Wide&Dee 模型 Embedding层
三个模型 Embedding 层接收的都是类 型特征 one-hot 量,转换的目标是 Embedding 在结 深度 络中 Embedding 层是高维向低 直接映射。
YouTube 推荐系统召回层
YouTube 推荐系统召回层模型的结构图
- YouTube 系统层模型召回层模型的构图图,输入 征 全部都是用户相关特征,从左至右依次是用户观看历史视频的 Embedding 向量、 用户搜索词 Embedding 量、 用户地理属性特征 Embedding 量、 用户(样本) 年龄、性别相关特征。
- 模型 的输出 层是 softmax ,该模型本质 一个类模型,预测目标是是用户观看了哪个视频,因此 softmax层的输入是经过三层 ReLU 全连接层生成的用户 Embedding,输出向量是用户观看每一个视频的概率分布。由于输出向量的每一维对应了一个视频,该维对应的 softmax层列向量就是物品 Embedding。通过模型的离线训练,可以最终得到每个用户的 Embedding 和物品 Embedding。
局部敏感哈希
在整体候选集动辄达到几百万量级的互联网场景下,即使是遍历内积运算这种 O(n)级别的操作,也会消耗大量计算时间,导致线上推断过程的延迟 那么工程上有没有针对相似 Embedding 的快速索引方法,能够更快地召回候选集合呢?
局部敏感哈希的基本思想是让相邻的点落入同一个"桶",这样在进行最近邻搜索时,仅需要在一个桶内,或相邻的几个桶内的元素中进行搜索即可 如果保持每个桶中的元素个数在一个常数附近,就可以把最近邻搜索的时间复杂度降低到常数级别。
Embedding 相关技术总结
推荐模型是驱动推荐系统达成推荐效果的引擎,也是所有推荐系统团队投入 精力最多的部分,推荐模型在学术界和业界的发展进化速度很快 。我们要清楚的是,对于一个成熟的推荐系统,除了推荐 模型,还要考虑召回策略、冷启动、探索与利用、模型评估、线上服务等诸多方面的问题
多角度审视推荐系统
从7个不同的角度切入推荐系统,希望能够较为全面地覆盖推荐系统相 关知识,具体包括以下内容:
推荐系统如何选取和处理特征
1.连续型特征
连续型特征的典型例子是上文提到的用户年龄、统计类特征、物品的发布时间、影片的播放时长等数值型的特征。对于这类特征的处理,最常用的处理手段包括归一化、离散化、加非线性函数等方法。
2.类别型特征类别型特征的典型例子是用户的历史行为数据、属性标签类数据等。它的原始表现形式往往是一个类别或者一个 id。这类特征最常用的处理方法是使用one-hot 编码将其转换成一个数值向量,2.5节的"基础知识"部分已经详细介绍了 one-hot 编码的具体过程,在 one-hot 编码的基础上,面对同一个特征域非唯-的类别选择,还可以采用 multi-hot 编码。
推荐系统召回层的策略有哪些
推荐系统的2个阶段
常见的多路召回策略
Embedding 召回的另一个优势在于评分的连续性。多路召回中不同召回策略产生的相似度、热度等分值不具备可比性,无法据此决定每个召回策略放回候选集的大小。Embedding 召回可以把 Embedding间的相似度作为唯一的判断标准因此可以随意限定召回的候选集大小。
推荐系统实时性的重要性体现在哪
无论是"GBDT+LR"模型,还是单纯的树模型,损失函数的值都跟模型更新延迟有正相关的关系,也就意味着模型更新的间隔时间越长,推荐系统的效果越差;反过来说,模型更新得越频繁,实时性越好,损失越小,效果越好。
从推荐模型训练结束到模型测试的时间间隔(天)
从机器学习的角度讲,推荐系统实时性的重要之处体现在以下两个方面
(1)推荐系统的更新速度越快,代表用户最近习惯和爱好的特征更新越快越能为用户进行更有时效性的推荐。
(2)推荐系统更新得越快,模型越容易发现最新流行的数据模式( data越能让模型快速抓住最新的流行趋势,pattern)
如何根据具体场景构建推荐模型的优化目标
为了达到同时优化 CTR 和 CVR 模型的目的,阿里巴巴提出了多目标优化模型 ESMM(Entire Space Multi-task Model)[4]。ESMM 可以被当作一个同时模拟曝光到点击"和"点击到转化"两个阶段的模型。
阿里巴巴的多目标优化模型 ESMM
如何基于用户动机改进模型结构
推荐模型的结构不是构建一个好的推荐系统的"银弹",真正的 "银弹"是你对用户行为和应用场景的观察,基于这些观察,改进出最能表达这 些观察的模型结构
推荐系统冷启动的解决方法有哪些
冷启动问题根据数据匮乏情况的不同,主要分为三类:
(1)新用户冷启动:当新用户注册时,由于缺乏该用户的历史行为数据,无法直接使用协同过滤等基于历史数据的推荐算法。
(2)新物品冷启动:当新物品加入推荐系统时,由于还没有用户对该物品的交互记录,无法计算该物品与其他物品或用户的相似度。
(3)系统冷启动:在推荐系统刚刚上线时,整个系统缺乏足够的用户行为数据和物品交互记录,难以训练出有效的推荐模型。
针对不同应用场景,解决冷启动问题需要比较专业的洞察,根据领域专家意 见制定合理的冷启动策略 总体上讲,可以把主流的冷启动策略归为以下三类:( 1 )利用用户注册时填写的个人信息(如年龄、性别、职业等),或者通过用户的设备信息(如IP地址、浏览器类型等)进行初步的推荐。可以推荐一些热门的、普适性较强的物品。
( 2 )利用物品的内容信息(如物品的类别、标签、描述等)与其他物品进行相似度计算,找到相似的物品进行推荐。或者利用专家知识,人工设定一些规则,将新物品推荐给特定的用户群体。
( 3 )用一些通用的推荐策略,如推荐热门物品、新上架的物品等。同时,可以引入一些外部数据,如利用用户在其他平台的行为数据进行迁移学习。
什么是"探索与利用"问题
提升转化率与用户参与度:掌握在线A/B测试、多臂赌博机、交错测试与因果推断的实战策略_hte分析-CSDN博客
深度学习推荐系统的工程实现
推荐模型离线训练之 Spark MLlib
Spark mini batch 过程只做了三事:
(1) 当前的模型参数广播到各个数据 Partition (可当作虚拟的计算节点)
(2)各计算节点进行数据抽样得到 minibatch 的数据,分别计算梯度,再通 treeAggregate 操作汇总梯度,得到最终梯度 gradientSum
(3)利用 gradientSum 更新模型权重
Spark MLlib的并行训练过程其实是 "数据并行" 的过程,并不 涉及过于复杂的梯度更新策略,也没有通过"参数并行"的方式实现并行训练 这样的方式简单、直观、易于实现,但也存在一些局限性.
1.采用全局广播的方式,在每轮迭代前广播全部模型参数 众所周知, Spark 的广播过程非常消耗带宽资源,特别是当模型的参数规模过大时,广播过程和在每个节点都维护 个权重参数副本的过程都是极消耗资源的,这导 Spark 在面对复杂模型时的表现不佳。
2.采用阻断式的梯度下降方式,每轮梯度下降由最慢的节点决定 Spark 梯度下降的源码中可知, Spark MLlib 的mini batch过程是在所有节点计 算完各自的梯度之后,逐层聚合( aggregate ),最终汇总生成全局的梯度 也就是说,如果数据倾斜等问题导致某个节点计算梯度的时间过长,那么
这一过程将阻断其他所有节点,使其无法执行新的任务 这种同步阻断的 分布式梯度计算方式,是 Spark Lllib 并行训练效率较低的主要原因
3.Spark MLlib 并不支持复杂深度学习网络结构和大量可调超参 事实上, Spark Ll ib 在其标准库里只支持标准的 MLP 的训练,并不支持 RNN LSTM 等复杂网络结构,而且无法选择不同的激活函数等大量超参 这就 导致 Spark Llib 在支持深度学习方面的能力欠佳
推荐模型离线训练之Parameter Server
- 数据并行:通过复制模型,在不同节点上处理不同的数据部分,然后同步更新模型参数。适合数据量大但模型相对较小的情况。
- 参数并行:通过将模型参数分配到不同节点,适合训练大规模模型,但需要解决参数分割和通信同步的问题。
Parameter Server 的物理架构
Parameter Server实现分布式机器学习模型训练的要点如下:
- 用异步非阻断式的分布式梯度下降策略替代同步阻断式的梯度下降策略(并行梯度下降过程需要所有节点的梯度都计算完成,由 master 节点汇总梯度,计算好新的模型参数后才能开始下一轮的梯度计算 这就意味着最"慢"的节点会阻断其他所有节点的梯度更新过程)
- 实现多 server节点的架构,避免单 master节点带来的带宽瓶颈和内存瓶颈
- 使用一致性哈希、参数范围拉取、参数范围推送等工程手段实现信息的最小传递,避免广播操作带来的全局性网络阻寒和带宽浪费
Parameter Server 仅仅是一个管理并行训练梯度的权重平台,并不涉及具体的模型实现,因此 Parameter Server 往往作为 MXNet、TensorFlow 的一个组件,要想具体实现一个机器学习模型,还需要依赖通用的、综合性的机器学习平台
推荐模型离线训练之 TensorFlow
深度学习的应用在各领域日益深入,各大深度学习平台的发展也突飞猛进谷歌的 TensorFlow[6][7] 、亚马逊的 MXNet Facebook PyTorch ,微软的 CNTK 等均是各大科技巨头推出的深度学习框架 Parameter Server 要聚焦在模型 并行训练这 点上不同,各大深度学习框架囊括了模型构建、并行训练、上线服 务等几乎所有与深度学习模型相关的步骤。
TensorFlow 的中文名为"张量流动",这也非常准确地表达了 TensorFlow 的基本原理--根据深度学习模型架构构建一个有向图,让数据以张量的形式在其中流动起来。
张量(tensor)其实是矩阵的高维扩展,矩阵可以看作张量在二维空间上的特例。在深度学习模型中,大部分数据是以矩阵甚至更高维的张量表达的,因此谷歌为其深度学习平台取名为张量流动(tensor flow)再合适不过。
TensorFlow 官方给出的任务关系图示例
(1)TensorFlow 直译为"张量流动",主要原理是将模型训练过程转换成任务关系图,让数据以张量的形式在任务关系图中流动,完成整个训练。
(2)TensorFlow基于任务关系图进行任务调度和并行计算。
(3)对于分布式 TensorFlow 来说,其并行训练分为两层,一层是基于Parameter Server 架构的数据并行训练过程;另一层是每个 worker 节点内部CPU+GPU 任务级别的并行计算过程。
当然,要搭建一套完整的 TensorFlow Serving 服务并不是一件容易的事情因为其中涉及模型更新、整个 docker container 集群的维护和按需扩展等一系列工程问题。TensorFlow Serving 的性能问题仍被业界诟病,但它的易用性和对复杂模型的支持,使其成为上线 TensorFlow模型的第一选择。
推荐系统的评估
离线评估的主要方法
1.Holdout 检验
Holdout 检验是基础的离线评估方法,它将原始的样本集合随机划分为训练集和验证集两部分。举例来说,对于一个推荐模型,可以把样本按照 70%-30%的比例随机分成两部分,70% 的样本用于模型的训练:30% 的样本用于模型的评估。
Holdout 检验的缺点很明显,即在验证集上计算出来的评估指标与训练集和验证集的划分有直接关系,如果仅进行少量 Holdout检验,则得到的结论存在较大的随机性。为了消除这种随机性,"交叉检验"的思想被提出。
2.交叉检验
k-fold 交叉验证
先将全部样本划分成k个大小相等的样本子集;依次遍历这k个子集,每次都把当前子集作为验证集,其余所有子集作为训练集,进行模型的训练和评估;最后将所有k次的评估指标的平均值作为最终的评估指标。在实际实验中,k经常取 10。
留一验证
每次留下1个样本作为验证集,其余所有样本作为测试集。样本总数为 n,依次遍历所有n个样本,进行n次验证,再将评估指标求平均得到最终指标。在样本总数较多的情况下,留一验证法的时间开销极大。事实上,留一验证是留p验证的特例。留p验证是指每次留下p个样本作为验证集,而从n个元素中选择 p个元素有 C 种可能,因此它的时间开销远远高于留一验证,故很少在实际工程中应用。
3.自助法
不管是 holdout 检验还是交叉检验,都是基于划分训练集和测试集的方法进行模型评估的。然而,当样本规模比较小时,将样本集进行划分会让训练集进-步减小,这可能会影响模型的训练效果。有没有能维持训练集样本规模的验证方法呢?"自助法"可以在一定程度上解决这个问题。
有放回地抽样:进行 N 次有放回的随机抽样,每次抽样从 D 中随机选择一个样本,可能重复选择同一个样本。这样,我们得到一个新的数据集 D ′,其大小也为 N,但其中有些样本可能被重复选择,有些样本可能没有被选择到。
离线评估的指标
准确率
分类准确率(Accuracy)是指分类正确的样本占总样本个数的比例
精确率
精确率(Precision)是分类正确的正样本个数占分类器判定为正样本的样本个数的比例
召回率
召回率(Recall)是分类正确的正样本个数占真正的正样本个数的比例。
在医疗诊断等关键任务中,高召回率的重要性可以通过以下例子来说明:
假设有100个患者,其中10个真正患病,90个健康。我们的目标是通过诊断模型来识别出所有患病的患者,以避免漏诊。这个例子中,我们将患病的患者视为"正样本",而健康的患者则为"负样本"。
高召回率的情景:
假设模型的召回率为90%,这意味着模型能够识别出9个真正的患者,只有1个被漏诊。
在这种情况下,尽管可能会有一些假阳性(即误诊为患者的健康人),但绝大多数真正患病的患者被正确识别,从而减少了漏诊的风险。
低召回率的情景:
如果召回率仅为50%,模型只能识别出5个真正的患者,而另外5个患者被误认为是健康的。
这种漏诊可能会导致患者错过早期治疗的机会,后果可能非常严重。
均方根误差
均方根误差(Root Mean Square Error,RMSE)经常被用来衡量回归模型的好坏。使用点击率预估模型构建推荐系统时,推荐系统预测的其实是样本为正样本的概率,那么就可以用 RMSE来评估,其定义如下:
一般情况下,RMSE能够很好地反映回归模型预测值与真实值的偏离程度但在实际应用时,如果存在个别偏离程度非常大的离群点,那么即使离群点数量非常少,也会让 RMSE 指标变得很差。为解决这个问题,可以使用鲁棒性更强的平均绝对百分比误差(Mean Absolute Percent Error,MAPE)进行类似的评估MAPE 的定义如下:
对数损失函数
LogLoss就是逻辑回归的损失函数,而大量深度学习模型的输出层正是逻辑回归或 softmax,因此采用 LogLoss 作为评估指标能够非常直观地反映模型损失函数的变化。如果仅站在模型的角度来说,LogLoss是非常适于观察模型收敛情况的评估指标。
直接评估推荐序列的离线指标
推荐系统的最终结果是一个排序列表,以矩阵分解方法为例,其获得的用户和物品的相似度仅是排序的一个依据,并不具有类似点击率这样的物理意义。因此,使用直接评估推荐序列的指标来评估推荐模型,就成了更加合适的评估方法。本节将依次介绍直接评估推荐序列的离线指标--P-R 曲线、ROC 曲线和平均精度均值。
P-R 曲线
P-R 曲线的横轴是召回率,纵轴是精确率。对于一个排序模型来说,其P-R曲线上的一个点代表"在某一阈值下,模型将大于该阈值的结果判定为正样本将小于该阈值的结果判定为负样本时,排序结果对应的召回率和精确率"。
P-R 曲线的横轴是召回率,纵轴是精确率。对于一个排序模型来说,其 P-R曲线上的一个点代表"在某一阈值下,模型将大于该阈值的结果判定为正样本,将小于该阈值的结果判定为负样本时,排序结果对应的召回率和精确率"
由图 7-1 可见,在召回率接近0时,模型A的精确率是 0.9,模型B的精确率是 1,这说明模型B中得分前几位的样本全部是真正的正样本,而模型 A 中即使是得分最高的几个样本,也存在预测错误的情况。然而,随着召回率的增加精确率整体上有所下降;特别地,在召回率为1时,模型A的精确率反而超过了模型 B。这充分说明,只用一个点的精确率和召回率是不能全面衡量模型性能的只有通过 P-R 曲线的整体表现,才能对模型进行更全面的评估。
在绘制好 P-R 曲线后,计算曲线下的面积(Area Under Curve,AUC)能够量化 P-R 曲线的优劣。顾名思义,AUC 指的是 P-R 曲线下的面积大小,因此计算 AUC 值只需要沿着 P-R曲线横轴做积分。AUC 越大,排序模型的性能越好。
ROC 曲线
ROC曲线的全称是 the Receiver Operating Characteristic 曲线,中文译为"受试者工作特征曲线"。ROC曲线最早诞生于军事领域,而后在医学领域应用甚广"受试者工作特征曲线"这一名称也正是来源于医学领域。
ROC曲线的横坐标为 False Positive Rate(FPR,假阳性率);纵坐标为 TruePositive Rate(TPR,真阳性率)
在(式 7-6)中,P是真实的正样本数量,N是真实的负样本数量;TP指的是P个正样本中被分类器预测为正样本的个数,FP指的是N个负样本中被分类器预测为正样本的个数。
在绘制 ROC 曲线后,同 P-R 曲线一样,可以计算出 ROC 线的 AUC 并用 AUC 评估推荐系统排序模型的优劣。
平均精度均植
平均精度(AP)
AP是衡量推荐系统在一定排序结果下的精确度,主要计算的是在推荐列表中,每个正样本(例如,用户真实感兴趣的项目)对应的精确度,最后取这些精确度的平均值。
平均精度均值(mAP)
mAP(mean Average Precision) 的定义 是针对所有用户(或查询)的AP值进行平均计算。每个用户都会单独计算出自己的AP ,然后对所有用户的AP取平均值。mAP的计算方法如下:
其中,N 是用户的总数,AP_i 是第i个用户的平均精度。
mAP与P-R ROC曲线的区别
- mAP 是对每个用户的推荐结果进行单独排序并计算AP,最后对所有用户的AP值求平均。
- P-R ROC曲线 (精确度-召回率曲线)和ROC曲线(接收者操作特征曲线)则是针对整个数据集的排序进行评估。它们是基于所有样本的预测结果计算的,而不是分用户的评估。
在实际操作中,mAP 更关注个别用户的排序质量,而P-R ROC曲线和ROC曲线则考虑全局样本的排序情况。
合理选择评估指标
除了 P-R 曲线、ROC 曲线、mAP 这三个常用指标,推荐系统指标还包括归一化折扣累计收益( Normalized Discounted Cumulative Gain,NDCG )覆盖率(coverage)、多样性(diversity),等等。在真正的离线实验中,虽然要通过不同角度评估模型,但也没必要陷入"完美主义"和"实验室思维"的误区,选择过多的指标评估模型,更没必要为了专门优化某个指标浪费过多时间。离线评估的目的在于快速定位问题,快速排除不可行的思路,为线上评估找到"靠谱的候选者。因此,根据业务场景选择 2~4个有代表性的离线指标,进行高效率的离线实验才是离线评估正确的"打开方式"。
构建属于你的推荐系统知识框架
推荐模型发展的时间线
推荐模型发展的时间线
推荐系统的整体知识架构图
推荐系统整体知识架构图
推荐工程师的 4 项能力
机器学习相关岗位技能霄达图
- 算法工程师:算法 程师的能力要求是相对全面的 作为算法模型的实现 者和应用者,要求算法工程师有扎实的机器学习基础,改进和实现算法的 能力 对工具的运用能力及对业务的洞察
- 大数据工程师 :更注重大数据工具和平台的改进,需要维护推荐系统相关的整个数据链路,因此对运用工具的能力要求最高
- 算法研究员: 担负着提出新算法、新模型结构等研究任务,因此对算法研究员的 识和逻辑能力的要求最高
- 能力偏科的工程师: 有些读者平时不注重对工具使用、业务理解方面 的知识积累,找工作时临时抱佛脚恶补知识 刷算法题,在某些面试场合下也许是奏效的,但要想成为一名优秀的推荐工程师,还需要补齐自己的能力短板。
能力的深度和广度
在一项具体的工作面前,优秀的推荐工程师所具备的能力应该是综合的能够从"深度"和"广度"两个方面提供解决方案。例如,公司希望改进目前的推荐模型,于是你提出要结构的模型改进方案。这就要求你在深度和广度两个方面对 DIN 的原理和实现方案有全面的了解深度方面,需要了解从模型动机到实现细节的一系列问题,一条从概括到具体的学习路径的例子如下:
- DIN 模型提出的动机是什么?是否适合自己公司当前的场景和数据特点(业务理解能力。)
- DIN 模型的模型结构是什么?具体实现起来有哪些工程上的难点。(知识学习能力,工具运用能力。)
- DIN 模型强调的注意力机制是什么?为什么在推荐系统中使用注意力机制能够有效果上的提升?(业务理解能力,知识学习能力。)
- DIN 模型将用户和商品进行了 Embedding,在实际使用中,应该如何实现Embedding过程?(知识学习能力,逻辑思维能力。)
- 是通过改进现有模型实现 DIN 模型,还是使用全新的离线训练方式训练DIN 模型?(工具运用能力,逻辑思维能力。
- 线上部署和服务 DIN 模型有哪些潜在问题,有哪些解决方案?(工具运用能力。)
从这个例子中读者可以看到,一套完备的模型改进方案的形成需要推荐工程师深入了解新模型的细节。缺少了深度的钻研,改进方案就会在实现过程中遇到方向性的错误,增加纠错成本。
推荐工程师除了要深入了解所采用技术方案的细节,还需要在广度上了解各种可能的备选方案的优劣,做到通过综合权衡得出当前客观环境下的最优解。接着上文模型改进的例子,推荐工程师应该从以下方面在广度上进行知识储备:
- 与 DIN 类似的模型有哪些,是否适合当前的使用场景?
- DIN 模型使用的 Embedding 方法有哪些,不同 Embedding 方法的优劣是什么?
- 训练和上线 DIN 的技术方案有哪些?如何与自己公司的技术栈融合?
- 在深度了解了一个技术方案的前提下,对其他方向的了解可以是概要式的但也要清楚每种技术方案的要点和特点,必要时可通过 A/B 测试、业界交流咨询原型系统试验等方式排除候选方案,确定目标方案。
除此之外,工程和理论之间的权衡能力也是推荐工程师不可或缺的技能点之一。只有具备了这一点,才能在现实和理想之间进行合理的妥协,完成成熟的技术方案。
工程师职责的本质
无论你是算法 程师,还是研发 程师,甚至是设计电动汽车、神舟飞船、 长征火箭的工程师,职责都是相同的,那就是:在现有实际条件的制约下,以工 程完成和技术落地为目标,寻找并实现最忧的解决方案。
也正是因为工程师永远以"技术落地"为目标,而不是炫耀 自己 的新模型、 新技术是否走在业界前沿,所以在前沿理论和工程之间做权衡 一名工程师应该具备的基本素质。
- Redis 容量和模型上线方式之间的权衡
- 研发周期限制和技术选型的权衡
- 硬件平台环境和模型结构间的权衡
- 处理好整体和局部的关系
以上案例必然无法囊括所有工程上权衡的情况,仅希望读者能够通过这些案例建立良好的工程直觉,从非常具体的技术细节中跳出从工程师的角度平衡整体和局部的关系。