专栏首页炼丹笔记当推荐遇到冷启动

当推荐遇到冷启动

作者:十方

冷启动问题,大家并不陌生。但是如何解决呢?加特征,加样本,加图谱,加规则?十方在做信息流广告推荐时,主要通过加一些泛化特征解决冷启动问题,但是这样并不一定是最好的方案,新广告很大程度上,还是会被模型"低估"。如何解决冷启动问题呢?

不得不面对的冷启动!

冷启动问题可以逃避吗?当然不能,就拿广告推荐来说,当一个客户想投广告,由于该广告从未曝光过,召回模型可能都无法召回,更别说后面的粗排和精排模型是否会过滤掉,所以很难起量。《Alleviating Cold-Start Problems in Recommendation through Pseudo-Labelling over Knowledge Graph》 这篇论文提出了基于GNN的知识图谱方法解决冷启动问题,该方法增加了伪标签做数据增强。这种方法使用了历史从未观察到的user和item作为正样本,补充到样本中。通过在知识图谱中为每个用户选择可能的正例,同时还进行了负采样策略,从而抑制偏差。通过实验证明该方法在各个场景下能显著提高冷启动user/item的推荐性能。

问题描述

我们有一个集合的用户U和一个集合的item I,如果用户u和item i有交互,yu,i = 1,我们知道大部分(u,i)都是没有被观测过的,这是个非常稀疏的交互矩阵(u, i) U * I。我们把观测过的user item 对定义为 O = {(?,?)|? ∈ U,? ∈ I+ } 。同时我们还有个KG G = {(ℎ, ?, ?)|ℎ, ? ∈ E, ? ∈ R},看过前几篇关于 GNN的肯定很清楚,h表示head entity,t表示target entity,r就是h和t的关系。然后我们目标就是预估那些未被观测到的yu,i。这篇论文用的GNN框架是KGNN-LS("Knowledge-aware graph neural networks with label smoothness regularization for recommender systems"),不是本文重点,本文重点介绍通过3种方法解决冷启动的样本问题。

半监督学习伪标签

我们的数据必须高度覆盖未观测数据,且不能把它们完全当成负样本。为了缓解观测到的(u,i)稀疏性问题,我们通过模型预测未观察到的样本(u,i)的label来增加正负标记数据。具体内容如下:

I+, I− , 和 I ±分别表示正例,负例和伪标签,loss定义如下:

基于知识图谱和流行度采样

为了找到可靠的个性化伪标签,我们可以用观测到的user和item对,构建图,从而用h跳广度优先搜索算法(BFS)计算某个用户的正例(I+)到各个未交互过的item( I ±)的路径数,通过以下概率公式采样伪标签:

a是一个控制采样分布偏度的超参,nu,i± 表示用户u有交互的item到未交互过的item路径数之和。从该公式,我们发现,如果观测过的item到未观测的item路径数越多,被采样到的概率越大。如果控制a为一个很小的值,这个采样分布就偏向于均匀分布,该论文a取0.5。

此外还有基于流行度的采样。由于冷启动的item相比较与流行的item,更容易被采样作为负样本,因此这个偏差会影响模型的效果,解决办法就是用下式概率分布进行负采样:

mu,i-表示i-与用户交互过的频次,b用于控制频次的重要程度。在训练时,确保三种样本(正例,负例,伪标签)是均匀的。下面算法给出了采样策略。

Co-training

我们知道,用伪标签训练模型,会造成模型优化过程不稳定,所以该论文引入了co-training方法,该方法同时训练两个模型f和g,每个模型的训练都依赖对方模型的预估结果。学习算法简单描述如下:

(1) 采样两个mini-batches B? 和 B?. 并通过f和g分别算出伪标签。

(2) 通过loss计算梯度,模型f用 B? 更新参数,模型g用B? 更新参数。

因此f在B?的loss函数定义如下:

实验

实验比较了各种基于KG的推荐算法,用了3个开源数据集,如下:

实验结果发现,KGPL在各个数据集的效果是可圈可点的。

大家是怎么解决冷启动问题的呢?欢迎留言讨论。

文章分享自微信公众号:
炼丹笔记

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

作者:十方
原始发表时间:2021-03-01
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • 当推荐遇到冷启动

    冷启动问题,大家并不陌生。但是如何解决呢?加特征,加样本,加图谱,加规则?十方在做信息流广告推荐时,主要通过加一些泛化特征解决冷启动问题,但是这样并不一定是最好...

    阿泽 Crz
  • 当推荐系统遇到物联网...

    物联网(The Internet of Things,简称IOT),从英文名中可以看出是对互联网(Internet)的扩充,意为互联网中的所有事务,涉及用户、内...

    张小磊
  • 推荐系统冷启动

    冷启动是推荐系统的重要挑战之一。那么,什么是冷启动?如何设计一个好的冷启动方案?本文将主要从以下7个方面给大家讲清楚这些问题:

    小萌哥
  • 当推荐遇到社交:美图的推荐算法设计优化实践

    在美图公司社交战略部署下,推荐算法存在多方面的挑战,为了解决这些挑战,我们团队从工具和算法两个方面分别开展了工作。

    机器之心
  • [推荐系统读书笔记]推荐系统冷启动问题

    推荐系统需要根据用户的历史行为和兴趣预测用户未来的行为和兴趣,因此大量的用户行为数据就称为推荐系统的重要组成部分和先决条件。很多在开始阶段就希望有个性化推荐应用...

    用户1631856
  • 当RxJava遇到AOP

    公司打算开发一款全新的To C产品,因此我开始做一些搭建框架的事儿以及POC。新的产品能够使用一些比较新的技术,在新产品中我大量使用了Rx。这就导致了原先的AO...

    fengzhizi715
  • 当HPC遇到AI

    作者:Shahin Khan, OrionX 翻译:GPU世界 高性能(HPC)和人工智能(AI)的结合正创建一个充满活力的新市场:“高性能人工智能”(HPA...

    GPUS Lady
  • 当wcf遇到JSON ?

    昨天在调试项目时,意外发现一个奇怪的问题,实在不知道如何准确描述,所以随便起了个标题。 项目中有一个wcf供jquery调用,wcf示例代码如下: /**///...

    菩提树下的杨过
  • 当SDN 遇到物联网

    工业物联网(Industrial Internet of Things,简称 IIoT)预示着一股新的现代化浪潮,在许多行业,客户和内部利益相关者要求在生产力、...

    半吊子全栈工匠
  • 当爆破遇到JS加密

    渗透测试过程中,在遇到登陆界面的时候,第一想到的就是爆破。如果系统在传输数据时没有任何加密,没有使用验证码时,还有很大机会爆破成功呢。但是如果使用了验证码切用户...

    FB客服
  • 当 Python 遇到微信

    自从微信禁止网页版登陆之后,itchat 库实现的功能也就都不能用了,那现在 Python 还能操作微信吗?答案是还可以。

    Python小二
  • 当PowerBI遇到R语言

    PowerBI作为微软系最新的商务智能办公系统,自去年发布以来,一直都备受瞩目。 他的更新频次相当之高,功能更新迭代非常迅速。 大概对可视化领域稍有涉猎的朋友们...

    数据小磨坊
  • 当OO遇到了持久化?!

    最近在看设计模式方面的资料,看了一些帖子和两本书,一个是《Head first》,另一个是《大话设计模式》。这两本书都只看了一部分。 发现他们都有一个共同的特...

    用户1174620
  • 原生JS | 当兔子遇到鸡

    HTML5学堂-码匠:当兔子遇到鸡,会怎样呢?先别急,看个小视频~ 视频内容 当兔子遇到鸡 —— 不要害怕和别人不一样,在这个世界上,你就是独一无二的自己! 不...

    HTML5学堂
  • 坑 - 当insert ignore遇到not null

    INSERT IGNORE不仅仅会忽略DUPLICATE KEY错误,也会忽略非空错误

    十毛
  • 当人工智能遇到游戏

    用户1682855
  • 当高并发遇到限流算法

    降级是当服务出现问题或者影响到核心流程时的性能时,需要暂时屏蔽掉,等高峰期过去或者问题解决后再打开。

    我是攻城师

扫码关注腾讯云开发者

领取腾讯云代金券