基于神经网络的文档排名

jvc*_*jvc 13 python machine-learning neural-network

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

编辑

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

cyb*_*org 12

您尝试解决的问题称为"协作过滤".

神经网络

一种最先进的神经网络方法是Deep Belief NetworksRestricted Boltzman Machines.有关GPU(CUDA)的快速python实现,请参见此处.另一种选择是PyBrain.

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

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

    Salakhutdinov,R.,Mnih,A.Hinton,G,限制性玻尔兹曼机器协同过滤,将出现在第24届国际机器学习会议论文集2007年 .PDF

  • 用Python实现的Hopfield网络:

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

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

    G. Louppe.协同过滤:使用受限制的Boltzmann机器的可扩展方法.硕士论文,列日大学,2010年
    .PDF

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

其他机器学习技巧

今天最好的方法是混合k-Nearest NeighborsMatrix Factorization.

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

如果你是开放的尝试其他开源技术看:开源协同过滤的框架http://www.infoanarchy.org/en/Collaborative_Filtering.


and*_*kus 6

如果你没有致力于神经网络,我对SVM运气好,而k-means聚类也可能有所帮助.这两者都是由Milk提供的.它还对特征选择进行逐步判别分析,如果您尝试按主题查找类似文档,这对您肯定会有用.

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

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

存储与处理

你在问题中提到:

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

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

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

祝好运!


nau*_*ghi 5

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

对于您的项目工作,我可以建议使用简单的BackProp NN实现和分类示例查看基于Python的神经网络简介.这不是"解决方案",但也许您可以在不需要更大框架的情况下从该示例构建系统.