小编说:在推荐系统中,通过对用户数据的挖掘,抽象出用户感兴趣的“商品”,以微博的博文推荐为例,“商品”表现为用户的博文,在博文精准推荐中,其核心问题是在给定的环境下,为用户推荐高质量且符合用户兴趣的博文。
- 精准推荐
1 精准推荐的项目背景
在社交网络中,每一个用户只是整个网络中的一个节点,一个简单的网络结构如图1所示。
图1 网络结构
在微博中,用户可以通过“关注”行为成为另一个用户的粉丝,“关注”行为是有向的。通过“关注”一个用户后,我们可以在我们的feed流中看到对方的信息。在微博中,通过这样的方式,我们可以接触到更多的信息。
然而,在信息过载的时代,信息呈现爆炸式增长,如在微博中,每天有大量的微博被创作和转发,信息量的爆炸式增长在给用户不断带来新的信息的同时,也增加了用户筛选信息的难度,为了能够为用户推荐其感兴趣的信息,我们首先要分析出该用户的兴趣,从海量的信息中选择出与用户兴趣相似的信息,并将这些信息推荐给用户。推荐系统(Recommendation System,RS)正是在这样的背景下被提出的,推荐算法根据用户的历史行为,挖掘出用户的喜好,并为用户推荐与其喜好相符的商品或者信息。推荐系统的任务就是能够连接信息与用户,帮助用户找到其感兴趣的信息,同时让一些有价值的信息能够触达到潜在的用户中。此时,对用户兴趣的精准挖掘,成为为用户精准推荐博文的关键任务。
2 精准推荐的技术架构
在构建推荐系统的过程中,为了能够为用户提供精准的博文推荐,其架构的设计主要包括四层:数据生产层、存储层、候选过滤层和排序层。最终输出排序后的结果,具体的精准推荐的架构设计如图2所示。
图2 精准推荐的架构设计
在图2所示的精准推荐的架构设计中,首先,在数据生产层,我们需要利用离线挖掘的方法对用户兴趣进行挖掘,挖掘完成后,将用户数据存储到对应的数据库中,我们称为用户数据库。同时,我们需要将待推荐的微博也存储在数据库中,我们称为推荐微博数据库。在用户数据挖掘中,通常使用到的方法包括协同过滤算法、标签传播算法、word2vec等。
在存储层,将挖掘好的用户兴趣存储到对应的数据库中,我们通常可以使用Redis等NoSQL数据库。
在候选过滤层,当用户请求时,首先从用户数据库中查找到用户的兴趣,再根据查找到的用户兴趣、到推荐微博数据库中进行请求,查找到对应的待推荐的微博,其具体过程如图3所示。
图3 查询操作
当通过如上的操作查询出了最终的结果后,我们需要对其中的结果进行合并和过滤,以保证最终结果的唯一性。
在排序层,我们需要对所有的候选进行排序,以确定最终的曝光顺序,在排序阶段,使用的评价指标通常为点击率CTR,即:
其中,#impression表示的是曝光的次数,#click表示的是点击的次数,在微博中,点击的行为主要包括:“转发”、“评论”、“点赞”、“点击短链接”等。通常采用机器学习的算法对候选进行排序,排序的主要方法有:Logistic Regression算法、因子分解机FM算法、梯度提升决策树GBDT算法等。
3 离线数据挖掘
在精准推荐中,对用户的离线数据挖掘是很关键的步骤,常用的用户定向主要有:①人群属性定向(Demographic Targeting);②行为定向(Behavioral Targeting);③地理位置的定向(Geo Targeting);④相似用户的定向(Look-Alike Targeting)。
人群属性定向指基于用户基本属性进行定向,包括年龄、性别等定向,比如为女性用户推荐化妆品类的微博。行为定向指的是基于用户的历史行为数据挖掘用户的兴趣,比如通过对微博中用户对博文的“转发”、“评论”、“点赞”等数据的分析,发现用户的兴趣。地理位置定向指的是利用移动设备记录用户的地理位置,为用户推荐相关的微博,比如用户在某个景点,我们为其推荐邻近地点的微博。相似用户的定向指的是利用已经找出的一些人,找到与其相似的用户进行定向。
以上简单介绍了4种离线数据挖掘的方法,还有很多其他的挖掘方法。在本文中,我们重点关注行为定向和相似用户的定向。
- 基于用户行为的挖掘
在微博中,有两方面的数据可以使用,一方面是用户之间的关注关系,这不部分数据体现了用户的社交属性;另一方面是用户的行为数据,主要包括用户的原创、“转发”、“评论”、“收藏”、“点赞”、“点击短链接”等,这部分体现了用户的兴趣属性,通过对不同类型的数据挖掘,我们可以获得用户不同维度上的相似性。
在基于用户的行为的挖掘中,主要包括:
- 基于互动内容的兴趣挖掘
- 基于与待推荐微博博主的互动
1 基于互动内容的兴趣挖掘
在微博中,用户的互动行为主要包括“转发”、“评论”、 “点赞”、“收藏”和“点击短链接”等。这些行为的背后,表明用户对这条微博的内容在某种程度上产生了共鸣,但是,在不同的行为之间,其能够代表用户的兴趣程度也是不一样的,如“点赞”行为只是对博文内容的认同,而转发行为,则更多地表明用户希望让自己认同的微博内容被更多人看到,更能表明用户的兴趣。
基于互动内容的兴趣挖掘是指利用一些机器学习或者文本处理的方法,提取出用户互动微博文本中的核心词,一般提取核心词的主要步骤为:
- 对文本进行分词,常用的分词工具有:paoding、FudanNLP、CRF 、jieba等
- 去掉停用词,并计算剩余词的TF-IDF值,取TD-IDF值较高的词作为核心词
以这些核心词作为用户的标签,并将这些信息保存到对应的数据库中,其具体过程如图4所示。
图4 基于互动内容的兴趣挖掘
2 基于与博主互动的兴趣挖掘
当用户A与待推荐微博的博主之间有过互动行为时,在一定程度上表明该用户与博主之间存在某种兴趣上的相似性,对于博主发布的微博,用户A互动的可能性比较大,因此,可以选择将这部分用户作为待推广的候选集。
在基于与博主互动的兴趣挖掘中,是指将微博博主的微博投放给与其互动过的一些用户。基于与博主互动的兴趣挖掘的主要任务是对历史的“转发”、“评论”、“点赞”、“收藏”等数据进行处理,从中提取出博主与互动用户之间的关系,并将这样的对应关系存入对应的数据库中,其具体的过程如图5所示。
图5 基于与博主互动的兴趣挖掘
- 基于相似用户的挖掘
“相似用户”的概念在不同的应用场景下的理解是不同的,如基于相似兴趣的相似用户,基于不同群体的相似用户等。在基于相似兴趣的相似用户中,这些用户都对同一个事物有兴趣,如一群对“机器学习”感兴趣的用户的集合。在基于不同群体的相似用户中,这些用户可能是年龄区间也可能是消费能力相似,如大学生群体等。在精准推荐中,我们主要考虑的是基于相似兴趣的相似用户。
1 基于“@”人的相似用户挖掘
从上面的分析中,我们知道,在微博中,一个用户与其粉丝之间的关系大致可以分为:
- 社交关系:如亲戚、朋友、同事、同学等
- 兴趣关系:如机器学习爱好者等
一个用户与其粉丝之间存在某种相似性,或者是兴趣维度的相似,或者是群体间的相似。在微博中,为了能够定向让某个人看到,我们会在这条微博中加入“@”该用户的标记。“@”标记在一定程度上说明该信息与被“@”用户之间存在关系,而由上述的分析可知,用户与其粉丝之间存在社交关系或者兴趣关系,因此,这样的挖掘方法能够充分利用微博数据的特殊性。
在基于“@”人的相似用户挖掘中,对于包含“@”信息的微博,通过对“@”用户的提取,查找到该用户的粉丝,并进行投放,需要查找的库为用户的粉丝库。
2 基于社区的相似用户挖掘
社区划分是社交网络中研究比较多的一个话题,对于不同结构的社交网络有不同的社区划分算法。对于社区并没有明确的定义,通常对于社区的理解是:在网络中,由一些节点构成特定的分组,在同一个分组内的节点,通过节点之间的连接边紧密地连接在一起,而在分组与分组之间,其连接比较松散,称每一个分组为一个社区。社区划分算法通过某种方式将用户划分到不同的社区中,社区内部的连接较为强烈,社区与社区之间有比较明显的界限。
在微博中,用户与用户之间的连接主要分为两种,一种是通过“关注”操作连接两个用户,另外一种是通过“转发”、“评论”、“点赞”、“收藏”、“点击短链接”等行为连接两个用户。在上述的两种连接中,前者的关系不仅包含了兴趣关系,也包含社交关系,而后者,更多倾向于兴趣关系。在这里,我们想要得到的更多的是用户之间的兴趣关系,因此,我们这里使用到的数据是用户之间的“转发”、“评论”、“点赞”、“收藏”、“点击短链接”等行为数据。
从这些行为数据中我们可以知道,这些行为数据连接的两个用户之间的边是存在方向的,即构成的图是有向图。有向图是指图中的边是带有方向的图。对于有向图,每两个节点之间的边的条数是两条,分别为流出的边和流入的边,其流出边的总数为出度,流入边的总数为入度,有向图如图6所示。
图6 有向图
对于节点5,其出度为2,入度也为2。对于更多的有向图的知识,可参阅相关图论的书籍。
而对于标签传播Label Propagation算法,其对数据的要求是无向图,为了使得Label Propagation算法能够利用上述的行为数据对用户进行社区划分,我们将图中的流出边和流入边进行合并,合并的公式为:
我们对参数α与参数β进行了不同的取值,并利用30天的行为数据,最终得到,当α=0.6,β=0.4时效果比较好,最终识别出12629个社区。虽然我们挖掘出了这些社区,但是这些社区的质量参差不齐,有的社区内部较为活跃,而有些社区,内部并不活跃,我们试图将一些不活跃的社区从我们挖掘好的社区中去除,此时,计算每一个社区中的信息熵,熵越大表明该社区越活跃,因此,我们过滤一些不活跃的社区,保留活跃的社区。
当有微博需要投放时,选择某几个社区,将微博投放给社区中的住户,选择社区的方式有很多种,比如:
- 微博的主题与社区标签的匹配
- 微博博主所在的社区
在基于社区的相似用户的挖掘中,利用Label Propagation算法对社区进行挖掘,最终将社区对应的用户列表存储到对应的数据库中,其具体的过程如图7所示。
图7 基于社区的相似用户挖掘
3 基于协同过滤的相似用户挖掘
对于相似用户的挖掘,除了上述的社区挖掘的方法外,还可以使用协同过滤的方法。在协同过滤算法中,主要分为基于用户的协同过滤算法和基于项的协同过滤算法,其主要的区别是在相似度的计算过程中。
我们以基于用户的协同过滤算法为例,在基于用户的协同过滤算法中,主要计算任意两个用户A和B之间的相似度,并利用该相似度将用户B互动过而用户A没有互动过的商品推荐给用户A。