机器学习32:《推荐系统-V》再谈召回、打分和重排

news2025/2/25 11:22:48

在《机器学习28:推荐系统-概述》一文中,笔者概述了推荐系统的基本术语和一般架构,通过【推荐系统 I~IV】系列课程的学习,相信读者对推荐系统已经有了一定的理解。本节,我们再来回顾一下推荐系统的核心环节——召回、打分、重排。

目录

1.召回-Retrieval

1.1 大规模检索

1.2 近似最邻近-ANN 算法

2.打分-Scoring

2.1 为什么不让候选 Item 生成器评分?

2.2 选择评分目标函数

2.3 得分中的位置偏差

3.重排-Re-ranking

3.1 新鲜度

3.2 多样性

3.3 公平性

4.参考文献


1.召回-Retrieval

假设已有一个嵌入模型。给定一个用户,你将如何决定推荐哪些项目?

在服务时,给定一个查询,首先执行以下操作之一:

  • 对于矩阵分解模型,查询(或用户)嵌入是静态已知的,系统可以简单地从用户嵌入矩阵中查找它。
  • 对于 DNN 模型,在服务时,基于特征向量 x 运行网络,系统即可计算出查询嵌入 \psi(x) 。

如图 1 所示,一旦有了查询嵌入 q,我们就可以在嵌入空间(embedding space)中找到那些 “靠近” 查询嵌入 q的 Item 的嵌入 V_{j} 。这本质上是一个最近邻问题nearest neighbor problem)问题。例如,可以根据相似度得分 s(q, V_j) 返回 Top k 个 Item 。

图 1 嵌入空间中与查询 q 靠近的 Item 示意图

 在 “相关Item” 推荐场景中,我们可以使用类似的方法。例如,当用户正在观看 YouTube 视频时,系统可以首先查找该 Item(视频)的嵌入,然后,在嵌入空间中查找那些距离该 Item 接近的其他 Item 的嵌入 V_j 

1.1 大规模检索

为了计算嵌入空间中的最近邻居,系统可以对每个潜在候选者进行全面的评分。不过,对于非常大的物料库来说,全面的评分可能会很昂贵,因此,我们需要采取一些措施来降低成本:

  • 1-如果查询嵌入是静态已知的,系统可以离线执行评分,预先计算并存储每个查询的最佳候选列表,在服务时,直接查询并返回即可。在 “相关 Item ” 推荐场景中,为了降低成本,离线打分是最常用的策略之一。
  • 使用近似最近邻(approximate nearest neighbors,ANN)

1.2 近似最邻近-ANN 算法

对于一个现有的数据候选集(Dataset),返回在数据候选集中与某一查询 q 最相似的 Top K 数据。最朴素的想法就是,每次来了一个新的查询 q,都遍历一遍数据候选集(Dataset)里面的所有数据,计算出 query 与 dataset 中所有元素的相似度或者距离,然后精准地返回 Top K 相似的数据即可。

但是,当数据候选集特别大的时候,遍历一遍数据候选集里面的所有元素就会耗费过多的时间,其时间复杂度是 O(n), 因此,计算机科学家们开发了各种各样的近似最近邻搜索方法(approximate nearest neighbors,ANN)来加快其搜索速度,在精确率和召回率上面就会做出一定的牺牲,但是其搜索速度相对暴力搜索有很大地提高。

在推荐/搜索场景下,通常都是欧式空间里面的数据,形如 x=(x1,⋯,xn)∈\mathbb{R}^{n}, 其中 n 是欧氏空间的维度。常用的距离公式包括:

  • Manhattan 距离:L1 范数;
  • Euclidean 距离:L2 范数;
  • Cosine 距离:1 – Cosine 相似度;
  • 角距离:用两个向量之间的夹角来衡量两者之间的距离;
  • Hamming 距离:一种针对 64 维的二进制数的 Manhattan 距离,相当于 \mathbb{R}^{64} 中的 L1 范数;
  • Dot Product 距离: \mathbf{x}\cdot \mathbf{y}=\sum_{i=1}^{n}x_{i}\cdot y_{i}

在近似最近邻搜索(ANN)领域,有很多开源的算法可以使用,包括但不限于:

  • Annoy(Approximate Nearest Neighbors Oh Yeah);
  • ScaNN(Scalable Nearest Neighbors);
  • Faiss(Billion-scale similarity search with GPUs);
  • Hnswlib(fast approximate nearest neighbor search);

关于 ANN 算法,读者可以查看文章《近似最近邻搜索算法 ANNOY》


2.打分-Scoring

通过召回,可以生成一个候选 Item 池。之后,我们还需要另一个模型对候选Item进行评分和排名,以便选择出要返回的 Item 集——在推荐领域,这一环节通常被称为【排序】。一个推荐系统可能有多个不同来源的候选 Item 生成器,例如: 

  • 矩阵分解模型中的相关 Item。
  • 考虑用户个性化特征的 Item。
  • “本地”与“远程” Item;即考虑地理信息的 Item
  • 流行的 Item。
  • 社交图谱;即朋友喜欢或推荐的 Item。

打分系统将上述不同来源的 Item 组合成一个公共候选池——(本质上是【多路召回】),然后通过单个模型对其进行评分并根据该分数进行排名。例如,系统可以训练一个模型来预测用户在 YouTube 上观看视频的概率,具体如下:

  • 查询特征(例如用户观看记录、语言、国家、时间)
  • 视频特征(例如标题、标签、视频嵌入)

然后,系统可以根据模型的预测对候选池中的视频进行排名。

2.1 为什么不让候选 Item 生成器评分?

由于候选生成器会计算分数(例如嵌入空间中的相似性度量),因此,理论上可以使用它们来进行排名。但是,由于以下原因,我们应该避免这种做法:

  • 一些系统依赖于多个候选生成器。这些不同生成器的分数可能无法比较——打分的体系不一样,无法客观比较。以高考为例,直接对比不同省份的高考分数是不客观的,因为打分标准、试卷都不尽相同。
  • 经过召回,得到的候选 Item 数量一般较少,打分算力成本可控,因此,打分应采用更多的特征和更复杂的模型,从而更好地捕获上下文,提高推荐效果。

2.2 选择评分目标函数

评分函数的选择可以极大地影响 Item 的排名,并最终影响推荐的质量。常见的目标如下:

  • 最大化点击率

如果评分针对点击进行优化,系统可能会推荐点击诱饵视频。这种评分策略会产生点击,但不会带来良好的用户体验。用户的兴趣可能很快就会消失。

  • 最大化观看时间

如果评分针对观看时间进行优化,系统可能会推荐很长的视频,这可能会导致较差的用户体验。

  • 增加多样性并最大化会话观看时间

推荐较短的视频,保持用户的参与度。

2.3 得分中的位置偏差

如图 2 所示,与屏幕上显示靠前的 Item 相比,屏幕上显示靠后的 Item 不太可能被点击。然而,在对视频进行评分时,系统通常不知道该视频的链接最终会出现在屏幕上的哪个位置。查询具有所有可能位置的模型的成本太高。即使查询多个位置是可行的,系统仍然可能无法在多个排名分数中找到一致的排名。常用解决方案:

  • 创建与位置无关的排名。
  • 对所有候选 Item 进行排名。

图 2 Item C端展示示意图


3.重排-Re-ranking

在推荐系统的最后阶段,系统可以对候选 Item 进行重新排名——这一环节通常被称为【重排】,以考虑其他标准或约束。一种常用重排的方法是使用过滤器来删除一些候选 Item。

  示例: 可以通过执行以下操作对视频推荐器实施重新排名:

  1. 训练一个单独的模型来检测视频是否为“诱饵”。
  2. 在候选列表上运行该模型。
  3. 删除模型归类为点击诱饵的视频。

另一种重排方法是手动转换排名器返回的分数。

示例: 系统通过将分数修改为以下函数来重新排名视频:

  • 视频时效(例如,为了推广更新鲜的内容,可以将最新上架的视频放在更靠前的位置)
  • 视频长度

本节简要讨论新鲜度、多样性和公平性。这些因素是有助于改进推荐系统的众多因素之一。其中一些因素通常需要修改流程的不同阶段。每个部分都提供了可以单独或组合应用的解决方案。

3.1 新鲜度

大多数推荐系统旨在合并最新的使用信息,例如当前的用户历史记录和最新的项目。保持模型的新鲜度有助于模型提出好的建议。常用解决方案如下:

  • 尽可能频繁地重新运行训练以了解最新的训练数据。建议热启动训练,以便模型不必从头开始重新学习。热启动可以显着减少训练时间。例如,在矩阵分解中,热启动模型先前实例中存在的项的嵌入。
  • 创建一个 “平均” 用户来代表矩阵分解模型中的新用户。不需要为每个用户使用相同的嵌入 ——可以根据用户特征创建用户集群。
  • 使用 DNN,例如 softmax 模型或双塔模型。由于该模型采用特征向量作为输入,因此它可以在训练期间未见过的查询或 Item上运行。
  • 创建时间作为一项特征。例如,YouTube 可以增加视频的创建时间或上次观看的时间作为一项特征。

3.2 多样性

如果系统总是推荐与查询嵌入“最接近”的 Item,则候选 Item 往往彼此非常相似。这种缺乏多样性可能会导致糟糕或无聊的用户体验。例如,如果 YouTube 只推荐与用户当前正在观看的视频非常相似的视频,例如除了猫头鹰视频之外什么都没有,用户可能会很快失去兴趣。常用解决方案如下:

  • 使用不同的源训练多个候选 Item 生成器。
  • 使用不同的目标函数训练多个排名器。
  • 根据流派或其他元数据对 Item 重新排名,以确保多样性。

3.3 公平性

模型应该公平对待所有用户。因此,请确保模型不会从训练数据中学习无意识的偏差。常用的解决方案如下:

  • 在设计和开发中纳入不同的观点。
  • 在综合数据集上训练 ML 模型。当数据过于稀疏时(例如,当某些类别代表性不足时),请添加辅助数据。
  • 跟踪统计指标(例如准确性和绝对误差)以观察偏差。
  • 为特殊的群体建立单独的模型。


4.参考文献

1-https://developers.google.cn/machine-learning/recommendation/dnn/re-ranking

2-近似最近邻搜索算法 ANNOY(APPROXIMATE NEAREST NEIGHBORS OH YEAH) - 知乎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/767870.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

常见的电机控制算法实现

BLDC电机控制算法 BLDC(Brushless Direct Current Motor)无刷电机属于自换流型(自我方向转换),因此控制起来更加复杂。 BLDC电机控制要求了解电机进行整流转向的转子位置和机制。对于闭环速度控制,有两个附加要求,即…

代码随想录day21

二叉搜索树的最小绝对差 思路:记住二叉搜索树的特性,中序遍历是有序数组,所以我们直接对树做一次中序遍历,然后对数组中的node进行一次循环遍历不断获取最小值就行了,这里需要创建一个max_value拿来作比较 对于中序遍历…

推荐系统-基于标签的Top-N个性化推荐实现

随着移动互联网的快速发展,UGC标签系统受到越来越多推荐应用,标签不但能反映用户的兴趣又能描述物品的本身特征。现有的标签推荐算法没有考虑用户的连续行为所产生的影响,于是人们提出了一种基于标签的个性化推荐算法。该算法将〈用户-标签-物…

【idea】idea全局设置Maven配置

Idea版本:2021.1.1 1、点击File->Close project 2、点击Customize->All settings 3、设置Maven

2023年8个最佳WordPress电子书主题

您是正在为您的网站寻找最佳的WordPress电子书主题吗?无论您是独立作家、出版社还是同时销售电子书和实体书的在线书店,拥有一个可以直接销售电子书的网站都是一个好主意。 销售电子书可能有助于分销和扩大影响力,但也会侵蚀您的利润。例如&…

11、动手学深度学习——语言模型和数据集:代码详解

我们了解了如何将文本数据映射为词元,以及将这些词元可以视为一系列离散的观测,例如单词或字符。 假设长度为 T T T的文本序列中的词元依次为 x 1 , x 2 , … , x T x_1, x_2, \ldots, x_T x1​,x2​,…,xT​。于是, x t x_t xt​&#xff08…

spring整合dataJPA

1.入门案例 1.1 项目整体结构 表:sql DROP TABLE IF EXISTS t_user; CREATE TABLE t_user ( user_id int(0) NOT NULL AUTO_INCREMENT, user_name varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, real_name varchar(255) CHAR…

关于互联网金融平台性能测试的过程经历分享

目录 项目角色 测试范围 测试策略 项目角色 性能测试专家,负责互金平台以及5个关联外围系统性能测试方案制定、测试策略制定,测试前期配合架构组,某某云根据平台内各模块的目标处理能力流量统计来计算调用占比并估算机器设备配置。端对端…

数据结构 ~ 栈、队列

栈 一个后进先出的数据结构、JS中没有栈,可以使用 Array 模拟 const stack [] stack.push(1) // 入栈 stack.push(2) // 入栈 const item1 stack.pop() // 出栈 const item2 stack.pop() // 出栈以上代码可以使用 nodeJs 断点调试(F5启动&#xff0…

伊利投资者日:千亿航母如何“加速度”?

7月14日,伊利股份举办了投资者日活动。在交流中,伊利股份管理层积极表示了实现 “2025年实现全球乳业前三,2030年实现全球乳业第一”的目标信心,也展示了公司目前的成绩以及长期成长的规划。 从投资者日活动来看,伊利透…

10.6.4 【Linux】字符转换命令: tr, col, join, paste, expand

tr tr 可以用来删除一段讯息当中的文字,或者是进行文字讯息的替换。 其实这个指令也可以写在“正则表达式”里头!因为他也是由正则表达式的方式来取代数据的!以上面的例子来说,使用 [] 可以设置一串字呢!也常常用来取…

C语言项目小游戏之俄罗斯方块

今天给大家带来一个用C语言实现的俄罗斯方块小游戏 游戏截图&#xff1a; 首先我们先创建一个名为mywindows.h的头文件。用来设置我们操作台的各种功能实现 mywindows.h #ifndef MYWINDOWS_H_INCLUDED #define MYWINDOWS_H_INCLUDED//系统调用模块 #include <windows.h&g…

华为OD机试真题 Java 实现【计算最接近的数】【2023 B卷 100分】,附详细解题思路

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、具体解题步骤六、Java算法源码七、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xf…

HCIP第六次作业

1.创建VLAN&#xff0c;并改变相连各自PC接口的类型&#xff0c;同时划分VLAN&#xff0c;做策略即保证&#xff1a;pc2可以访问PC4/5/6;但PC4可以访问Pc5&#xff0c;不能访问PC6 &#xff1b;PC5不能访问PC6 [sw1]vlan batch 2 to 5 批量创建VLAN [sw1]int g0/0/1 [sw1-Gig…

MySQL数据库与表的基本操作 + 表的基本CRUD(增删改查)操作

文章目录 前言一、库的基本操作显示当前所有数据库创建数据库使用数据库删除数据库 二、表的基本操作创建表查看库中所有表查看表结构删除表 三、表的增删改查(基础)新增数据(Create)全列插入指定列插入 查询数据(Retrieve)全列查询指定列查询查询字段为表达式指定列的别名去重…

微服务: 04-springboot中rabbitmq配置,消息回收,序列化方式

目录 1. 本文简介: 1.1 java序列化的缺点 ---> 1.1.1 无法跨语言 --->1.1.2 易被攻击 ---> 1.1.3 序列化后的流太大 ---> 1.1.4 序列化性能太差 2. 配置总览 2.1 基础配置 2.2 连接重试配置 2.3 异常重试机制 2.4 确认模式(本篇是自动) ---> 2.4.1…

VoIP监控工具有什么作用

VoIP 监控工具利用思科的 IPSLA 技术生成合成流量并监控客户端体验的呼叫质量。与被动监控VoIP指标相反&#xff0c;IPSLA技术允许IT管理员主动并在潜在问题发生之前检测到它们&#xff0c;这使组织能够轻松遵守严格的SLA指标。 思科 IPSLA 技术在两台设备之间创建流量&#x…

【Ceph集群应用】Ceph块存储之RBD接口详解

Ceph块存储之RBD接口详解 1.创建Ceph块存储系统RBD接口1.1 删除镜像1.2 还原镜像1.3 在线扩容1.4 回滚镜像到指定位置1.5 删除快照1.6 快照分层1.7 快照展平1.8 镜像的导出导入 接上文基于ceph-deploy部署Ceph集群详解 1.创建Ceph块存储系统RBD接口 &#xff08;1&#xff09;…

一文9个步骤带你从0到1入门接口自动化测试!

1.请问你是如何做接口测试的&#xff1f; 大体来说&#xff0c;经历以下过程&#xff1a;接口需求调研、接口测试工具选择、接口测试用例编写、接口测试执行、接口测试回归、接口测试自动化持续集成。 具体来说&#xff0c;接口测试流程分成以下九步&#xff1a; 第一步&…

设计模式 ~ 观察者模式

概念 观察者模式是一种设计模式&#xff0c;也被称为发布-订阅模式或事件模式&#xff1b; 用于在对象之间建立一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都会得到通知并自动更新&#xff1b; ~ 如&#xff1a;DOM事件、vue …