AI内参_61_058_简单推荐模型之一基于流行度的推荐模型
你好,我是洪亮杰。
今天我和你分享的主题是简单推荐模型之一,基于流行度的推荐模型。
今天我们正式进入专栏的另一个比较大的模块,那就是推荐系统。
之前我们详细且全面的介绍了搜索系统的各个组成部分。
在接下来的几周时间里,我们一起来看推荐系统的技术要点又有哪些?我们还是从简单推荐系统聊起,由易到难,逐步为你讲述一些经典的推荐模型推荐系统。
目前已经深入到了互联网的各类产品中。
不管是到电子商务网站购物,还是到新闻阅读、网站获取信息,甚至是在出行的时候,希望听到不同的音乐,不同种类的推荐模型都在我们的生活中发挥着举足轻重的作用。
那么搭建一个最简单的推荐系统应该如何入手呢?今天我们就来聊一个最基本的推荐模型,基于流行度的推荐模型。
什么是基于流行度呢?通俗的说就是什么内容,吸引用户就给用户推荐什么内容。
这里其实有一个隐含的假设,那就是物品本身的质量好坏和流行度有一定的正比关系。
什么意思呢?就是说好的东西自然关注的人就会多,然而就会有更多的谈论。
当然,这是一个主观的假设,并不是所有质量高的物品都会有很高的流行度。
然而,在不需要过多其他信息和假设的情况下,流行度可以算是衡量物品质量好坏的一个最简单的测度。
那么如果我们能够在每一个时间点上准确的估计到一个物品的流行度,就只需要按照流行度的数值,从高到低排序显示所有的物品就可以了。
然而这里牵扯到一个问题,那就是如何判断一个物品在任何时间点上的流行度呢?有两个重要的因素影响着物品流行度的估计,那就是时间和位置。
我们先来说一下时间因素。
很显然用户访问每一个应用或者服务都有一定的规律,这种规律导致每个应用的流量规律也不一样。
比如,人们可能更倾向于在早上或者傍晚打开新闻网站看一看一天都发生了什么事情。
因此,任何文章投放到这两个时段,自然就会有比较高的关注度。
这并不代表这些文章就好于其他的文章,可能仅仅是由于时间的关系。
因此,我们在对流行度建模的时候,就需要考虑时间的因素。
另外一个重要的因素是位置,这个位置并不是真正的地理位置,而是在一个服务或者网站的什么位置显示你的物品。
因为用户心里对于不同位置的感受,在很多类型的服务中,常常都有隐含的位置偏差。
这些偏差给我们估计某个物品的流行度带来了很大的困难。
比如说在绝大多数的搜索引擎服务中,排名第一的物品所受到的关注度很可能大大高于排名第二和之后的物品。
因此,一个物品只要放到第一的位置,关注度就会自然升高。
当然,这并不能完全代表这个物品本身的属性。
因此,我们在估计物品的流行度时,就需要考虑上面所说的这两个重要因素要解决刚才说的两个问题,我们就不能使用绝对数值来对流行度建模。
因此,我们使用在单位时间内点击的数目,购买的数目或者点赞的数目,都会受到刚才所说的两种偏差的影响。
假设一篇文章在九点到十点,这个时段被点击了一百次,在十点到十一点这个时段被点击了五十次。
这并不能代表这个文章在十到十一点这个时段就变得不受欢迎了,很可能是这个时段的总的用户量比较多。
因此对于流行度的衡量,我们往往使用的是一个比值或者是计算某种可能性。
也就是说,我们计算在总的用户数是n的情况下,点击了某个文章的人响,这个如何取决于不同的含义。
如果是点击,往往叫做点击率。
如果是购买叫做购买率,为了方便讨论,我们在下面的例子中都使用点击率。
然而,点击率本身虽然解决了一部分时间和位置偏差所带来的影响,但是点击率的估计所需要的数据依然会受到偏差的影响。
因此,我们往往希望能够建立无偏差的影据,关于如何能够无偏差的估计,这是一个研究课题。
我们今天不详细展开,不过有一种比较经济的方法可以收集没有偏差的数据。
那是把服务的流量分成两个部分,一个部分利用现在已有的对物品流行度的估计来显示推荐结果。
另外一个部分则随机显示物品,这种方法是一种特殊的异议算法。
我们之后还会聊到这个话题,根据这样的方式搜集的数据,可以认为是没有位置偏差的。
我们从随机显示物品的这部分流量当中去估计流行度,然后在另外一个部分的流量里去显示物品。
如果从数学上对点击率建模,其实可以把一个物品在显示之后是否被点击看成是一个伯努利随机变量。
于是对点击率的估计就变成了对一个伯努利分布参数估计的过程,有一种参数估计的方法,叫做最大似然法。
简而言之,就是说希望找到参数的取值,可以最大限度的解释当前的数据。
我们利用最大似然法就可以求出在某一段时间内的点击率所代表的伯努利分布的参数估计。
这个估计的数值就是某个物品,当前的点击总数除以被显示的次数。
通俗的讲,如果我们显示某个物品十次被点击了五次,那么在最大似然估计的情况下,点击率的估计值就是零点五。
很显然,这样的估计有一定的局限性。
如果我们并没有显示当前的物品,那么最大似然估计的分母就是零。
如果当前的物品没有被点击过,那么分次就是零。
但这两种情况下,最大似然估计都无法真正体现出物品的流行度。
下面我们从统计学的角度来讲了,讲如何利用最大似然估计法来对一个伯努利分布所代表的点击率参数进行估计。
这里面的第一个问题就是刚才我们提到的分子或者分母为零的情况。
除用这种情况下,并不能很好的反映这些物品的真实属性。
一种解决方案是对分子和分母设指先验信息。
就是说虽然我们现在没有显示这个物品或者这个物品没有被点击。
但是我们主观的认为,比如说在显示一百次的情况下,会有六十次的点击,注意这些显示次数和点击次数都还没有发生。
在这样的先验概率的影响下,点击率的估计或者说的更加精确一些。
点击率的后验概率分布的均值就成为了实际的点击,加上先验的点积除以实际的显示次数,加上先验的显示次数。
你可以看到在有先验分布的情况下,这个比值永远不可能为零。
当然,这也就避免了我们之前所说的用最大似然估计所带来的问题。
利用先验信息来平滑概率的估计是贝叶斯统计中经常使用的方法。
如果用更加精确的数据语言来表述这个过程,我们其实是为这个伯努利分布加上了一个贝塔分布的先验概率,并且推导出后验概率也是一个贝塔分布。
这个贝塔分布参数的均值就是我们刚才所说的均值。
在实际操作中,并不是所有的分布都能够找到这样方便的先验分布,使得后验概率有一个解析解的形式,我们在这里就不展开讨论了。
另外一个可以扩展的地方,就是到目前为止,我们对于流行度的估计都是针对某一个特定的时段。
很明显,每个时段的估计和前面的时间是有一定关联的这就提醒我们是不是可以用之前的点击信息来更加准确的估计现在这个时段的点击率,答案是可以的。
当然这里会有不同的方法,一种最简单的方法,还是利用我们刚才所说的先验概率的思想,那就是当前t时刻的点击和显示。
先验数值是t减一时刻的某种变变换,什么意思呢?比如早上九点到十点,某个物品有四十次点击一百次显示,那么十点到十一点,我们在还没有显示的情况下,就可以认为这个物品会有二十次。
点击五十次显示,注意我们把九点到十点的真实数据乘以零点五,用于十点到十一点的先验数据。
这种做法是一种主观的做法,而且是否乘以零点五,还是其他数值,需要取决于测试。
注是这种思想有时候叫做时间折扣,是一种非常普遍的时序信息处理的手法。
今天我为你讲了基于流形度的推荐系统的基本原理,一起来回顾一下要点。
第一,我们简要介绍了为什么需要基于流形度进行推荐。
第二,我们详细介绍了如何对流形度进行估计,以及从统计角度看其含义。
第三,我们简要的提及了一些更加高级的流形度估计的方法。
最后给你留一个思考题,我们介绍了如何使用鲜验信息来对参数进行平滑。
如何能够更加准确的确定鲜验概率中的数字呢?具体到我们的例子,就是如何来设置鲜验的点击和显示次数呢?欢迎你给我留言,和我一起讨论。