前文介绍了个性化推荐十大挑战的背景其中的数据稀疏性问题,冷启动问题。本篇介绍个性化推荐十大挑战中的大数据处理与增量计算问题,多样性与精确性的两难困境,推荐系统的脆弱性问题,用户行为模式的挖掘和利用。篇幅较长,大家耐心看噢~
接上文:个性化推荐十大挑战(上)
挑战三:大数据处理与增量计算问题。
尽管数据很稀疏,大部分数据都包含百千万计的用户和商品,与此同时,新商品也不断加入系统,新用户不停进入系统,用户和商品之间还不停产生新的连接。数据量不仅大,而且数据本身还时时动态变化,如何快速高效处理这些数据成为迫在眉睫的问题。在这个大前提下,算法时间和空间的复杂性,尤其是前者,获得了空前重视。一般而言,一个高效的算法,要么自身复杂性很低,要么能够很好并行化,要么两者兼具。
提高算法的效率,有很多途径。大致上可以分为两类,一是精确算法,二是近似算法。需要注意的是,精确算法中“精确”这次词,并不是指算法的推荐精确度有多大,而是相对于近似算法而言,强调这个算法并不是以牺牲算法中某些步骤的精确性而提高效率的。譬如说计算n的阶乘,可以有不同的高精度算法,凡是得出最后精确值的就是精确算法,而如果利用斯特林公式进行计算,就属于近似算法了。一般而言,近似算法的效率会明显高于精确算法。
通过巧妙的方法,可以设计出效率很高的精确算法。譬如Porteous等人设计了一种可以用于潜层狄利克雷分配(Latent Dirichlet Allocation, LDA)算法的新的采样方法,比传统吉布斯采样算法快8倍。Cacheda等人设计了一种预测算法,只考虑一个用户与其他用户打分的差异以及一个商品与其他商品得分的差异,这个算法远远快于协同过滤算法,却能够得到比标准的基于用户的协同过滤算法更精确的预测效果,其预测精度有时候甚至可以和SVD分解的方法媲美。提高精确算法的另外一条途径就是并行化——很多算法的并行化,一点都不简单。谷歌中国成功将LDA算法并行化并应用于Orkut的推荐中,取得了很好的效果。最近Gemulla等人提出了一种随机梯度下降法,可以并行分解百万行列的矩阵,该方法可以应用在包括推荐在内的若干场景下。
近似算法往往基于增量计算,也就是说当产生新用户,新商品以及新的连接关系时,算法的结果不需要在整个数据集上重新进行计算得到,而只需要考虑所增加节点和连边局部的信息,对原有的结果进行微扰,快速得到新结果。一般而言,这种算法随着加入的信息量的增多,其误差会积累变大,最终每过一段时间还是需要利用全局数据重新进行计算。更先进但也更苦难的办法,是设计出一种算法,能够保证其误差不会累积,也就是说其结果与利用全部数据重新计算的结果之间的差异不会单调上升。我们不妨把这种算法叫做自适应算法,它是增量算法的一个加强版本,其设计要求和难度更高。增量算法已经在业界有了应用,譬如百分点推荐引擎中的若干算法都采用了增量技术,使得用户每次新浏览、收藏或者购买商品后其推荐列表立刻得到更新。但是自适应算法目前还只是在比较特殊的算法上面
才能实现,更勿谈工业界应用了。
图3:兼顾精确性和多样性的混合扩散推荐算法示意图。
挑战四:多样性与精确性的两难困境。
如果要给用户推荐他喜欢的商品,最“保险”的方式就是给他特别流行的商品,因为这些商品有更大的可能性被喜欢(否则也不会那么流行),往坏了说,也很难特别被讨厌(不要举凤姐的例子)。但是,这样的推荐产生的用户体验并不一定好,因为用户很可能已经知道这些热销流行的产品,所以得到的信息量很少,并且用户不会认同这是一种“个性化的”推荐。Mcnee等人已经警告大家,盲目崇拜精确性指标可能会伤害推荐系统——因为这样可能会导致用户得到一些信息量为0的“精准推荐”并且视野变得越来越狭窄。事实上,让用户视野变得狭窄也是协同过滤算法存在的一个比较主要的缺陷。已经有一些实证研究显示,多样性、新颖性、偶然性这些从未获得过如精确性一般重要地位的因素,对于用户体验都十分重要——譬如用户希望音乐推荐更多样更偶然。
与此同时,应用个性化推荐技术的商家,也希望推荐中有更多的品类出现,从而激发用户新的购物需求。多样性和新颖性的要求在大多数情况下具有一致性,一些商家更喜欢引导用户关注一些销量一般的长尾商品(这些商品的利润往往更多),这种新颖性的要求往往和多样性的要求一致。还有一些特别的需求非常强调多样性和新颖性,譬如类似于“唯品会”这样的限时抢购模式或者最近非常流行的团购模式,广受欢迎的热销商品很快就抢购/团购一空,推荐引擎能够发挥作用的只能是推荐那些不太被主流消费者关注的小众产品。对于新浪微博这类的社会网络,相当部分新用户很快就不活跃了,很大程度上是因为得不到其他人关注。类似地,世纪佳缘和百合网这类的网站中,一个用户如果很长时间没有机会得到任何异性的青睐,也会失去动力。在这种情况下,我们要考虑的不仅仅是向某些用户推荐,而是如何把一些至少目前还不是特别受欢迎的用户推荐出去——这时候,在多样性和新颖性上表现出色的算法意义更大。最近Ugander等人的工作显示,一个用户要向其他若干用户推广某种互联网活动,在同等推广力度下(用推荐的朋友数目衡量),其所选择的推荐对象的结构多样性越大,效果往往越好。
保证推荐的多样性很有价值,但是,推荐多样的商品和新颖的商品与推荐的精确性之间存在矛盾,因为前者风险很大——一个没什么人看过或者打分较低的东西推荐出手,很可能被用户憎恶,从而效果更差。很多时候,这是一个两难的问题,只能通过牺牲多样性来提高精确性,或者牺牲精确性来提高多样性。一种可行之策是直接对算法得到的推荐列表进行处理,从而提升其多样性。Hurley和Zhang就是在推荐算法得到的前N个商品中进行一次组合优化,找出L个商品。
图4:对推荐系统实施攻击的示意图。
挑战五:推荐系统的脆弱性问题。
受推荐系统在电子商务领域重大的经济利益的驱动,一些心怀不轨的用户通过提供一些虚假恶意的行为,故意增加或者压制某些商品被推荐的可能性。图4展示了一个攻击的实例。假设我们现在要决定是否向用户h推荐商品7,如果系统中只有那些合法用户(a-g),通过上表我们发现用户a和f与用户h的品味比较相似,由于用户a和f都喜欢商品7,那么系统应该把商品7推荐给用户h。如果受到恶意攻击,系统会发现大多数由攻击者生成的虚假用户(i-m)的品味都与用户h相似,并且他们对商品7都给了负面的评价,那么在这种情况下,系统就不会把商品7推荐给用户h。这样一来,就达到了那些攻击者降低对商品7推荐可能性的目的。上面的例子仅仅是众多攻击方案中比较简单的一员,Burke等人2011年的研究报告中就分析了4大种类8种不同的攻击策略。除了如图4这样的简单方法外,攻击者还通过将攻击对象和热销商品或特定用户群喜欢的商品绑定而提高攻击效果,甚至通过持续探测猜测系统的计算相似性的算法,从而有针对性地开展攻击。
从上面的介绍可以看出,一个推荐算法能否在一定程度上保持对恶意攻击的鲁棒性,成为需要认真考虑的一个特征。以最简单的关联规则挖掘算法为例,Apriori算法的鲁棒性就远胜于k近邻算法。有一些技术已经被设计出来提高推荐系统面对恶意攻击的鲁棒性,譬如通过分析对比真实用户和疑似恶意用户之间打分行为模式的差异,提前对恶意行为进行判断,从而阻止其进入系统或赋予疑似恶意用户比较低的影响力。总体来说,这方面的研究相对较少,系统性的分析还很缺乏,反而是攻击策略层出不穷,有一种“道高一尺,魔高一丈”的感觉。
挑战六:用户行为模式的挖掘和利用。
深入挖掘用户的行为模式有望提高推荐的效果或在更复杂的场景下进行推荐。譬如说,新用户和老用户具有很不一样的选择模式:一般而言,新用户倾向于选择热门的商品,而老用户对于小众商品关注更多[29],新用户所选择的商品相似度更高,老用户所选择的商品多样性较高。上面曾经介绍过的能量扩散和热传导的混合算法[19]可以通过一个单参数调节推荐结果的多样性和热门程度,在这种情况下就可以考虑给不同用户赋予不同的参数(从算法结果的个性化到算法本身的个性化),甚至允许用户自己移动一个滑钮调节这个参数——当用户想看热门的时候,算法提供热门推荐;当用户想找点很酷的产品时,算法也可以提供冷门推荐。
用户行为的时空统计特性也可以用于提高推荐或者设计针对特定场景的应用(关于人类行为时空特性的详细分析请参考文献)。最简单的例子是在推荐前考虑用户从事相关活动随时间变化的活跃性。举个例子,在进行手机个性化阅读推荐的时候,如果曾经的数据显示某个用户只在7点到8点之间有一个小时左右的手机阅读行为(可能是上班时在地铁或者公交车上),那么9点钟发送一个电子书阅读的短信广告就是很不明智的选择。从含时数据中还可以分析出影响用户选择的长期和短期的兴趣,通过将这两种效应分离出来,可以明显提高推荐的精确度。事实上,简单假设用户兴趣随时间按照指数递减,也能够得到改进的推荐效果。随着移动互联网的飞速发展以及GPS及其他手机定位技术的发展和普及,基于位置的服务成为一个受到学术界和业界广泛关注的问题。基于位置信息的推荐可能会成为个性化推荐的一个研究热点和重要的应用场景,而这个问题的解决需要能够对用户的移动模式有深入理解,包括预测用户的移动轨迹和判断用户在当前位置是否有可能进行餐饮购物活动等,同时还要有定量的办法去定义用户之间以及地点之间的相似性。事实上,即便简单把位置信息作为一个单独属性加以考虑,也可以明显提高广告推荐和朋友推荐的精确度。特别要提醒各位读者,知道了用户的位置信息,并不意味着可以随时向用户推荐近处的餐饮购物等等场所,因为频繁而不精确的推荐会让用户有一种被窥探和骚扰的感觉。从这个意义上讲,把握进行推荐的时间和地点非常重要!一般而言,在用户经常出没的地点,譬如工作地点、学校、住家等等进行推荐的效果往往是比较差的,因为用户对于这些地点比系统还熟悉,而且很难想象用户在上下班的路上会有特别地情致购物或者进餐。实际上可以预测的时空信息往往是商业价值比较低的,而用户在吃饭时间去了一个平常不太去的地方,往往有更大的可能是和朋友聚会就餐。这就要求系统更加智能,能够对用户当前行为所蕴含的信息量进行估计(要同时考虑时间和空间),并且在信息量充分大的时候进行推荐。
另外,不同用户打分的模式也很不一样,用户针对不同商品的行为模式也不一样(想象你在网上下载一首歌和团购房子时的区别),这些模式都可以挖掘刻画并利用来提高推荐的效果。总而言之,推荐引擎要做的是针对合适的对象在合适的时间和合适的地方推荐合适的内容(4S标准)。通过分析不同用户在选择、评价、时间、空间等等行为模式上的不同,我们最终的目的是猜测目标用户当前的意图,并且针对不同的意图匹配或组合不同的算法结果,将其推荐给用户。这不仅需要更高级的数据分析能力,还需要有丰富经验了解业务逻辑的工作人员配合完成。这种称为“情境计算”的思路,有可能较大程度提高推荐及其他信息服务(譬如搜索)的质量,百分点的推荐引擎就是在这种思路下架构的。