【王喆-推荐系统】评估篇-(task5)Replay和Interleaving评估

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: A/B测试时流量不够用,需要排队进行自己的测试,拖慢实验的新思路和迭代优化模型的进度。如何选择这么多种离线评估和在线评估测试方法。

一、推荐系统的评估体系

在推荐系统评估中,经常遇到2类问题:

A/B测试时流量不够用,需要排队进行自己的测试,拖慢实验的新思路和迭代优化模型的进度。

如何选择这么多种离线评估和在线评估测试方法。

小结:建立起一套推荐系统的评估体系。

1.1 评估体系

评估体系:由多种评估方式组成、兼顾效率(用较少资源)和正确性。

图 1 就是一个典型的评估体系示意图。从图中我们可以看到,处于最底层的是传统的离线评估方法,比如 Holdout 检验、交叉检验等,往上是离线 Replay 评估方法,再往上是一种叫 Interleaving 的线上测试方法,最后是线上 A/B 测试。

这4层得以平衡效率和准确性,越底层的方法就负责更多筛选任务,所以要求“快”(类似召回层要快,排序层要准),而在模型快上线前,就应该用最顶层——最接近真实产品体验的A/B测试,来进行最后的模型评估。

image.png

图1 推荐系统的评测体系 (出自《深度学习推荐系统》)

1.2 模型筛选过程

栗子:

现在有 30 个待筛选的模型,如果所有模型都直接进入线上 A/B 测试的阶段进行测试,所需的测试样本是海量的,由于线上流量有限,测试的时间会非常长。但如果我们把测试分成两个阶段,第一个阶段先进行初筛,把 30 个模型筛选出可能胜出的 5 个,再只对这 5 个模型做线上 A/B 测试,所需的测试流量规模和测试时间长度都会大大减少。这里的初筛方法,就是我们在评估体系中提到的离线评估、离线 Replay 和在线 Interleaving 等方法。

image.png

1.3 两点注意

一个是离线 Replay 这个方法,虽然之前学习离线 Replay 的原理(在离线状态下对线上更新过程进行仿真,让整个评估过程“动”起来。),但是对于它的相关工程架构还没有讲过;

第二个是上面提到过的线上 Interleaving 方法。

二、Netflix 的 Replay 评估方法实践

离线 Replay 方法的原理:离线 Replay 通过动态的改变测试时间点,来模拟模型的在线更新过程,让测试过程更接近真实线上环境。

image.png

2.1 未来信息处理

在Replay实现过程中要注意“未来信息”问题,或者叫做“特征穿越”问题。在 Replay 过程中,每次模型更新的时候,我们都需要用历史上“彼时彼刻”的特征进行训练,否则训练和评估的结果肯定是不准确的。

【举栗】

假设 Replay 方法要使用 8 月 1 日到 8 月 31 日的样本数据进行重放,这些样本中包含一个特征,叫做“历史 CTR”,这个特征只能通过历史数据来计算生成。

8 月 20 日的样本就只能够使用 8 月 1 日到 8 月 19 日的数据来生成“历史 CTR”这个特征,绝不能使用 8 月 20 日以后的数据来生成这个特征。在评估过程中,如果我们为了工程上的方便,使用了 8 月 1 日到 8 月 31 日所有的样本数据生成这个特征,供所有样本使用,之后再使用 Replay 的方法进行评估,那我们得到的结论必然是错误的。

为了实现支持这种历史特征的复现,Netflix建立了一套从数据生成到数据处理再到数据存储的数据处理架构。

2.2 Netflix的时光机

Netflix 为了进行离线 Replay 的实验,建立了一整套从数据生成到数据处理再到数据存储的数据处理架构,并给它起了一个很漂亮的名字,叫做时光机(Time Machine)。

在时光机这个架构之上,使用某个时间段的样本进行一次 Replay 评估,就相当于直接穿越到了彼时彼刻,用当时的日志和特征进行模型训练和评估,就像进行了一次时光旅行(Time Travel)一样。

下图 4 就是时光机的架构,图中最主要的就是下图右下角的 Snapshot Jobs(数据快照)模块。它是一个每天执行的 Spark 程序,它做的主要任务就是把当天的各类日志、特征、数据整合起来,形成当天的、供模型训练和评估使用的样本数据。

它还会以日期为目录名称,将样本快照数据保存在分布式文件系统 S3 中(Snapshots),再对外统一提供 API(Batch APIs),供其他模型在训练和评估的时候按照时间范围方便地获取。

S3就是HDFS在amazon 云方案上的实现。

image.png

图4 Netflix的离线评估数据流架构——时光机 (出自The Netflix Tech Blog )

Snapshot Jobs 主任务的源数据来源:图片中Snapshot Jobs模块的上方的 Context Set 模块和左边的 Prana 模块,具体负责的功能如下:

Context Set 模块负责保存所有的历史当天的环境信息。 环境信息主要包括两类:

一类是存储在 Hive 中的场景信息,比如用户的资料、设备信息、物品信息等数据;

另一类是每天都会发生改变的一些统计类信息,包括物品的曝光量、点击量、播放时长等信息。

Prana 模块负责处理每天的系统日志流。 系统日志流指的是系统实时产生的日志,它包括用户的观看历史(Viewing History)、用户的推荐列表(My List)和用户的评价(Ratings)等。这些日志从各自的服务(Service)中产生,由 Netflix 的统一数据接口 Prana 对外提供服务。

小结:

(1)Snapshot Jobs:通过 Context Set 获取场景信息,通过 Prana 获取日志信息,再经过整合处理、生成特征之后,保存当天的数据快照到 S3。

(2)在生成每天的数据快照后,使用 Replay 方法进行离线评估就不再是一件困难的事情了,因为我们没有必要在 Replay 过程中进行烦琐的特征计算,直接使用当天的数据快照(Snapshot Jobs)就可以了。

三、Interleaving 评估方法

3.1 提出的意义

Interleaving 评估方法提出的意义:

它是和 A/B 测试一样的在线评估方法,能够得到在线评估指标;

目的是为了比传统的 A/B 测试用更少的资源,更快的速度得到在线评估的结果。

3.2 Interleaving实现细节

在传统的 A/B 测试中,我们会把用户随机分成两组。一组接受当前的推荐模型 A 的推荐结果,这一组被称为对照组 。另一组接受新的推荐模型 B 的推荐结果,这组被成为实验组。

在 Interleaving 方法中,不再需要两个不同组的用户,只需要一组用户,这些用户会收到模型 A 和模型 B 的混合结果。也就是说,用户会在一个推荐列表里同时看到模型 A 和模型 B 的推荐结果。在评估的过程中,Interleaving 方法通过分别累加模型 A 和模型 B 推荐物品的效果,来得到模型 A 和 B 最终的评估结果。

image.png

图5 传统A/B测试和Interleaving方法的比较 (出自The Netflix Tech Blog )

(1)保证模型的公平性

我们需要考虑推荐列表中位置偏差的问题,要想办法避免来自模型 A 或者模型 B 的物品总排在第一位。因此,我们需要以相等的概率让模型 A 和模型 B 产生的物品交替领先。这就像在野球场打球的时候,两个队长会先通过扔硬币的方式决定谁先选人,再交替来选择队员。

先选模型 A 或者模型 B 的排名第一的物品作为最终推荐列表的第一个物品,然后再交替选择,直到填满整个推荐列表。所以,最后得到的列表会是 ABABAB,或者 BABABA 这样的顺序,而且这两种形式出现的概率应该是相等的,这样才能保证两个模型的公平性。

(2)模型混合的过程

理解 Interleaving 方法混合模型 A 和 B 结果的过程。和刚才说的野球场选人的过程一样,我们先选模型 A 或者模型 B 的排名第一的物品作为最终推荐列表的第一个物品,然后再交替选择,直到填满整个推荐列表。所以,最后得到的列表会是 ABABAB,或者 BABABA 这样的顺序,而且这两种形式出现的概率应该是相等的,这样才能保证两个模型的公平性。

(3)综合效果

最后,我们要清楚推荐列表中的物品到底是由模型 A 生成的,还是由模型 B 生成的,然后统计出所有模型 A 物品的综合效果,以及模型 B 物品的综合效果,然后进行对比。这样,模型评估过程就完成了。

小结:Interleaving 的方法由于不用进行用户分组,因此比传统 A/B 测试节约了一半的流量资源。但是 Interleaving 方法不能彻底替代传统 A/B 测试,在测试一些用户级别而不是模型级别的在线指标时,我们就不能用 Interleaving 方法。

【具体的指标】

比如用户的留存率,用户从试用到付费的转化率等,由于 Interleaving 方法同时使用了对照模型和实验模型的结果,我们就不清楚到底是哪个模型对这些结果产生了贡献。但是在测试 CTR、播放量、播放时长这些指标时,Interleaving 就可以通过累加物品效果得到它们。这个时候,它就能很好地替代传统的 A/B 测试了。

四、作业

在 Interleaving 方法中,推荐列表是由模型 A 和模型 B 的结果共同组成的,那如果模型 A 和模型 B 的结果中有重叠怎么办?是保留模型 A 的结果还是模型 B 的结果呢?你有什么好的想法吗?

【答】可以随机交替选择模型A或B来显示,如果本次随机选择了模型A,那下次可以选择模型B,这样不丢失模型A和B的信息。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
6月前
|
机器学习/深度学习 搜索推荐 算法
推荐系统离线评估方法和评估指标,以及在推荐服务器内部实现A/B测试和解决A/B测试资源紧张的方法。还介绍了如何在TensorFlow中进行模型离线评估实践。
推荐系统离线评估方法和评估指标,以及在推荐服务器内部实现A/B测试和解决A/B测试资源紧张的方法。还介绍了如何在TensorFlow中进行模型离线评估实践。
421 0
|
机器学习/深度学习 搜索推荐 算法
【王喆-推荐系统】模型篇-(task5)wide&deep模型
Wide&Deep是工业界中有巨大影响力的模型,如果直接翻译成中文是宽和深的模型,其模型结构如下所示:wide和deep让模型兼具逻辑回归和深度神经网络的特点。
1160 0
【王喆-推荐系统】模型篇-(task5)wide&deep模型
|
机器学习/深度学习 搜索推荐 测试技术
【王喆-推荐系统】评估篇-(task2)推荐模型评估指标
准确率 (Accuracy) 是指分类正确的样本占总样本个数的比例。
1400 0
【王喆-推荐系统】评估篇-(task2)推荐模型评估指标
|
5月前
|
搜索推荐 算法 UED
基于Python的推荐系统算法实现与评估
本文介绍了推荐系统的基本概念和主流算法,包括基于内容的推荐、协同过滤以及混合推荐。通过Python代码示例展示了如何实现基于内容的推荐和简化版用户-用户协同过滤,并讨论了推荐系统性能评估指标,如预测精度和覆盖率。文章强调推荐系统设计的迭代优化过程,指出实际应用中需考虑数据稀疏性、冷启动等问题。【6月更文挑战第11天】
821 3
|
机器学习/深度学习 存储 分布式计算
【王喆-推荐系统】线上服务篇-(task5)部署离线模型
(1)业界主流的模型服务方法有 4 种,分别是预存推荐结果或 Embeding 结果、预训练 Embeding+ 轻量级线上模型、利用 PMML 转换和部署模型以及 TensorFlow Serving。
993 0
【王喆-推荐系统】线上服务篇-(task5)部署离线模型
|
存储 缓存 搜索推荐
【新闻推荐系统】(task5)推荐系统流程的构建(更新ing)
(1)推荐系统流程构建,主要包括Offline和Online两个部分(本次task主要是下面红色框框内的内容)
264 0
【新闻推荐系统】(task5)推荐系统流程的构建(更新ing)
|
消息中间件 机器学习/深度学习 缓存
【王喆-推荐系统】前沿篇-(task3)流处理平台Flink:实时推荐
ex:小明在刷抖音的足球视频,接着会继续推荐出相关视频,如果推荐系统没有实时抓住用户的兴趣点,推荐大妈广场舞的视频,小明可能会对该产品失去兴趣哈哈。
553 0
【王喆-推荐系统】前沿篇-(task3)流处理平台Flink:实时推荐
|
JSON 分布式计算 搜索推荐
【王喆-推荐系统】复习篇-Sparrow的个性化推荐功能
为了训练推荐模型,需要准备好模型所需的样本和特征。在进行模型线上推断的时候,推荐服务器也需要线上实时拼装好包含了用户特征、物品特征、场景特征的特征向量,发送给推荐模型进行实时推断。
539 0
【王喆-推荐系统】复习篇-Sparrow的个性化推荐功能
|
机器学习/深度学习 存储 自然语言处理
【王喆-推荐系统】特征工程篇-(task3)Embedding基础
(1)Word2vec 的研究中提出的模型结构、目标函数、负采样方法、负采样中的目标函数在后续的研究中被重复使用并被屡次优化。掌握 Word2vec 中的每一个细节成了研究 Embedding 的基础。
444 0
【王喆-推荐系统】特征工程篇-(task3)Embedding基础
|
机器学习/深度学习 分布式计算 搜索推荐
【王喆-推荐系统】开篇词
在所有业界巨头的推荐引擎都由深度学习驱动的今天,作为一名推荐系统从业者,我们不应该止步于: (1)不能满足于继续使用协同过滤、矩阵分解这类传统方法,而应该加深对深度学习模型的理解;加强对大数据平台的熟悉程度,培养结合业务和模型的技术直觉,提高我们整体的技术格局。
370 0
【王喆-推荐系统】开篇词
下一篇
无影云桌面