当前位置: 首页 > news >正文

技术细分|推荐系统——推荐系统中的数据去偏方法

本篇的主要脉络同样依据中科大何向南教授、合工大汪萌教授联合在 TKDE 上的一篇综述文章展开:Bias and Debias in Recommender System: A Survey and Future Directions

下面按照前导文章中介绍的数据偏差 Selection Bias、Conformity Bias、Exposure Bias、Position Bias,分别介绍相应的去偏方法。Popularity Bias、Unfairness 以及如何减缓闭环累积误差的方法,暂时不会在本文中涉及。

一、基础概念

1. Propensity Score

Propensity Score 的详细介绍建议查看下文,,注意掌握几个变量定义:干预变量 T,结果变量 Y,混淆变量 X,观测变量 U

集智科学家:如何在观测数据下进行因果效应评估78 赞同 · 1 评论文章​编辑

    • 定义:在干预变量之外的其他特征变量为一定值的条件下,个体被处理的概率
    • 倾向指数概括了群体的特征变量,如果两个群体的倾向指数相同,那他们的干预变量就是与其他特征变量相独立的。对于药物实验来说,如果能保证两群人的他吃药的概率完全一样,那么可以说这两群人其他特征分布也是一样
    • 倾向指数在实际应用中观测不到,但可以使用有监督学习的方法进行估计,一般是回归

在推荐中来说“被处理”可以理解为“被观测到”,如何计算某个 item 被某个 user 观测到的概率?容易想到的思路是在保持其他条件相同再计算概率,例如排序队列位置不同时重复同个 user 在同个 item 上的观测概率,但这种理想情况一般会伤害用户体验。

如何计算 Propensity Score 是一个独立问题,可以 naive 的统计方法(统计历史上同位置的平均点击率)、隐变量学习(例如 click models 中预估 position bias 的方法,可以参考我之前的文章  成指导:深入点击模型(二)PBM, UBM 与 EM 算法),或者 [SIGIR 2018] Unbiased Learning to Rank with Unbiased Propensity Estimation 中介绍的通过对偶学习 Ranking Model 和 Propensity Model 来求解 Propensity Score 思路,也可以用于参考。

2. 点击模型(click models)

介绍点击模型之前,需要区分 click models 区别于 FM/FFM/Wide&Deep/DeepFM 等一系列近年大火的 CTR 模型,点击模型关注更多的是可解释性,通过人为知识提出先验假设,再通过概率图模型独立建模各因素,更多时候依赖于 EM 算法求解。因此各种 bias 其实都可以作为其中一个因素存在于概率图,然后被求解出来。点击模型被广泛使用于解决 exposure bias/ position bias 中,之前我有两篇文章深入介绍过点击模型,这里就不重复写了:

  1. 成指导:深入点击模型(一)RCM, CTR, CM 与 极大似然估计
  2. 成指导:深入点击模型(二)PBM, UBM 与 EM 算法

二、数据偏差

数据偏差的处理方法有一些共通思路,这里先把共通思路介绍一下,再分开介绍各种 Bias 的独特处理方法。一般需要去偏的步骤有 2 个,分别是在评估中去偏、训练中去偏。

1. 评估去偏

评估推荐系统在评分预测、推荐准确率上的常见 user-item 评估度量指标吧δ_{u,i}可以是 AUC、MAE、MSE、DCG@K、Precision@K,对多个评分样本的评估度量 H(R^) ,一般是单个样本度量的加权平均。这里“多个样本”常规做法是指观测到的样本而不是真实的全量样本,此时会出现 selection bias 造成的评估指标上的偏差,修正后的评估度量为 

常用工具有 Propensity Score(倾向分数) 。做法是在单个样本的评估指标中加入 IPS(逆倾向得分,即倾向指数的倒数),倾向性 P_{u,i}定义为观测某个 user-item 评分值的边际概率 P(O_{u,i}=1) ,因此修正评估度量

2. 训练去偏

  1. 数据代入法。数据偏差的本质是缺少无偏数据,那么通过协同过滤、社交关系加强等方式,补充尽可能相似的数据源,并且根据相似程度决定数据源的贡献程度
  2. 倾向分数。这个比较好理解,利用 IPS(逆倾向分数)修正每组样本的 loss 贡献值,如  ,其中Reg(θ) 是参数的正则化限制
  3. Meta Learning。Meta Learning 的 motivation 就是如果模型可以先在数据较多的数据集上学到这些有关“该如何学习新的知识”的先验知识,由此让模型先学会“如何快速学习一个新的知识”,再去数据较少的数据集上学习就变得很容易了。这么看 Meta Learning 完美契合 selection bias 的解决方案,但因为这是个独立学科方向,建议参考以下回答单独理解:

什么是meta-learning?599 关注 · 17 回答问题​编辑

三、选择偏差

1. 评估去偏

  • ATOP
ATOP 是另一种度量推荐系统效果的无偏指标。ATOP 方法同时建立在 2 个假设之上:(1)高相关性评分在观测数据上是随机缺失的;(2)其他评级值允许任意丢失数据机制只要丢失的概率高于相关的评分值。这两个假设实际上较难同时符合,因此 ATOP 的应用也较少
为用户 u 已观测到的相关性 item 的个数,  为在 TopK item 中的个数,作者证明 ATOP 是对平均召回率的无偏估计,并与用户的平均精度成正比

2. 训练去偏

Doubly Robust 模型。这个方法需要根据已有数据,再学习一个预测的模型反事实评估某个个体在干预变量变化后,结果变量的期望值。经过证明,只要倾向指数的估计模型和反事实预测模型中有一个是对的,计算出的平均因果效应就是无偏的;但如果两个模型估计都是错误的,那产生的误差可能会非常大(看起来也并非多么 robust)。

四、一致性偏差

conformity bias 大多数情况下是由于人们的“从众心理”导致的,比较简单的处理方法就是将投票人数(样本数量)、投票分布、得分平均值,都作为建模的输入信号,用一个拟合器去拟合去偏后的修正得分值。本质上就是希望把“社会因素“作为考虑的一部分。

五、曝光偏差

1. 训练去偏

  • 倾向分数
类似 selection debias 小节,使用逆倾向分数计算即可。当计算度量指标的时除以倾向分数。这里提一篇文章 [WSDM 2020] Unbiased Recommender Learning from Missing-Not-At-Random Implicit Feedback,先假设: 即物品必须曝光给用户且相关才会发生点击。之后定义了一个理想化的 loss 函数对 label=0/1 的样本求损失和,每个样本会被相关性等级度量: 
经过去偏操作之后,能够得到修正后的损失函数无偏预估值形式:
  • 采样
虽然曝光的内容有偏,但是一般学习中使用到的正负样本都是采样得到的,那么这里就有一个阶段需要独立处理:采样。而在一般的信息检索问题中,负例一般是远远大于正例,所以对冗余的负例选择性采样是一个需要探索的问题。可以使用最简单的随机采样,或者对于比较流行的负例内容做重复采样(流行数据一般经过充分曝光,负例程度比较确信)。更复杂的思路里,会把样本的 side information 或者图关系作为预测采样率的工具,按照采样率工作。
这里多说一点,实际工作中,我们尝试对于未曝光的样本,适当采样作为”伪负样本“(因为不确定未曝光是正是负,但因为推荐问题中正例占比很低)可以增加模型的泛化能力。

六、位置偏差

Position bias 广泛存在于搜索系统中(大家自己想想是不是经常性点击百度/谷歌搜索结果的第一位返回结果),推荐系统中也同样存在。而经典去偏方法就是使用点击模型(包括 click models 的各种书籍或经典论文中,一般也都是拿 position bias 作为分析示例)。同理,逆倾向分数同样适用。点击模型、倾向分数的解释,请参考本文的文章开头。

在神经网络 CTR 模型中,华为发表的[RecSys 2019] PAL: A Position-bias Aware Learning Framework for CTR Prediction in Live Recommender Systems,以及 Youtube 发表的 [RecSys 2019] Recommending What Video to Watch Next: A Multitask Ranking System,尝试过将 position bias 作为多塔建模的单独一塔或作为独立一塔的主要输入,并且显式地通过 logits 相乘来反应即物品必须曝光给用户且相关才会发生点击,而是否曝光仅与物品所处位置 决定。


至此,常见数据偏差的去偏思路与方法已经介绍完成了。

相关文章:

技术细分|推荐系统——推荐系统中的数据去偏方法

本篇的主要脉络同样依据中科大何向南教授、合工大汪萌教授联合在 TKDE 上的一篇综述文章展开:Bias and Debias in Recommender System: A Survey and Future Directions。 下面按照前导文章中介绍的数据偏差 Selection Bias、Conformity Bias、Exposure Bias、Posit…...

多功能回馈式交流电子负载的应用

多功能回馈式交流电子负载是用于模拟和测试电源、电池等电子设备的负载工具。它具有多种应用,可以用于测试和评估各种类型的电源,包括直流电源和交流电源。它可以模拟各种负载条件,如恒定电流、恒定电压和恒定功率,以验证电源的性…...

AIGC专题报告:生成式人工智能用例汇编

今天分享的是AIGC系列深度研究报告:《AIGC专题报告:生成式人工智能用例汇编》。 (报告出品方:德勤) 报告共计:16页 生成式人工智能(AI)的兴起 生成式AI给人类文明创造了无限的可…...

php xml数据转数组两种方式

目录 方法一、可以使用simplexml_load_string()函数将XML数据转换为数组。 方法二、使用PHP内置的DOMDocument类来将XML数据转换为数组的方法 方法一、可以使用simplexml_load_string()函数将XML数据转换为数组。 $xmlData <root><name>John Doe</name>&l…...

wagtail-安装配置

系列文章目录 文章目录 系列文章目录安装虚拟环境安装wagtail查看安装后的包 创建wagtail项目安装依赖迁移创建超级用户运行项目 安装虚拟环境 https://blog.csdn.net/gsl371/article/details/117917857 安装wagtail (wagenv) C:\djproject\wagprj>pip list Package V…...

基于Android校园交流uniAPP+vue 微信小程序v7e1

本系统结合现今XX校园交流APP的功能模块以及设计方式进行分析&#xff0c;使用Android平台和Ssm框架进行开发设计&#xff0c;具体研究内容如下&#xff1a; (1) 系统管理员主要对用户管理、类型管理、娱乐天地管理、投诉举报管理、学习平台、我的收藏管理、系统管理等功能进…...

geemap学习笔记013:为遥感动态GIF图添加图名

前言 遥感动态GIF图可以展示地理区域随时间的变化&#xff0c;这对于监测自然灾害、湿地变化、城市扩展、农田变化等方面非常有用&#xff0c;并且可以反复观察图像&#xff0c;以更深入地了解地表的动态变化。本节主要是对遥感动态GIF图添加图名&#xff0c;以便于更好地理解…...

【开源】基于JAVA的高校实验室管理系统

项目编号&#xff1a; S 015 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S015&#xff0c;文末获取源码。} 项目编号&#xff1a;S015&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 实验室类型模块2.2 实验室模块2.3 实…...

为啥 有了锤子,看啥都是钉子?

坏处&#xff1a;有了锤子&#xff0c;看啥都是钉子&#xff0c;有何坏处&#xff1f; 事倍功半&#xff0c;甚至适得其反。比如具有高并发设计经验的人&#xff0c;在初创系统初期&#xff0c;就设计高并发架构&#xff0c;其复杂度大概率无法支持试点业务快速落地&#xff0…...

java实现连接linux(上传文件,执行shell命令等)

1 导入pom <dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55</version></dependency> 2 编写配置类 package com.budwk.app.atest;import com.budwk.app.common.config.AppExceptio…...

苹果企业签名和TF签名都是iOS内测中的常见方法有哪些?

苹果企业签名是使用苹果企业开发者账号对苹果安装包&#xff08;IPA&#xff09;进行打包的一个过程&#xff0c;它基于非对称加密算法实现&#xff0c;表示该苹果企业账号认可了这份数据&#xff0c;然后发送给其他人。企业签名后的APP无需上架到App Store&#xff0c;可绕开苹…...

CC++输入输出流介绍

介绍 C中的输入输出流主要包括标准输入输出流、文件输入输出流和内存数据流。 标准输入输出流可以通过使用cin和cout进行数据的读取和输出文件输入输出流可以通过使用ifstream和ofstream对文件进行读写操作内存数据流可以通过使用stringstream对字符串进行读写操作 应用举例…...

leedcode 刷题 - 除自身以外数组的乘积 - 和为 K 的子数组

I238. 除自身以外数组的乘积 - 力扣&#xff08;LeetCode&#xff09; 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在…...

uniapp 富文本以及移动端富文本的展示问题

富文本展示有几种方式: 1.<view v-html"content"></view> 2. uniapp自带组件 rich-text rich-text | uni-app官网 <rich-text :nodes"content"></rich-text> 3.uView组件 u-parse Parse 富文本解析器 | uView 2.0 - 全面兼…...

JAVA sql 查询

-- 1. 查询员工表所有数据&#xff0c;并说明使用*的缺点 SELECT * from employees -- *号查询效率低 -- 2. 查询所员工的 email 全名,公司 email 统一以 "qq.com " 结尾. SELECT email from employees WHERE email like "%qq.com" -- 3. 打印公司里…...

掌握Katalon Studio 导入 swagger 接口文档,接口测试效率提升100%

katalon studio大家都已经不陌生了&#xff0c;是一款现在非常主流的自动化测试工具&#xff0c;包括了web、api、APP&#xff0c;甚至PC应用程序都可以使用它来完成自动化测试。 swagger是一款RESTFUL接口的文档在线自动生成软件&#xff0c;swagger是一个规范和完整的框架&a…...

程序员最奔溃的瞬间

作为一名程序员&#xff0c;我刚刚步入职场不久&#xff0c;经历了许多有趣又令人崩溃的瞬间。这些瞬间让我既感到气馁又好笑&#xff0c;同时也让我更加坚定了对编程的热爱和追求。 首先&#xff0c;我想分享一个令我崩溃的瞬间。有一天&#xff0c;我在调试一个复杂的bug时花…...

java字符串的常见用法

java字符串的常见用法 Java中的字符串是一个非常常用的对象&#xff0c;它属于Java的内置类String类的实例。字符串在Java中是不可变的&#xff0c;即一旦创建了一个字符串对象&#xff0c;就不能修改它的值。 下面是一些关于Java字符串的详细用法&#xff1a; 1&#xff09;创…...

链表OJ--下

文章目录 前言一、链表分割二、环形链表I三、环形链表II四、链表的回文结构五、随机链表的复制 前言 一、链表分割 牛客网CM11&#xff1a;链表分割- - -点击此处传送 题解&#xff1a; 思路图&#xff1a; 代码&#xff1a; 二、环形链表I 力扣141&#xff1a;环形链表…...

FreeRTOS源码阅读笔记4--semphr.h

信号量是特殊的队列--无法存储消息的队列&#xff0c;相关的接口函数声明在semphr.h中&#xff0c;通过宏定义替换队列函数实现。 4.1创建二值信号量xSemaphoreCreateBinary() 4.1.1函数原型 queueQUEUE_TYPE_BINARY_SEMAPHORE&#xff1a;一个宏&#xff0c;表示创建队列的…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...

MyBatis中关于缓存的理解

MyBatis缓存 MyBatis系统当中默认定义两级缓存&#xff1a;一级缓存、二级缓存 默认情况下&#xff0c;只有一级缓存开启&#xff08;sqlSession级别的缓存&#xff09;二级缓存需要手动开启配置&#xff0c;需要局域namespace级别的缓存 一级缓存&#xff08;本地缓存&#…...