推荐系统原理

自今日头条凭借精准的个性化推荐崛起之后,个性化推荐系统被应用于越来越多的产品上,并逐渐成为最重要的帮助用户发现信息的方式,那么推荐系统到底是什么,是如何实现精准推荐的,又可能面临哪些问题,本篇文章尝试为大家解答这些疑惑。

推荐系统是什么?有什么用?

推荐系统是一种帮助用户发现感兴趣的信息的方式,在推荐系统出现之前,传统的通过直接展现信息、搜索、分类来发现信息的方式都有一定的短板和局限。
直接展现信息在信息量过大时用户很难找到自己需要的信息,非常费时费力;搜索虽然能很大程度上解决信息量过载的问题,但这种方式需要用户明确的知道自己需要的信息的关键词,当不知道关键词的时候搜索就无法发挥作用了;分类虽然不需要用户知道所需信息的关键词,但是当信息量过于庞大的时候,就需要把类别一层层分下去,查找信息时非常繁琐,且需要用户知道所需信息属于每个层级的哪个类别。
而推荐系统既可以解决信息量过载的问题,又不需要用户主动查找信息,可以把用户感兴趣的信息推送给用户,这解决了传统的发现信息方式的诸如信息量过载、需要用户有明确目的等问题。

推荐系统有什么局限?

推荐系统主要有两个局限,第一是需要信息量过载,如果信息量很少直接展现信息就可以了,就不需要推荐系统了;第二是需要用户没有明确目的,因为用户如果有明确目的直接通过搜索或分类来找到信息就可以了,也不需要推荐系统。

推荐系统的推荐策略

常用的推荐策略包括以下几种:

  1. 基于内容的推荐
  2. 基于内容的协同过滤推荐
  3. 基于用户的协同过滤推荐
  4. 基于标签的推荐
  5. 基于社交网络的推荐

基于内容的推荐

基于内容的推荐是给用户推荐和他感兴趣的内容同样类型的内容。
例如:小明看了周星驰的电影《喜剧之王》,系统可能会给小明推荐《功夫》,这是因为它们在演员的维度上都属于周星驰这个分类;系统也可能给小明推荐《人在囧途》,这是因为在影片类型上,它们都属于喜剧片这个类型。
基于内容的推荐需要在各维度上对内容进行精准有效的分类,如果分类没有做好,有效的推荐也就无从谈起了。

基于内容的协同过滤推荐

基于内容的协同过滤推荐是指根据用户的历史行为数据,给用户推荐和他感兴趣的内容相似的内容。
和基于内容的推荐不同的是,基于内容的推荐是基于内容属性给用户推荐,而基于内容的协同过滤推荐是基于用户的历史行为数据计算内容之间的相似度,给用户推荐和他之前感兴趣的内容相似的内容。
所以基于内容的协同过滤推荐分为两步:

  1. 计算内容之间的相似度;
  2. 根据内容相似度和用户的历史行为给用户生成推荐列表。
    例如:


    内容相似度.png

用户A对《人人都是产品经理》的感兴趣程度是0.9,对《社会心理学》的感兴趣程度为1.2,《人人都是产品经理》和《用户体验要素》的相似度为0.8,《社会心理学》和《用户体验要素》的相似度为0.5,所以用户A对《用户体验要素》的感兴趣程度为
0.90.8+1.20.5=1.32。
这里存在两个问题:

  1. 如何获得用户对某个初始内容的感兴趣程度?
    用户对某个初始内容的感兴趣程度可以通过用户对这个内容的历史行为数据获得。
  2. 如何计算内容之间的相似度?
    计算内容之间的相似度可以用余弦公式,一般来说喜欢内容A的用户如果大多也喜欢内容B,那么就认为内容A和内容B有很高的相似度。

基于用户的协同过滤推荐

基于用户的协同过滤推荐是指根据用户的历史行为数据,给用户推荐和他兴趣相似的用户喜欢的其他内容。
所以基于用户的协同过滤推荐分为两步:

  1. 计算用户之间的相似度;
  2. 给用户推荐和他相似的用户喜欢的,而他又没有接触过的内容。
    例如:


    用户相似度.png

用户A和用户B的兴趣相似度是1.2,用户B对《社会心理学》的感兴趣程度为0.7,所以用户A对《社会心理学》的感兴趣程度为0.84。
计算用户相似度和内容相似度类似,都可以采用余弦公式,一般来说如果用户A喜欢的内容,用户B大多都喜欢,那么就认为用户A和用户B具有较高的相似度。

基于标签的推荐

基于标签的推荐是指,给用户推荐那些他们的常用标签出现次数最多的内容。
所以基于标签的推荐可以分为以下几个步骤:

  1. 统计每个用户最常用的标签;
  2. 对于每个标签,统计被打过这个标签次数最多的内容;
  3. 把用户的常用标签出现次数最多的内容推荐给这个用户。
    例如:用户A对经济学方面的图书感兴趣,最常用的标签有经济学,同时在经济学这个标签中出现次数最多的内容是《经济学原理》,那么就给用户A推荐《经济学原理》这本书。

基于社交网络的推荐

基于社交网络的推荐是指根据用户的好友信息给用户推荐他的好友喜欢的内容。
基于社交网络的推荐非常容易理解,但这里存在几个问题:

  1. 如何获取用户好友信息?
    1. 社交产品(微信、微博等)登录信息
    2. 用户通讯录好友
    3. 用户注册信息
  2. 根据社交网络推荐有什么好处?
    1. 可以增加用户对推荐系统推荐结果的信任
    2. 一定程度上可以解决推荐系统的冷启动问题
  3. 如果一个用户的好友非常多,且每个好友感兴趣的内容都很多,那么该给这个用户推荐哪些好友感兴趣的内容?推荐结果的内容根据什么排序?
    1. 根据用户与好友的熟悉程度推荐,熟悉程度可以用用户与好友的共同好友比例表示;
    2. 根据用户与好友的兴趣相似度推荐,兴趣相似度可以用余弦公式计算。

存在的问题及解决方案

上述推荐系统的推荐策略存在一些常见的问题,这里给出笔者的关于其中几个关键问题的思考。

冷启动问题

除了基于社交网络的推荐外,其他推荐策略都面临冷启动的问题,即用户第一次访问在平台上还没有数据的时候怎么给用户推荐他感兴趣的内容?

  1. 给他推荐热门内容,因为绝大多数人都对热门内容感兴趣;
  2. 用户通过社交网络登录时,给用户推荐他的好友感兴趣的内容;
  3. 根据用户的注册信息和授权给用户推荐个性化内容。
  4. 用户第一次登录时让用户自己选择感兴趣的分类。

热门内容问题

上面的推荐策略中都面临推荐结果中出现的大多数都是热门内容的问题,例如基于用户的协同过滤推荐需要推荐和这个用户相似的其他用户感兴趣的内容,而大多数用户都对热门内容感兴趣,所以推荐结果很容易出现大多数都是热门内容的情况。而热门内容完全可以通过其他途径(排行榜、朋友分享等)获取,不需要推荐系统也能够知道这些信息,而推荐结果中如果都是热门内容也会使用户觉得乏味,降低用户满意度。
所以需要对热门内容进行降权处理,或对冷门内容进行加权处理。

时间对用户兴趣的影响

时间对用户兴趣的变化主要体现在两点:

  1. 用户兴趣本身会变化。
    用户上高中时和上大学时的兴趣就不一样,事实上可能几个月之后用户的兴趣就会发生比较大的变化,所以要对用户的近期行为加权,或对一段时间之前的用户行为降权。
  2. 时间本身对用户兴趣有影响。
    夏季和冬季用户兴趣就不一样,春节时和平常用户兴趣就不一样。例如,用户在夏天时买了件短袖,在冬天时给用户推荐短袖就可能会使用户感到反感以及对推荐结果的不信任。
    所以在记录用户的历史行为数据时应该加上用户产生这个行为的时间,并在对季节性内容做推荐时过滤掉不符合相应时间的用户行为。

总结

这篇文章向大家介绍了推荐系统和常用的推荐策略以及会面临的一些问题,需要说明的是这些推荐策略都有其适用场景,需要根据不同场景采用不同的推荐策略,例如新闻资讯和歌曲就不同,新闻资讯更注重时效性,昨天的新闻到了今天就不再是新闻,而歌曲的时效性就很弱,经典歌曲过了几年依然是经典;没有人会重复看同一篇新闻很多遍,而很多用户都会针对自己喜欢的音乐单曲循环一下午。所以针对内容的深刻理解是设计精准的推荐系统的基础。
由于笔者还是一个产品新手,对推荐系统的了解也还尚浅,写的不好的地方还望大家多提建议哈~

你可能感兴趣的:(推荐系统原理)