网页推荐系统

6

我正在尝试构建一个推荐系统,根据用户的行为(谷歌搜索、点击或对网页进行评分)来向用户推荐相应的网页。要了解谷歌新闻的工作方式,它是基于某个主题展示从网络上获取到的新闻文章。技术上说这被称为聚类,但我的目标类似。它将基于用户的行为进行基于内容的推荐。

所以我的问题是:

  1. 我如何可能搜索互联网找到相关的网页?
  2. 应该使用什么算法从网页中提取数据,文本分析和词频是否是唯一的方法?
  3. 最后,哪个平台最适合这个问题。我听说过Apache Mahout,并且它带有一些可重复使用的算法,它是否合适?

2
你可以写多本关于你的问题的书。 - Thomas Jungblut
哈哈,它们听起来像是大问题吗?我正在寻找一个简单的解决方案。只需要简要描述如何处理这样的项目。 - Rajan Soni
1
《集体智慧编程》(Programming Collective Intelligence)是一本简单易懂、无需数学基础的机器学习入门书籍,其中包含了与您提出问题类似的案例。 - Maurits
2个回答

10

正如Thomas Jungblut所说,你的问题可以写出几本书;-) 我会尝试给您提供一个简短的指南清单 - 但请注意,没有现成的解决方案...

  1. 爬取互联网:有很多工具包可以做到这一点,比如Python的Scrapy、Java的crawler4j和Heritrix,或者Perl的WWW::Robot。要从网页中提取实际内容,可以看看boilerpipe。

    http://scrapy.org/

    http://crawler.archive.org/

    http://code.google.com/p/crawler4j/

    https://metacpan.org/module/WWW::Robot

    http://code.google.com/p/boilerpipe/

  2. 首先,通常您可以使用协作过滤而不是基于内容的方法。但如果您想在长尾中获得良好的覆盖率,就必须分析文本。一件值得关注的事情是主题建模,例如LDA。Mallet、Apache Mahout和Vowpal Wabbit实现了几种LDA方法。 对于索引、搜索和文本处理,请查看Lucene。这是一个很棒、成熟的软件。

    http://mallet.cs.umass.edu/

    http://mahout.apache.org/

    http://hunch.net/~vw/

    http://lucene.apache.org/

  3. 除了 Apache Mahout 之外,它还包含像 LDA(参见上文)、聚类和文本处理等内容,如果您想专注于协同过滤,还有其他可用的工具包:LensKit,在 Java 中也实现了该功能;而 MyMediaLite(免责声明:我是主要作者),则是使用 C# 实现的,但也有一个 Java 版本。 http://lenskit.grouplens.org/ http://ismll.de/mymedialite https://github.com/jcnewell/MyMediaLiteJava

感谢Zenog提供详细的答案。这正是我在寻找的答案,非常感谢 :) - Rajan Soni

4
这篇文章值得一读:Google news personalization: scalable online collaborative filtering。它主要关注的是协作过滤而非基于内容的推荐,但涉及到一些非常有趣的点,如可扩展性、物品流失、算法、系统设置和评估。
Mahout拥有非常好的协作过滤技术,即所描述的使用用户行为(点击、阅读等),并可以通过重评分器类引入一些基于内容的方法。
你还可以看看Myrrix,它在某些方面是Mahout推荐部分(也称为口味)的升级版。此外,它还允许使用重评分器类在协作过滤之上应用基于内容的逻辑。
如果你对Mahout感兴趣,最好从Mahout实战开始。

谢谢Astatic。我还没有阅读你建议的论文,但希望它涵盖了谷歌如何从整个网络中找到网页,与从单个站点获取文章进行比较。Myrrix看起来很有趣,需要进一步了解。再次感谢。 - Rajan Soni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接