我正在尝试构建一个推荐系统,该系统会根据用户的操作(谷歌搜索、点击,他也可以明确地评价网页)向用户推荐网页。为了了解谷歌新闻的方式,它会显示来自网络的关于特定主题的新闻文章。用技术术语来说就是集群,但我的目标是相似的。它将是基于用户行为的基于内容的推荐。
所以我的问题是:
- 我怎么可能在互联网上搜索相关的网页?
- 我应该使用什么算法从网页中提取数据是文本分析和词频的唯一方法?
- 最后,什么平台最适合这个问题。我听说过 Apache mahout,它带有一些可重复使用的算法,听起来很合适吗?
我正在尝试构建一个推荐系统,该系统会根据用户的操作(谷歌搜索、点击,他也可以明确地评价网页)向用户推荐网页。为了了解谷歌新闻的方式,它会显示来自网络的关于特定主题的新闻文章。用技术术语来说就是集群,但我的目标是相似的。它将是基于用户行为的基于内容的推荐。
所以我的问题是:
正如 Thomas Jungblut 所说,一个人可以就您的问题写几本书 ;-) 我会尝试给您一份简短的指导清单 - 但请注意,不会有现成的现成解决方案......
爬网:有很多工具包可以做到这一点,比如用于 Python 的 Scrapy、用于 Java 的 crawler4j 和 Heritrix,或用于 Perl 的 WWW::Robot。要从网页中提取实际内容,请查看boilerpipe。
http://code.google.com/p/crawler4j/
首先,您通常可以使用协同过滤而不是基于内容的方法。但是如果你想有很好的覆盖率,尤其是长尾,就没有办法分析文本了。要看的一件事是主题建模,例如 LDA。在 Mallet、Apache Mahout 和 Vowpal Wabbit 中实现了几种 LDA 方法。对于索引、搜索和文本处理,请查看 Lucene。这是一个很棒的成熟的软件。
除了还包含 LDA(见上文)、集群和文本处理等功能的 Apache Mahout 之外,如果您想专注于协同过滤,还可以使用其他工具包:LensKit,它也是用 Java 实现的,以及 MyMediaLite(免责声明:I我是主要作者),它是用 C# 实现的,但也有一个 Java 端口。
这应该是一本好书:谷歌新闻个性化:可扩展的在线协同过滤
它专注于协同过滤而不是基于内容的推荐,但它触及了一些非常有趣的点,如可扩展性、项目流失、算法、系统设置和评估。
Mahout 具有非常好的协同过滤技术,您将其描述为使用用户的行为(点击、阅读等),您可以使用 rescorer 类引入一些基于内容的内容。
您可能还想看看Myrrix,它在某些方面是 Mahout 的口味(又名推荐)部分的演变。此外,它还允许使用 rescorer 类在协作过滤之上应用基于内容的逻辑。
如果您对 Mahout 感兴趣,那么Mahout in Action 一书将是最好的起点。