双向选择的推荐系统,与传统的推荐系统相比,存在以下的特殊性质:
用户单向决定是否购买物品。
用户通常不太情愿去提供一些“显式”的个人信息。
表中的第2条,拿婚恋网来说吧,用户往往能够提供关于他本身的年龄、性别、身高等等,同时提供对异性(或者同性)的需求特征。婚恋网也可以询问用户一些问题,来判定用户的兴趣是长期的还是短期的,或者让用户提供简短的个人描述和个人的照片。(对于个人描述的处理,可能会用到自然语言处理的一些东西,在这里不作探讨)。
表中第3条,用户一旦“对话”成功之后再也不会返回系统,也不是绝对的,可能用户需要寻找很多工作,或者想找更多的约会的对象。退一步讲,用户离开系统可能是因为用户并没有得到合适的推荐对象,因此对于推荐成功和推荐失败而离开的情况是区分不了的。
双向选择的推荐系统中同样可以收集一些“隐式”的信息,例如对于用户提供自己的个人信息之后,系统会推荐一些用户。用户可能会对某个或者某些感兴趣,并点击进去继续查看更加详细的信息,或者返回推荐列表;前者反映出用户感兴趣的对象,能够抽取出用户的兴趣,后者则反映出用户可能看到了一些不太感兴趣的信息,然后退回到了推荐列表。
表中第5条,在传统的推荐系统中,用户相对于物品是绝对的“活跃”,而在双向推荐中,哪些活跃,哪些“懒惰”并不是绝对的,用户可能在刚开始的比较活跃,也可能在收到对方问候的时候才表现活跃。一般来说,在中国,男性相对于女性比较积极活跃,在日本是相反的,由此可见这和国家的社会风气也有关系的。
3.推荐算法
参考论文是以婚恋网来完成实验的,所以下面直接拿婚恋网作为潜在的描述对象。
用户在获得推荐结果之前,必须要提供一些详细的个人信息,提供的信息越丰富推荐的结果越好。用户可能需要提供的个人信息,包括性别、年龄、位置信息、身材、教育程度、交际能力、婚姻状况等等,对于连续的属性,算法处理的时候要做离散化,例如年龄这个属性,可能会被切分为18~20岁,20~22岁等。下图为提供的一个例子:
拥有了用户的个人信息,怎么去确定用户的喜好?这里先不考虑冷启动的问题。
通过上述的交流,可以统计出用户的喜好信息。对于一个特定的用户,发送的对象必定是他感兴趣的,所以统计发送信息的对象们能够得到该用户的喜好,另外在接收的信息中,如果该用户回复的不是拒绝的,那么也能反映出他的喜好,因此可以从发送对象和接收对象并肯定回答的人群做统计。下图是一个例子:
上图的这个用户对于身材的要求,只要不是太胖都还能接受,但是要求有比较高的交际能力,目前是单身,并且是大学学士或者研究生的要求比较严苛。
那么,在真正处理的时候,怎么去符号化上图中的这种分布?
定义Ux为用户的信息集合,Ux={va:a属于A},va为某一个属性上的数值,例如年龄29岁,A为属性集合。Mx={m:m为发送或者接收并肯定的短信或者其他信息}。
定义用户x在某一个属性上的倾向喜好为Px,a={(v,n):对属性a上的每一个可能离散值进行统计,n为发送信息或者接收的肯定信息中,属性a出现的个数}。那么Px={Px,a,a属于A}。下图为统计的一个例子:
判定一个用户是否符合另一个用户的喜好,只要将该用户的信息核另外一个用户的喜好进行匹配即可。比较官方的算法如下图所示:
看起来都比较头大,我们还是拿个例子来说,使用上一小节中四个人的喜好信息,计算Bob符合Alice的喜好的程度,计算方式如下:
Compat.(PAlice,Bob)=1/No.Attr*∑(Bob'sattrinAlice'sPref.)/(No.Alice'sMess)
=1/3*(9/(9+1)+6/(3+6+1)+5/(5+4+1))
=0.67
那么对于四个人来说,最终计算的匹配度如下表所示:
从表中可以看出,本身对于本身是不存在匹配度的,也就是说对于超级自恋或者出家的人是不考虑的,再说这部分人干嘛登陆婚恋网啊。用户之间的匹配度并不是对称的,例如Bob符合Amy的喜好的匹配度为0.72,而Amy对于Bob的喜好匹配则是0.45。如果一条都不满足的情况的下,计算的得分为0。
通过上一小节的计算方法,可以得到对于某一个用户喜好下的不同的匹配度得分,那么是否直接仿照传统的推荐系统,可以按照这种分数进行排序呢?很显然是可以的,那样可以得到符合用户口味的对象,但是这种方法,很容易出现“我本将心向明月,奈何明月照沟渠”的情况,不仅要考虑推荐用户的喜好,同时还要考虑对方对推荐用户的喜欢程度。
Bob符合Amy的喜好的匹配度为0.72,而Amy对于Bob的喜好匹配则是0.45,那么将两者的匹配度得分进行调和,得到调和平均数,那么推荐列表的生成则是这种调和平均数的大小排序的结果。具体的实现算法如下:
那么针对上面例子的调和结果如下:
从结果中可以看到存在N/A的结果,是因为有些匹配度为0,在进行调和的时候,分母为0,所以在进行改进的方法之一,那就是将0,换成0.00001,或者一个更小的非0数。
对于使用系统的“新用户”来说,还没有建立个人的喜好信息,那么是不能够利用上面的算法进行计算的。不过我们可以计算有哪些人对这个新用户可能感兴趣,那么把这部分推荐给新用户就可以了。