CIKM2021 | 将对比学习用于解决推荐系统长尾问题

本文主要介绍了google在cikm 2021上发表的一篇文章,该文章探讨了如何通过对比学习解决推荐系统中的长尾问题。

CIKM2021 | 将对比学习用于解决推荐系统长尾问题

论文标题为《Self-supervised Learning for Large-scale Item Recommendations》,论文链接为:https://www.php.cn/link/f49a2479665b3bd13ec08d5d1a8bbe4c。

首先,让我们定义一下长尾效应:20%的热门商品占据了80%的曝光量,而剩下的80%的小众、长尾商品则很少获得曝光机会,因此在训练样本中显得稀少且弱势。

传统的推荐模型通常迎合大多数用户的需求,由于长尾商品曝光机会少,难以满足小众兴趣,这对成熟的生态系统不利,阻碍了用户增长。

举个例子:某些原本不受重视的销量小但种类多的商品,由于总量庞大,其累积收益可能超过主流商品。在这种情况下,算法挖掘小众兴趣的能力变得至关重要。

对于样本不均衡的问题,对比学习通常会想到数据增强(data augmentation)。对比学习的核心是通过数据增强构建正负样本变体,倾向于无监督学习,学习一个优秀的特征提取器。在推荐系统中引入对比学习用于去偏(debias),解决“少数人群+冷门物料,标注样本少”的问题,从逻辑上是可行的。

《Self-supervised Learning for Large-scale Item Recommendations》利用对比学习辅助训练双塔召回模型,旨在使item tower对冷门、小众商品也能学习出高质量的embedding,从而改善内容生态。从公式上看,可以理解为将对比学习的损失(loss)作为主任务损失的一个正则项。

CIKM2021 | 将对比学习用于解决推荐系统长尾问题

论文解读中,小Q认为论文中有两个核心技术点:一个是对比学习部分,另一个是联合训练部分。

3.1 在对比学习数据增强部分,论文提出了对于商品特征的数据增强分为两个步骤:Masking和Dropout。其中Masking是采用默认embedding随机掩盖一些输入特征,而Dropout则是简单地随机丢失一些输入特征。

3.2 论文定义了一个基准方法Random Feature Masking(RFM),采用互补masking模式,即将特征集拆分为两个互斥特征集,构建为两个扩展变体。具体来说,将特征集随机分成两个不相交的子集。大致结构如下:

CIKM2021 | 将对比学习用于解决推荐系统长尾问题

对于某个商品xi,随机抽取一半的特征h,得到变体yi,再经过Encoder H,得到向量zi;保留剩下的另一半特征g,得到变体yi’,再经过Encoder G,得到向量zi’。来自同一个商品xi的两种变体对应的embedding zi和zi’,两者之间的相似度应该越大越好。按照同样的方法,另一个商品xj,用一半特征h得到变体,再经过Encoder H得到yj;用另一半特征g,得到变体,再经过Encoder G得到yj’。来自不同商品的变体对应的embedding,两者之间的相似度应该越低越好。

3.3 论文基于信息论中的互信息,提出了Correlated Feature Masking(CFM)方法。这个方法在每个batch进行训练时,先会随机选取一个特征f_seed,然后选择topn(n为商品的特征总数的一半)构建一个特征集作为变体。

Calliper 文档对比神器 Calliper 文档对比神器

文档内容对比神器

Calliper 文档对比神器 28 查看详情 Calliper 文档对比神器

3.4 关于为什么采用互补masking模式构建对比学习的变体,以及为什么采用互信息高的特征集会比随机masking效果好,论文中有这样一段描述:

For instance, the SSL contrastive learning task may exploit the shortcut of highly correlated features between the two augmented examples, making the SSL task too easy.

从字面上看,随机masking可能会将一些高度相关的特征分到两个变体中,使得对比学习任务变得过于简单。为了增加难度,采用互补masking模式。进一步解释,随机masking可能使得模型在对比学习过程中,通过关联度较高的特征来“猜”出被mask的特征,使得任务训练变得简单。

举个例子,假设商品有品类、品牌、产品系列、价格等特征,如果“品牌”被拆分到变体h中,“产品系列”被拆分到变体g中,看上去两个变体不同,但两个特征包含的隐信息其实相差不大,最终两个变体的embedding太容易相似,达不到训练模型的目的。采用互补masking模式是为了保证变体的差异性。

3.5 完成对比学习后,下一步是联合训练。论文中的模型图如下:

CIKM2021 | 将对比学习用于解决推荐系统长尾问题

从图中可以看出,整个item tower是被user-item双塔召回的主任务、对比学习辅助任务中的encoder H和G所共享的。

论文的第二个重点是,“We sample items uniformly from the corpus for Lself”,论文中明确表示参与对比学习的样本和参与主任务的样本来自不同的样本空间。主任务需要拟合用户与商品之间的真实互动,仍以已经曝光过的user/item为主。对比学习部分是为了消除推荐长尾问题,主要关注曝光率低的商品。

参考资料:

[1] 石塔西:少数派报告:谈推荐场景下的对比学习:https://www.php.cn/link/9dd5b938ee55c873017b525aaf333882

[2] 推荐场景下的对比学习总结

[3] 基于对比学习的推荐算法总结

[4] self-supervised learning for large-scale item recommendations:https://www.php.cn/link/6e53ba571a5ed6223b77eeb7ca2c2e44

以上就是CIKM2021 | 将对比学习用于解决推荐系统长尾问题的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/462986.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月8日 04:17:01
下一篇 2025年11月8日 04:18:08

相关推荐

  • DDD中值对象与实体设计的实践指南

    本文深入探讨了在领域驱动设计(ddd)和六边形架构中,如何有效处理复杂数据模型,特别是包含大量字段和多表关联的场景。文章阐明了值对象的正确应用,强调其应代表概念整体而非单一字段,并指导如何避免过度工程化。同时,文章提出了关于实体设计和跨有界上下文关系处理的策略,倡导构建职责单一、易于管理的代码单元,…

    2025年12月13日
    000
  • php中symfony框架有何用法?

    Symfony 是一个成熟、模块化、遵循标准的 PHP 框架,用于构建可维护、可测试、可扩展的 Web 应用或 API;支持按需使用组件、快速生成项目骨架、直观路由与控制器、依赖注入、开箱即用的安全、表单、ORM 和命令行等功能。 Symfony 是一个成熟、模块化、遵循标准的 PHP 框架,核心用…

    2025年12月13日
    000
  • OpenCart多店铺管理:高效同步更新与集中化部署实践

    本文旨在解决OpenCart多站点文件同步更新的难题,核心在于利用OpenCart原生支持的多店铺功能,将多个独立的站点整合到一个单一的安装实例中。通过这种方式,可以实现文件、数据库的集中管理和统一更新,显著提升维护效率,确保所有店铺核心文件的一致性,从而避免为每个站点单独推送文件变更的繁琐操作。 …

    2025年12月13日
    000
  • CodeIgniter 3 (CI3) 结合 SQLSRV 数据库获取数据教程

    本教程旨在解决 codeigniter 3 框架中通过 sqlsrv 驱动连接 sql server 数据库时,无法直接获取查询结果数据的问题。我们将详细介绍 codeigniter 数据库抽象层的特性,阐明 `query()` 方法返回的是结果对象而非直接数据数组,并提供正确的模型层代码示例,指导…

    2025年12月13日
    000
  • Laravel:利用“Has One Of Many”关系实现模型的高效排序

    本文深入探讨了在 Laravel 中如何优雅地解决根据“Has One Of Many”关系对父模型进行排序的挑战。通过分析常见问题并提供详细的子查询连接(Subquery Joins)解决方案,教程旨在帮助开发者实现基于关联模型特定最新记录的准确排序,同时保持代码的清晰性和查询的性能。 在 Lar…

    2025年12月13日
    000
  • 计算重叠日期区间内的最大并发数:基于SQL日历表的解决方案

    本教程详细阐述了如何使用sql和日历表来精确计算特定时间段内,具有重叠日期区间的事件(如学生入学)的最大并发数量。针对传统count(*)方法无法处理复杂重叠场景的局限性,我们提出了一种通过逐日统计并发数并取最大值的策略,确保结果的准确性,适用于mysql 5.6等版本。 1. 理解并发事件计算的挑…

    2025年12月13日
    000
  • 管理PHP伪Cron任务:服务器重启时的中断检测与自启动方案

    本文旨在探讨在无服务器管理权限下,PHP伪定时任务在服务器重启后中断的问题,并提供两种主要的解决方案:利用Web请求触发机制实现任务的自动重启,以及在支持Systemd的Linux环境中,通过用户级服务(`systemctl –user`)实现更健壮的自启动与监控。文章将详细阐述其原理、…

    2025年12月13日
    000
  • Livewire 文件上传首次验证失败的排查与解决

    本文深入探讨 Livewire 文件上传首次验证失败的常见问题,分析其主要原因在于文件异步上传与表单提交时序不匹配,以及开发服务器的潜在限制。文章将提供详细的代码示例和最佳实践,指导开发者如何利用 Livewire 的加载状态功能优化用户体验,并确保文件上传验证的稳定性和可靠性。 Livewire …

    2025年12月13日
    000
  • 在Laravel中验证第三方JWT(RS256 & JWKS)的教程

    本教程将指导您如何在laravel应用中验证来自外部身份提供商的rs256签名jwt。我们将利用tymondesigns/jwt-auth包,通过配置jwks获取的公钥、实现自定义认证守卫(guard)来处理令牌解析与签名验证,并将其无缝集成到laravel的认证体系中,从而确保api请求的安全性。…

    2025年12月13日
    000
  • 使用array_filter在PHP多维数组中进行多条件搜索

    本文深入探讨了在php中如何高效地从多维数组中查找符合特定多重条件的数据。针对`array_search`无法处理复杂多条件查询的局限性,我们详细介绍了`array_filter`函数的使用方法。通过匿名函数结合`use`关键字,`array_filter`能够灵活地对数组中的每个元素应用自定义逻辑…

    2025年12月13日
    000
  • 为什么SublimeJ多项目顺_内存占用仅为IDE1/5

    SublimeJ内存占用低因其采用轻量级内核,按需加载模块;使用增量索引减少峰值消耗;共享内存池实现跨项目去重;并优化GC调度,降低运行时开销。 如果您发现SublimeJ在处理多项目时内存占用远低于传统IDE,这可能与它的架构设计和资源管理机制密切相关。以下是对此现象的分析及相关优化原理: 一、采…

    2025年12月13日
    000
  • Laravel深度调用中抛出自定义验证异常并统一响应

    在Laravel应用中,当业务逻辑需要在深层嵌套函数中进行自定义验证,并希望像内置验证失败一样,直接向前端(尤其是AJAX请求)返回统一的HTTP 422 JSON错误响应时,传统方法往往需要在调用链中层层传递错误状态。本文将介绍如何通过手动抛出`IlluminateValidationValida…

    2025年12月13日
    000
  • PHP Memcache 精准缓存项管理:删除与更新策略

    本文旨在提供一套在PHP中使用Memcache精准管理缓存项的教程。我们将探讨如何通过`Memcache::delete()`配合`Memcache::add()`或`Memcache::set()`方法来清除并更新特定缓存项,而非执行全量刷新。文章将详细阐述`add()`与`set()`之间的关键…

    2025年12月13日
    000
  • 防止PHP表单在页面加载或刷新时自动提交的教程

    本教程详细介绍了如何解决PHP表单在页面首次加载或刷新时自动提交数据的问题。核心解决方案是采用POST-Redirect-GET(PRG)模式,通过在数据处理成功后执行服务器端重定向,有效阻止浏览器在刷新时重复提交POST请求,从而优化用户体验并避免数据重复插入。 理解问题:为何表单会重复提交? 在…

    2025年12月13日
    000
  • 在Yii2表单配置中插入自定义文本标签或标题

    本教程详细阐述如何在yii2的动态表单配置数组中,正确地插入非输入型的文本标签或章节标题,以增强表单的可读性和组织性。文章将通过示例代码演示如何构建此类配置项,并重点强调前端渲染逻辑对这些特殊标签的处理方式,确保它们能被正确识别和展示。 引言 在开发复杂的Web表单时,除了各种输入字段外,我们经常需…

    2025年12月13日
    000
  • 在YARA规则中匹配PHP动态函数调用:应对字符串拼接混淆

    本文旨在探讨在yara规则中有效匹配php中通过字符串拼接进行混淆的动态函数调用,特别是`gzinflate(base64_decode())`模式。文章分析了php字符串拼接的挑战,并提供了多种yara规则匹配策略,包括使用灵活的正则表达式、结合关键词与上下文以及处理内部拼接模式,旨在提高检测的鲁…

    2025年12月13日
    000
  • php文件怎么运行

    运行PHP文件需通过服务器环境解析,常见方法包括:使用XAMPP、WampServer或MAMP等集成环境,将文件放入htdocs或www目录后通过浏览器访问;利用PHP命令行工具在CLI模式下执行php your_file.php进行逻辑测试;使用PHP内置Web服务器,进入文件目录后运行php …

    2025年12月13日
    000
  • php中CakePHP框架如何使用?

    CakePHP 是约定优于配置的成熟 PHP 框架,支持快速构建可维护 Web 应用;提供内置 ORM、路由、表单、验证与安全防护,通过 Composer 初始化项目,遵循 MVC 结构与命名约定实现零配置运行。 CakePHP 是一个成熟、约定优于配置的 PHP Web 开发框架,适合快速构建结构…

    2025年12月13日
    000
  • php网页源码怎么用_php网页源码用展示与交互设置【指南】

    首先确保PHP环境正确配置并启动服务器,将文件放入指定目录后通过localhost访问;接着检查PHP语法,确保代码包裹在 如果您正在尝试使用PHP网页源码实现页面内容的展示与用户交互功能,但页面未按预期输出动态内容或表单无法响应,则可能是由于代码执行环境配置不当或交互逻辑存在错误。以下是实现PHP…

    2025年12月13日
    000
  • Yii设置邮箱发文件的方法

    Yii框架需借助yii2-swiftmailer扩展实现邮件发送,配置mailer组件并设置SMTP参数,通过attach()或attachContent()添加附件,注意路径、编码及授权码等细节。 Yii 框架本身不直接提供邮件发送功能,需借助第三方扩展(如 yii2-swiftmailer)实现…

    2025年12月13日
    000

发表回复

登录后才能评论
关注微信