基于神经网络的文档排名

时间:2011-09-26 12:13:19

标签: python machine-learning neural-network

我计划实现一个使用神经网络的文档排名器。如何通过考虑类似文章的评级来评价文件?这样做有什么好的python库吗?任何人都可以使用python代码为AI推荐一本好书。

修改

我打算制作一个推荐引擎,该引擎可以提供类似用户的推荐,也可以使用使用标签聚类的数据。用户将有机会投票选择文章。将有大约十万篇文章。文档将根据其标记进行聚类。给定关键字文章将根据其标签获取并通过神经网络进行排名。

6 个答案:

答案 0 :(得分:12)

您尝试解决的问题称为“协作过滤”。

神经网络

一种最先进的神经网络方法是 Deep Belief Networks Restricted Boltzman Machines 。有关GPU(CUDA)的快速python实现,请参阅here。另一个选项是PyBrain

关于您的具体问题的学术论文:

  • 这可能是神经网络和协同过滤(电影)的最新技术:

      

    Salakhutdinov,R.,Mnih,A. Hinton,G,Restricted Boltzman   协同过滤机器,出现在   第24届国际会议论文集   机器学习2007。   PDF

  • 用Python实现的Hopfield网络:

      

    Huang,Z。和Chen,H。和Zeng,D。应用联想检索技术来缓解协同过滤中的稀疏性问题。   ACM信息系统交易(TOIS),22,1,116-142,2004,ACM。 PDF

  • 关于使用Restricted Boltzman Machines进行协同过滤的论文(他们说Python对这项工作不实用):

      

    -G。 Louppe。协作过滤:可扩展   使用受限制的玻尔兹曼机器的方法。   硕士论文,列日大学,2010   PDF

神经网络目前不是协同过滤的最先进技术。它们不是最简单,最广泛的解决方案。关于您对使用NN的数据太少的原因的评论,神经网络在这种情况下没有固有的优势/劣势。因此,您可能需要考虑更简单的机器学习方法。

其他机器学习技巧

今天最好的方法是混合 k-Nearest Neighbors Matrix Factorization

如果你被Python锁定,请查看pysuggest(SUGGEST推荐引擎的Python包装器)和PyRSVD(主要针对协同过滤中的应用程序,特别是Netflix竞争) 。

如果您愿意尝试其他开源技术,请查看:Open Source collaborative filtering frameworkshttp://www.infoanarchy.org/en/Collaborative_Filtering

答案 1 :(得分:6)

如果你没有致力于神经网络,我对SVM有好运,而k-means聚类也可能有所帮助。这些都由Milk提供。它还对feature selection执行逐步判别分析,如果您试图按主题查找类似的文档,这肯定对您有用。

如果您选择此路线,上帝会帮助您,但ROOT框架有一个强大的机器学习包,名为TMVA,它提供了大量的分类方法,包括SVM,NN和Boosted Decision Trees(也可能是好的选择)。我没有使用它,但是pyROOT提供了对ROOT功能的python绑定。公平地说,当我第一次使用ROOT时,我没有C ++知识,而且在概念上也是我的头脑,所以这对你来说实际上可能是惊人的。 ROOT拥有大量的数据处理工具。

(注意:我还使用卡方特征选择和余弦匹配编写了一个相当准确的文档语言标识符。显然你的问题更难,但考虑到你可能不需要非常大的工具。)

存储与处理

你在问题​​中提到:

  

...文章将根据他们的标签获取并通过神经网络进行排名。

正如另一个NB,您应该了解的有关机器学习的一件事是,培训和评估等流程往往采用。您应该考虑只为每个标记排列一次所有文档(假设您知道所有标记)并存储结果。对于机器学习一般来说,使用更多存储比处理更多更好。

现在针对您的具体案例。你没有说你有多少标签,所以我们假设你有1000个圆形。如果您在每个标记上存储每个文档的排名结果,则会为您提供1亿个浮点数来存储。这是很多数据,计算它们都需要一段时间,但检索它们的速度非常快。如果您根据需要重新计算每个文档的排名,则必须执行1000次传递,每个标记一次。根据您正在进行的操作类型和文档大小,可能需要几秒钟到几分钟。如果这个过程非常简单,你可以等待你的代码按需进行其中几个评估而不会觉得无聊,那就去吧,但你应该在做出任何设计决策/写作之前这个过程你不想使用的代码。

祝你好运!

答案 2 :(得分:5)

如果我理解正确,您的任务与Collaborative filtering有关。有许多可能的方法来解决这个问题;我建议你按照维基百科页面概述你可以选择的主要方法。

对于您的项目工作,我建议使用简单的BackProp NN实现和分类示例来查看Python based intro to Neural Networks。这不是“解决方案”,但也许您可以在不需要更大框架的情况下从该示例构建系统。

答案 3 :(得分:4)

您可能需要查看PyBrain

答案 4 :(得分:1)

FANN库看起来也很有希望。

答案 5 :(得分:1)

我不确定神经网络是否是解决此问题的最佳方法。我认为欧几里德距离得分或皮尔逊相关分数与基于项目或用户的过滤相结合将是一个良好的开端。

关于这个主题的优秀书籍是:Programming Collective Intelligence from Toby Segaran