推荐引擎架构
生成用户特征向量
用户特征可以分成用户注册时填写的人口统计学特征和从用户行为中计算得到的特征。特征向量由特征和它的权重组成。在利用用户行为计算特征向量时,需要考虑:
用户行为的种类。有些行为比其他的行为更重要,一般用户付出代价越大的行为权重应该更高。
用户行为产生的时间。一般地用户近期的行为权重应该更高。
用户行为的次数。对同一物品可能有多次行为,对应的物品的特征权重应该更高。 物品的热门程度。热门物品往往不能代表用户的个性,因此应该加重不热门物品的特征权重。
特征-物品相关推荐
相关推荐使用的特征-物品相关表一般不止一个,不同的算法、不同的用户行为数据会有不同的相关表,系统会根据配置和权重叠加相关表,直接使用叠加后的相关表。
如果需要在一个较小的候选物品集合中给用户推荐物品,可以考虑用候选物品集合先做过滤,避免热门度带来的影响。 过滤
过滤模块会过滤掉: 用户已经产生过行为的物品 候选物品以外的物品
某些质量很差的物品,比如以评分为依据 排名
排名模块一般需要包括很多不同的子模块:
新颖性:目的是给用户尽量推荐他不知道的、长尾中的物品。一般要对热门物品降权,对ItemCF算法,要对 wij 和 ruj 降权。
多样性:很多时候需要增加多样性来提高覆盖率。可以通过分类,或者让推荐理由(来自特征)尽量不同。
时间多样性:为了保证用户能看到不同的推荐结果。一方面要保证推荐系统的实时性;另外对于没有新行为的用户,也要记录他看到的推荐结果,并给这些物品降权。 用户反馈:这是排名模块最重要的部分,主要通过分析用户之前和推荐结果的交互日志,预测用户会对什么样的推荐结果感兴趣。如果关注点是点击率,可以使用点击模型。
8 评分预测问题 9 最后
Strand研究人员总结的10条设计推荐系统的经验: 确定你真的需要推荐系统
确定商业目标和用户满意度之间的关系 选择合适的开发人员 忘记冷启动的问题 平衡数据和算法之间的关系
找到相关物品容易,但如何展现给用户则很困难
不要浪费时间计算相似兴趣的用户,可以直接利用社会网络数据
需要不断提升算法的扩展性 选择合适的用户反馈方式
设计合理的评测系统,时刻关注推荐系统各方面的性能