如何创建自己的推荐引擎? [关闭](How to create my own recommend

2019-07-17 16:24发布

我感兴趣的推荐引擎这些天,我想提高自己在这个领域。 我目前正在读“ 集体智慧编程 ”我认为这是关于这个问题的最好的书,由O'Reilly。 但我没有任何想法如何实现发动机; 我的意思是“不知道”是“不知道如何下手”。 我在我的脑海就像Last.fm的项目。

  1. 我从哪里开始创建推荐引擎(应在数据库端或后端侧实现)?
  2. 什么级别的数据库知识,将需要?
  3. 是否有可用于帮助或任何资源的任何开源的吗?
  4. 应该是什么,我必须做的第一步?

Answer 1:

对于视频门户自己,我已经建立了一个。 我有主要的想法是对的事情了收集数据:

  • 谁上传的视频?
  • 谁评论了一部影片?
  • 其中标签哪里产生的?
  • 谁访问了视频? (也跟踪匿名访问者)
  • 谁收藏了一个视频?
  • 谁额定视频?
  • 在视频分配到哪个频道?
  • 标题,描述,标签,信道和注释的文本流由全文索引这使重量在每个数据源收集的。

接着我创建了返回的(ID,重量)元组为每个上述的点列表的函数。 有些只考虑视频数量有限(例如,最后的50),通过一些如等级,标签计数(更多的时候标记=不表现)修改权重。 有迹象表明,返回下面的列表的功能:

  • 通过全文搜索类似的视频
  • 同一用户上传的视频
  • 其他视频从这些评论的用户也评论
  • 其他视频从这些收藏夹的用户还收藏
  • 其他视频从这些评级也被评为对评价者(加权)
  • 在同一个频道的其他影片
  • 具有相同标签的其他视频(通过变量“表现”加权)
  • 由谁玩过这个视频的人在玩其他视频(XY最新戏剧)
  • 通过评论全文类似的视频
  • 按标题全文类似的视频
  • 按说明全文类似的视频
  • 通过标签全文类似的视频

所有这些将被合并成刚总结通过视频ID的权重的单个列表,然后通过重排序。 现在,这工作得很好了大约1000视频。 但是,你需要做的后台处理或极端缓存这是迅速的。

我希望我可以这一声减少到一个通用的推荐引擎或相似度计算和发布的铁轨/ ActiveRecord的插件。 目前,它仍然是我的项目的一个很好的集成部分。

为了给小提示,在Ruby代码它看起来像这样:

def related_by_tags
  tag_names.find(:all, :include => :videos).inject([]) { |result,t|
    result + t.video_ids.map { |v|
      [v, TAG_WEIGHT / (0.1 + Math.log(t.video_ids.length) / Math.log(2))]
    }
  }
end

我会感兴趣的其他人是如何解决这样的算法。



Answer 2:

提出建议可以在两个主要部分被分离:

  1. 特征提取
  2. 建议

特征提取是非常具体的被推荐的对象。 对于音乐,例如,对象的某些功能可能是这首歌,电力,流派等,为用户的功能可能是年龄,位置等的频率响应,然后为每个用户创建一个矢量曲与对应于所关注的不同特征向量的各种元素。

执行实际的建议,只需要深思熟虑的特征向量。 请注意,如果你没有选择正确的功能您的推荐引擎将失败。 这就像问你告诉我,我的性别基础上我的年龄。 当然,我的年龄可能提供一点信息,但我认为你能想象更好的问题要问。 不管怎么说,一旦你为每个用户和歌曲的特征向量,你需要训练推荐引擎。 我认为这样做会得到一大堆的用户把你的人口测试,然后告诉你,他们喜欢的某些乐曲的最佳途径。 在这一点上,你有你需要的所有信息。 你的任务是绘制你的信息的决策边界。 考虑一个简单的例子。 要预测一个用户是否喜欢AC / DC的“回到黑色”根据年龄和性别。 想象示出100个数据点的曲线图。 x轴是年龄,y轴是性别(1是男性,2是女性)。 黑色痕迹表明用户喜欢的歌曲,而红色的标记表示他们不喜欢的歌曲。 我的猜测是,这可能图有很多对应的是男性用户和12和37岁之间,而标记的其余部分将是红色的黑色痕迹。 所以,如果我们要手动选择决策边界,这将会是解决这个区域保存广大黑色标记的矩形。 这就是所谓的决策边界,因为如果一个完全新的人来给你,告诉你他们的年龄和性别,你只需要绘制出来的图表,并询问他们是否落在那个盒子内。

所以,最困难的部分就是在这里发现的决策边界。 好消息是,你不需要知道该怎么做。 你只需要知道如何使用一些常用的工具。 你可以考虑使用神经网络,支持向量机,线性分类,等等。再一次,不要让大牌欺骗你。 大多数人不能告诉你这些东西都是真的这样做。 他们只是知道如何插上的东西,得到的结果。

我知道这是一个有点晚了,但我希望这可以帮助任何人在此线程绊倒。



Answer 3:

这真的是你问,所以即使我可以给你一个详细的解答,我怀疑我有时间一个非常大的问题....但我有一个建议,看看格雷格·林登的博客,他的论文在基于项目的协同过滤。 格雷格使用基于项目的方法来实现的建议引擎的理念在亚马逊,他真的知道他的东西,他的博客和文章可读性很强。

博客: http://glinden.blogspot.com/纸: http://www.computer.org/portal/web/csdl/doi/10.1109/MIC.2003.1167344 (恐怕你需要登录阅读全面,因为你是一个CS的学生,这应该是可能的)。

编辑你也可以看看Infer.Net ,它们包括建立一个推荐系统对电影数据的例子。



Answer 4:

我对基于协同过滤推荐引擎2部分博客在Hadoop实现。

http://pkghosh.wordpress.com/2010/10/19/recommendation-engine-powered-by-hadoop-part-1/

http://pkghosh.wordpress.com/2010/10/31/recommendation-engine-powered-by-hadoop-part-2/

这里是GitHub的库为开源项目https://github.com/pranab/sifarish

随意如果你喜欢它的使用。



Answer 5:

一个例子推荐引擎是开源(AGPLv3-行货)已被Filmaster.com最近发表。 它是用C ++编写,并使用从作为Netflix的challange的部分产生的白皮书最佳实践。 关于它的文章,可以发现: http://polishlinux.org/gnu/open-source-film-recommendation-engine/和代码是在这里: http://bitbucket.org/filmaster/filmaster-test/src /tip/count_recommendations.cpp



文章来源: How to create my own recommendation engine? [closed]