口味相似度算法讨论(转载)

导读:
  主要引用自豆瓣python小组里的对口味相似度算法的讨论。
  enjoy (成都):
  问题:类似豆瓣的口味匹配运算,这个也是我比较挠头的. 目前只是简单建立模型如下:
  
  A集合中有若干成员a1,a2,a3……
  B集合中有若干成员b1,b2,b3……
  A和B中的每一个成员都可能会发生最多一个关系,这个关系有一个权重,为了初期算法分析的简单,我们忽略权重的问题,仅考虑关系的有无。
  现在的问题是,得到A集合中与某个成员A[n]口味最相似的前m个成员列表。
  
  从我的模型中可以猜到我大概是怎么实现算法的了,就是比较每个A成员的关联集合B[x],然后得到与B[n]重合率最高的前几个A成员。
  
  没有时间仔细考虑,这样的结果是算法效率很低,时间复杂度太高,数据量大的话简直是灾难。 不可能实现实时的运算和展现。
  
  我简单做了测试,2000用户2000评论对象,评价数据20000条,输入1用户id,输出口味最相似的前5用户id,运算平均完成时间在 6秒左右。这基本是不能接受的。目前只能又写一个单独的运算程序,在CPU空闲时间较多的时段整体运算,然后存入数据库备用。每天定时执行,一般都在凌晨 3点到5点。
  
  不知道大家有没有更好的办法?
  找了几个朋友,最新的讨论结果公布如下:
  
  1.豆瓣的口味推荐数据也不是实时的.原因如下:
  
  1.1 据我们使用一个帐号进行的测试,首先使用该用户选择一些书籍电影和音乐并评分,然后迅速换掉.结果是推荐在一段时间(几小时)内没有改变.
  1.2 http://www.douban.com/group/topic/1015820/ 阿北的话.其中有几句值得玩味:”不过豆瓣有很多后台的程序和处理,用php不是很有效。当初不想对付两套语言,所以决定用python的。”;”菜贩子, 豆瓣的后台数据处理有的一天跑一次。”.纵观豆瓣,目前几乎没有其他的运算达到这样的运算量,需要一天跑一次的.
  
  2.关于模型.
  至少目前从豆瓣的结构上来看,使用的既然是MYSQL这种RMDBS,那么数据存储的物理结构不会有什么特别的地方,顶多就是在索引性能和冗余设计等方面有一些小技巧,这个可以慢慢总结不着急.但是从豆瓣的系统框架来看,没有引入类似人工智能算法框架这种的新东西,那么就是说,目前还是处于一般性问题领域.从这几点分析,豆瓣的基本模型可能会在我们预计的模型上有一些小的变化,包括在算法实现上可能会有很多小的技巧性的东西,但是问题模型,还是在我们估计的范围内.这么自信的原因主要是今天收到MS工程院工作的一个朋友的邮件,讲他在处理这种问题时也没有更好的办法,那我就更没辙了,不知道阿北是不是真有突破.
  
  这个算法就豆瓣而言,只是推荐臭味相投的人,以及合乎用户口味的产品.但是它适用的领域应该很广,应用前景也应该不是这么一点.如果对问题模型能有根本的改进,那会是件很让人激动的事情.
  alex (上海)
  复杂的问题简单看,简单的问题复杂想。
  
  enjoy,做了这么多工作,也是高手!
  
  定义a是一个元素,a可以是小组成员或者书,属性{标签,点击次数,点击者},统计所有点击者的所看的其他元素的个数,排序出前6名(计算算法中可以只取前6最大概率的元素),复杂度分析,设a属于n,与a有关的点击者为m,与点击者相关的元素为p,m*P为与a相关的推荐,m最大为所有用户,p为所有用户或者产品,实际上,m最多为500左右(历史经验),p的数量级别大概数十位左右,这样至多对于每次关于a的数据统计为5000次左右,大概2秒可以计算出。如果按照现在网站的规模1万产品,对于买个产品的计算,应该2万秒,折合3个小时左右。
  采取策略,针对活跃性a元素,采取实时计算,并采用多线程计算返回实时更新。对于非活跃性a元素,采取夜间大规模另外的数据仓库计算。
  我想总有解决办法。
  另外,建议关注 数据挖掘“关联规则算法”。
  瞎说,大家别信。
  ptree (暂居北京)
  数据巨大时,实时是不可能的
  模型是正确的,算法可简化考虑:先统计对象的收藏人数,只选择那些少数人收藏的对象关系来计算.对每个用户来说,也只选择其评价最高的,或标签频次最高的一些对象,作其独特的\稳定的\兴趣特征
  小力 (深圳)
  想得太复杂了,tag是简化口味相似度算法的关键。
  没有tag/keyword,那么你得用分词技术,把用户输入的帖子/评价等等等按照词的单位分割开,然后按照某些词在哪些用户那里出现的重复频率来计算相似度。
  Network(5)
  PHP(4)
  Python(5)
  Ruby(1)
  Unix Like(8)
  Web Design(7)
  Web Develop(7)
  WEB2.0学习和研究(5)
  WordPress(5)
  创意(2)
  图片(3)
  学习笔记(13)
  思想(12)
  技术资料(18)
  方法(6)
  未分类文章(6)
  杂谈与随笔(23)
  网络与互联(22)
  (7)
  音乐(25)
   搜索
   日历
  三月 2008
  一 二 三 四 五 六 日
  1 2
  3 4 5 6 7 8 9
  10 11 12 13 14 15 16
  17 18 19 20 21 22 23
  24 25 26 27 28 29 30
  31
   存档
  九月 2007
  八月 2007
  七月 2007
  四月 2007
  二月 2007
  一月 2007
  十二月 2006
  十一月 2006
  十月 2006
  九月 2006
  八月 2006
  七月 2006
   新帖
  李嘉诚先生四问
  开书店
  To Be By Your Side
  英文名字
  支付宝控件漏洞—到底是谁在撒谎?
  生命的意义?
  六步分说十五载Web开发技术发展史话
  CLI Theme的使用方法和一个小实验
  愤怒的一天,V2EX被停
  生活,也让别人生活
   评论
  AlanShepard: An airline ticket generally is a document created...
  Nikita Aleksandrov: The European credit cards: MasterCard, Visa (Gold...
  ZoroVoivobe: [b]Всем привет!!![/b] Если у ...
  SibionibDot: Hi all! http://joper.cn/301.html http://joper...
  Beeddeehexy: los http://guyter.cn tredf iso dervig...
   Blogroll

本文转自
http://blog.bobobook.cn/?p=68
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值