DT3OR:Dual Test-time Training for Out-of-distribution Recommender System——让推荐系统在“数据变了”时也能精准推荐

#王者杯·14天创作挑战营·第5期#

1. 先搞懂问题:推荐系统为啥会“失灵”?

咱们平时用的推荐系统(比如美团推荐餐厅、Steam推荐游戏),大多有个默认假设:训练时用的数据和实际用的时候数据是一样的 (IID: 独立同分布假设)。但现实里根本不是这样——比如你夏天爱喝冰饮,冬天突然想喝热汤(这叫“用户特征偏移”);再比如餐厅夏天卖冰粉、冬天卖火锅(这叫“物品特征偏移”)。这种“数据分布变了”的情况,就是“分布外(OOD)问题”,会让原本好用的推荐系统突然“失灵”,推荐的东西越来越不对胃口。

之前解决这个问题的办法要么麻烦(比如重新训练整个模型,费时间),要么有局限(比如需要额外标注数据,不实用)。所以这篇文章想了个新招:不用重新训练,就在给你推荐的“测试阶段”,让模型自己快速适应新数据——这就是“测试时训练(TTT)”思路,也是这篇文章的核心。

在这里插入图片描述

2. 核心思路:测试时让模型“自学”适应新数据

作者提出的框架叫“DT3OR”,简单说就是在推荐的时候(测试阶段),让模型通过两个“自学任务”自己调整,适应已经变化的用户/物品特征。这两个任务就像给模型“补两节课”,帮它记住用户不变的喜好,同时学会新的特征变化。

2.1 第一节课:自蒸馏任务——帮模型抓准用户“不变的喜好”

你可能有过这种情况:不管季节怎么变,你始终喜欢“辣口”的食物——这就是“不变的偏好”。自蒸馏任务就是帮模型把这种偏好抓得更准。

具体怎么做呢?分三步:

  1. 提取特征:先把用户特征(比如你的年龄、消费习惯)和物品特征(比如餐厅类型、价格),还有历史互动(比如你之前点过的外卖),都转换成模型能懂的“数字码”(叫“嵌入向量”,公式里的Eₙ和Eᵢ):
    Eu=f(Xu,D),Ei=g(Xi,D)E_u = f(X_u, D), \quad E_i = g(X_i, D)Eu=f(Xu,D),Ei=g(Xi,D)
    这里f和g是训练好的特征提取器,Xₙ是用户特征,Xᵢ是物品特征,D是历史互动数据。
  2. 合并聚类:把用户和物品的“数字码”合并成一个向量E,再用“软K-means”算法把相似偏好的用户归成一类(比如把喜欢辣口的用户聚成一个“兴趣群”),得到每个用户属于某个“兴趣群”的概率(公式里的q):
    E=γ(Eu⊕Ei),q=φ(E)E = \gamma(E_u \oplus E_i), \quad q = \varphi(E)E=γ(EuEi),q=φ(E)
    这里⊕是拼接向量,γ是个简单的神经网络,φ是软K-means算法。
  3. 提炼偏好:为了让“兴趣群”更明确,用一个“锐化函数”把概率q变得更极端(比如原本50%属于辣口群,锐化后变成80%),得到新的概率分布P:
    P=S(q,T)i=qi1T∑jqj1TP = S(q, T)_i = \frac{q_i^{\frac{1}{T}}}{\sum_j q_j^{\frac{1}{T}}}P=S(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值