www21推荐系统之点击原因分解:用户兴趣和一致性(流行度)Disentangling User Interest and Conformity for Recommendation with Cau

在这里插入图片描述

Disentangling User Interest and Conformity for Recommendation with Causal Embedding
http://staff.ustc.edu.cn/~hexn/papers/www21-dice.pdf

背景

本文依旧是利用因果推断相关理论进行推荐系统纠偏的一篇文章,相关详细例子可以前往deconfounded中的“举个栗子”进行查看。这里进行简述,作者分析在用户购物的过程中,用户点击某个商品,一方面可能是因为他对这个感兴趣,另一方面可能是因为该商品最近比较热门,流行。而如若不加区分的直接从原始数据中进行训练,推荐,会使得推荐系统进入一个恶性循环,因此通常会进行纠偏,而本文是从分解原因的角度进行纠正。

  • 本文点击原因分解为用户兴趣(interest)和一致性(conformity),结合因果推断构建推荐系统模型。
  • 使用特定于原因的数据捕获两类特征,并构建多任务学习和累积学习从不同原因的数据中进行学习。
  • 所提出的DICE框架具有较好的可解释性,并且在非独立同分布的数据上具有较好的鲁棒性

此处的一致性,本人也不是特别理解,从文中判断是和item流行度相对应的特征

方法

将原因分为两类之后,可以构建新的因果图,如下图:
在这里插入图片描述

难点:

如果我们需要训练这个结果,需要得到interest单独作为原因的数据和conformity单独作为原因的数据,但是我们用于训练的数据只是单纯的整体数据,是两个耦合在一起的数据,而这难点就在于如何解耦这两个原因
从图中可以发现,该因果图为_对撞结构_,interest和conformity两个节点相互独立,当以点击为条件时,这两个节点相关。作者利用这一点,来构建了以下方案。

方案:

M I M^I MI表示user和item之间的兴趣匹配矩阵, M C M^C MC表示user和item之间的流行度一致性匹配矩阵。相当于将user-item矩阵分成了两个。

case1:负样本b(未点击)的流行度小于正样本a(点击)的流行度
这样的情况可以说明负样本的流行度小于正样本,不过无法说明用户兴趣的相关信息,可以得到以下不等式
M u a C > M u b C M_{ua}^C>M_{ub}^C MuaC>MubC
M u a I + M u a C > M u b I + M u b C M_{ua}^I+M_{ua}^C>M_{ub}^I+M_{ub}^C MuaI+MuaC>MubI+MubC

case2:负样本d的流行度大于正样本c
这样的情况说明即使正样本不是热门样本,也被点击了,说明user对这个item的兴趣很高,可以的达到以下不等式
M u d C > M u c C , M u d I < M u c I M_{ud}^C>M_{uc}^C,M_{ud}^I<M_{uc}^I MudC>MucC,MudI<MucI
M u c I + M u c C > M u d I + M u d C M_{uc}^I+M_{uc}^C>M_{ud}^I+M_{ud}^C MucI+MucC>

### Program of Thoughts Prompting 方法中的计算与推理分离 在数值推理任务中,Program of Thoughts (PoT) Prompting 方法通过生成可执行的编程代码来表示逻辑推理步骤,而不是直接提供完整的解决方案或计算路径。这种方法允许将复杂的推理过程分解成更易于管理验证的小部分[^1]。 具体而言,在处理数值推理问题时,PoT 提出了一个框架,其中推理被编码为一系列可以由外部工具(如Python解释器)执行的具体操作指令。这意味着实际的算术运算其他类型的数值处理是由专门设计用于此类任务的语言特性来承担的,而模型本身则专注于构建正确的算法结构流程控制语句[^2]。 这种做法不仅简化了模型内部的工作负载,还使得整个系统的灵活性大大增加——因为只要改变所使用的脚本语言或者引入新的库函数就可以轻松扩展功能范围。此外,由于最终产生的是一段清晰易读且能够独立运行的源码文件,因此也便于后续的人工审查以及错误排查工作。 ```python def calculate_interest(principal, rate, time): """Calculate compound interest using the formula A=P(1+r)^t""" amount = principal * ((1 + rate) ** time) return round(amount, 2) # Example usage demonstrating separation between logic and computation logic_description = """ Given a principal P=1000 dollars at an annual interest rate r=0.05 over t=3 years, we want to find out how much money will accumulate after this period. """ print(f"{logic_description}\nThe accumulated value is ${calculate_interest(1000, 0.05, 3)}.") ``` 上述例子展示了如何利用 Python 函数 `calculate_interest` 来封装具体的利息计算细节,而在描述性的字符串变量 `logic_description` 中仅保留高层次的任务说明。这种方式体现了 PoT 如何有效地实现了计算过程同推理表述之间的解耦合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值