这些天我对推荐引擎感兴趣,我想在这个领域提高自己。我目前正在阅读“Programming Collective Intelligence”我认为这是关于这个主题的最好的书,来自O'Reilly。但我对如何实施引擎没有任何想法;我的意思是“不知道”是“不知道如何开始”。我脑子里有一个像Last.fm这样的项目。
答案 0 :(得分:27)
提出建议可分为两个主要部分:
特征提取非常特定于推荐的对象。例如,对于音乐,对象的某些功能可能是歌曲的频率响应,功率,类型等。用户的功能可能是年龄,位置等。然后,您为每个用户创建一个向量,歌曲与矢量的各种元素对应不同的兴趣特征。
执行实际建议只需要经过深思熟虑的特征向量。请注意,如果您未选择正确的功能,则推荐引擎将失败。这就像是要求你根据我的年龄告诉我我的性别。当然,我的年龄可能会提供一些信息,但我认为你可以设想更好的问题。无论如何,一旦你有每个用户和歌曲的特征向量,你将需要训练推荐引擎。我认为最好的方法是让一大群用户参加你的人口统计测试,然后告诉你他们喜欢的特定歌曲。此时,您将获得所需的所有信息。您的工作是根据您拥有的信息绘制决策边界。考虑一个简单的例子。您想要根据年龄和性别来预测用户是否喜欢AC / DC的“Back in Black”。想象一下显示100个数据点的图表。 x轴是年龄,y轴是性别(1是男性,2是女性)。黑色标记表示用户喜欢该歌曲,而红色标记表示他们不喜欢该歌曲。我的猜测是,这个图形可能有很多黑色标记,对应于男性和年龄在12到37岁之间的用户,而其余的标记将是红色。因此,如果我们要手动选择一个决策边界,那么它将是一个围绕该区域的矩形,其中包含大部分黑色标记。这被称为决策边界,因为如果一个全新的人来找你并告诉你他们的年龄和性别,你只需要在图表上绘制它们并询问它们是否属于那个盒子。
所以,这里的难点在于找到决策边界。好消息是你不需要知道如何做到这一点。您只需要知道如何使用一些常用工具。您可以考虑使用神经网络,支持向量机,线性分类器等。再次,不要让大名愚弄你。大多数人都无法告诉你这些事情到底在做什么。他们只知道如何插入内容并获得结果。
我知道这有点晚了,但我希望这可以帮助那些偶然发现这个问题的人。
答案 1 :(得分:23)
我自己为一个视频门户建立了一个。我的主要想法是收集有关一切的数据:
接下来,我创建了返回上述每个点的(id,weight)元组列表的函数。有些人只考虑有限数量的视频(例如最后50个),有些人通过例如评级,标签计数来修改权重(通常标记为=表达力较差)。有些函数返回以下列表:
所有这些将通过视频ID总计权重,然后按权重排序,合并为一个列表。这对于大约1000个视频现在非常有效。但是你需要为此做后台处理或极端缓存。
我希望我能尽快将其减少到通用推荐引擎或相似度计算器并作为rails / 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
我会对其他人如何解决此类算法感兴趣。
答案 2 :(得分:3)
这是你要问的一个非常大的问题,所以即使我能给你一个详细的答案我怀疑我有时间......但我确实有一个建议,看看Greg Linden的博客和他关于基于项目的协同过滤的论文。 Greg使用基于项目的方法在亚马逊实现了推荐引擎的想法,他真的知道他的东西,他的博客和论文非常易读。
博客:http://glinden.blogspot.com/ 论文:http://www.computer.org/portal/web/csdl/doi/10.1109/MIC.2003.1167344(我担心您需要登录才能完整阅读,因为您是CS学生应该可以这样做。)
修改的 您还可以查看Infer.Net,其中包括为电影数据构建推荐系统的示例。
答案 3 :(得分:3)
我有一个关于基于协作过滤的推荐引擎的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
如果您愿意,请随意使用。
答案 4 :(得分:2)
Filmaster.com最近发布了一个开源示例推荐引擎(AGPLv3许可)。它是用C ++编写的,并使用了作为Netflix挑战的一部分生成的白皮书中的最佳实践。有关它的文章可在以下网址找到:http://polishlinux.org/gnu/open-source-film-recommendation-engine/ 代码在这里:http://bitbucket.org/filmaster/filmaster-test/src/tip/count_recommendations.cpp