Kuberski - 酷伯司机

写在代码边上
  博客园  :: 首页  :: 联系 :: 订阅 订阅  :: 管理

feedzshare推荐的实践

Posted on 2009-11-04 13:48  kuber  阅读(735)  评论(1编辑  收藏  举报
xlvector介绍了用user-based 推荐算法做Google Reader 推荐, 跟他在GTalk上聊了一些细节, 跟我在FeedzShare中作的大同小异. 我也来分享一下在FeedzShare推荐中的一些实践.

1. 也是user-based. 如xlvector所说user-based算法非常适合于item快速更新的场合.

2.  user-based 算法要求先算出一组相似用户. 在FeedzShare 中这一步是在后台job 来计算, 根据每个用户最近2个月share的文章, 找到20个左右相似用户. 对相似度设了一个阈值, 所以有时候没有20个. 相似用户保持到数据库, 每个礼拜算一遍.

3.  找出这一组N个相似用户三天内share的文章, 一般会有100~200篇. 统计相似用户中share 这篇文章的次数排序(不是所有FeedzShare 抓到的Google Reader用户Share次数), 大于M的加入推荐结果, 去掉用户自己已经share的文章后按时间排序
     阈值M的取值: N<10时, M=2, N>=10, M=3. 这个数纯粹是蒙的. 主要是控制相关性和推荐结果的数量, 是根据自己的体验和朋友的反馈慢慢调整的
     文章推荐是用户访问和Feed Fetcher 来抓时实时计算的, 不过在web server上做了缓存.

之所以用相似用户的share数来过滤, 而不是用全体用户的share次数, 是想做到更个性化一些, 能够为读者找出一些小众的文章来. 
设定最小的share 数M是为了保证相关性, 排除可能的随机性. 但这不是太好的办法.

一些问题:
  • 如果用户share的文章太少的话, 可能找不到相似用户, 或者1, 2 个. 这种情况下目前是放弃推荐;
  • share数量的多少和找到的相似用户数量没有什么大的联系. 有用户share数量很多, 但是能找到的超过阈值的没有; 
  • 这种方式下推荐的文章数量是无法控制的, 有时太多有时太少. 但是我不想用TOP N的方式, 担心放弃掉一些小众的内容.
  • 目前Google Reader 中文用户不多(xlvector统计大概2W左右), 而且大部分兴趣相近, 使推荐的个性化还不够. 比如说热门的话题主要集中在互联网,群体性事件和数码产品, 我个人比较喜欢电影, 但是很少能找到这方面的文章.