推荐系统冷启动常用解决方案

来源:互联网 发布:流程图在线制作软件 编辑:程序博客网 时间:2024/06/08 17:01

   本文主要基于博主的实际经验,简单介绍几种推荐系统实践中常用的几种解决冷启动的方案。每种方案尽量提供主要的资料,但不展开详细介绍,有需要的可以自己查看相关资料或google。
   此外,本文只针对用户的冷启动问题,不涉及物品的冷启动。
   我将这些方案归纳为以下几种:
    1、基于用户基本背景属性
    2、基于用户的社交关系
    3、基于用户的设备信息
    4、启动页设计
    5、bandit算法
下面分别介绍这几种方法。

1.基于用户基本背景属性

我们通常所说的用户冷启动问题是指系统中没有用户的行为数据,但并不表示没有其他数据,或者可以获取到其他数据。
  获取来源:
  有哪些数据可以用来解决冷启动呢?
   1) 系统内的数据通常包括用户的一些注册信息,比如用户的年龄,性别等;
   2)如果系统内没有呢?如果可以,可以从外部源获取用户的相关信息。比如,在你的系统(平台)上,通常起码都会有用户的手机号或者邮箱,通过这一标识数据,可以从外部,通过合作或者爬取到用户的相关人口属性数据,或其他更多的数据。
   3)现在很多平台都允许采用第三方的账号(当然,主要是微信,qq以及微博)登录,这个的好处也是为了能够从第三方获取到一些基本的用户信息。
  有了这些数据后怎么办呢?我们就可以采用基于人口统计属性的推荐算法了。方法主要有:
   1)将用户的这些属性数据转换成他的特征向量,然后基于用户最近邻给用户推荐物品。注意,最近邻需要找非冷启动问题的用户(这些姑且叫做活跃用户,而相应没有行为数据的用户称之为沉默用户),这个很好理解,没有行为的用户是没法给别人推荐物品的。
   2)逻辑回归;通常,物品的属性,比如像新闻,有作者,来源等,同时还能抽取关键词。那么结合用于的属性,物品的属性,我们还可以采用逻辑回归来解决冷启动问题:利用活跃用户的数据,得到逻辑回归的训练样本数据,然后训练得到一个模型。用这个模型就可以预测用户是否会对某个物品产生行为,进而实现推荐。通常,除了用户和物品的属性外,如果可以,添加上下文信息(类似于时间,地点信息)会更好。
   3)还可以对所有用户基于这些属性聚类,然后将沉默用户所在类的热门贴推给他。具体可以参考:《User-based Clustering with Top-N Recommendation on Cold-Start Problem》
以上说的是能获取到用户的属性(标签)的情况下,如何解决冷启动。当然,如果能够获取到这些信息的话,还可以使用更多的推荐算法。

2、基于用户的社交关系

那如果无法获取到这类数据呢?嗯,现在我们假设,我们还不是一无所有,我们还是有基本的电话号码或者邮箱,那如果我们能够基于这个信息获取到通讯录,,然后基于通讯录能关联到其他平台的好友关系,或者qq好友数据(好像想多了。。哈哈),那这样也能是可以解决用户冷启动问题的:如果这种好友关系能回溯到你的平台,那你就可以给用户推荐这些好友产生过行为的物品。比如,你平台上有两个用户,他们除了手机号,你没有任何他们的相关信息,其中一个有不少行为,而另一个没有,但是你知道他们在其他平台有注册,并且从其他平台你能知道他们是好友,那么,你就尝试把有行为的那个用户的物品推荐给另一个用户了。

嗯,假如,现在来了一个用户,“很新很新”的用户,再你的平台(app)上没留下任何痕迹,一穷二白。你如何解决他们的冷启动呢?

先说简单方法,再介绍复杂点的。敲下黑板,注意复杂点的,这是重点,效果通常不错。

3、基于用户的设备信息

简单的方法是,你还是需要外部数据(苦笑~),但是你不需要去爬,去买,去抢(额)。你安装app的时候,是否经常询问你是否允许读取位置信息?是否允许读取图片等信息?是否允许读取通讯录?是否允许读取安装列表? 嗯,我就说下这个安装列表吧。用于解决冷启动就挺好用。举个例子,假如是咨询类的推荐,你读取我手机安装了懂球帝,你是不是可以给我推荐足球? 哈哈,如果没猜错。凤凰新闻就采用了这样的策略。

4、启动页设计

对于新用户,在其第一次进入系统时,比较有效,在很多应用中也比较常见的就是设计一个启动页——列出一些选项给用户选择。比较常见的就是列出物品让用户评分。其中物品的选择也非常的重要。常见的选择策略有:1)随机;缺点:用户有可能不了解该物品,也就无法表达任何观点;2)流行度;按流行度排序;缺点:流行的物品,大家都喜欢,收集不到有用的信息;3)熵;也就是选择那些争议性更大的物品;缺点:类似随机;4)均衡方法;结合流行度和熵。5)类似基于物品的协同方法。具体可以参考:Learning Preferences of New Users in Recommender Systems: An Information Theoretic Approach

5、bandit算法

另一种方法是什么呢?猜! 读者可能要说我逗了。要我猜?我猜不到,赶紧说是什么方法!
猜啊!我说的这种复杂的方法就是猜啊。哈哈,不过这种猜可不是胡乱猜,要说细了,还能吹出一堆理论来。下面就简单说下这种方法。
这种方法就是坊间流传的“老虎机算法”。更正式的名称是bandit算法。这个算法的思想很简单,也非常有意思:有多台老虎机,每台老虎机吐钱的概率不一样,在不知道概率的前提下,该选择哪台才能实现最大收益呢? 推广到推荐上来就是:我也不知道这个人他喜欢哪类物品(希望哪类物品的概率不知),但我希望我推给他的物品尽可能他会喜欢(会点击,会购买),那我该给他推哪类呢? 第一反应就是试,这个类不行,换另一个类。当然,bandit算法可不是说的这没简单,选哪个,下次该换哪个都是可以形式化定义的。具体不展开讲,感兴趣的可以参考:
1)https://mp.weixin.qq.com/s/Mhxray7Isy1pPbkkvAxi3w
2)Learning and Optimization for Sequential Decision Making–Lecture 3: UCB Algorithm, Worst-Case Regret Bound