基于神经网络的文档排序

13 投票
6 回答
3792 浏览
提问于 2025-04-17 03:05

我打算做一个文档排名系统,想用神经网络来实现。请问怎么能根据相似文章的评分来给文档打分呢?有没有好的Python库可以用来做这个?还有,能推荐一本关于人工智能的好书吗,最好里面有Python代码。

补充说明

我计划做一个推荐引擎,这个引擎会根据相似用户的推荐以及使用标签聚类的数据来给出建议。用户可以对文章进行投票。大概会有十万篇文章。文档会根据它们的标签进行聚类。给定一个关键词后,会根据标签提取相关文章,然后通过神经网络进行排名。

6 个回答

5

如果我理解得没错,你的任务和协同过滤有关。这个问题有很多种解决方法;我建议你去看看维基百科的页面,了解一下你可以选择的主要方法。

对于你的项目,我建议你看看基于Python的神经网络入门,里面有一个简单的反向传播神经网络实现和一个分类的例子。这不是“唯一”的解决方案,但也许你可以从这个例子出发,自己构建系统,而不需要一个更复杂的框架。

6

软件包

如果你不打算使用神经网络,我之前用支持向量机(SVM)效果不错,k均值聚类也可能对你有帮助。这两者都可以通过Milk这个工具来实现。它还提供逐步判别分析,用于特征选择,如果你想根据主题找到相似的文档,这个功能绝对会对你有用。

如果你选择这个方向,真是需要上天保佑,不过ROOT框架有一个强大的机器学习包叫TMVA,它提供了很多分类方法,包括SVM、神经网络和增强决策树(这也可能是个不错的选择)。我没有使用过它,但pyROOT可以让你在Python中使用ROOT的功能。说实话,我第一次使用ROOT时对C++一无所知,概念上也很迷茫,所以这对你来说可能会很棒。ROOT有大量的数据处理工具。

(顺便提一下,我也写过一个相当准确的文档语言识别器,使用了卡方特征选择和余弦匹配。显然你的问题更复杂,但考虑到你可能不需要那么复杂的工具。)

存储与处理

你在问题中提到:

...文章会根据标签被提取,并通过神经网络进行排名。

另外一个要注意的事情是,机器学习中的训练和评估过程通常需要一些时间。你可能应该考虑对每个标签只进行一次文档排名(假设你知道所有标签),然后把结果存储起来。一般来说,机器学习更倾向于使用更多的存储空间,而不是更多的处理时间。

现在说说你的具体情况。你没有说明有多少个标签,我们假设你有1000个标签,这样比较好算。如果你为每个标签存储每个文档的排名结果,那你需要存储1亿个浮点数。这是一个庞大的数据量,计算这些数据会花费一些时间,但提取这些数据非常快。如果你选择每次都重新计算每个文档的排名,那你就得为每个标签进行1000次计算。根据你进行的操作类型和文档的大小,这可能需要几秒到几分钟。如果这个过程简单到你可以耐心等待代码完成多次评估而不觉得无聊,那就去做吧,但在做任何设计决策或编写你可能不想用的代码之前,最好先测量一下这个过程的时间。

祝你好运!

12

你想解决的问题叫做“协同过滤”。

神经网络

一种先进的神经网络方法是 深度信念网络限制玻尔兹曼机。如果你想要一个快速的Python实现,可以在GPU上运行(使用CUDA),可以查看 这里。另外一个选择是 PyBrain

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

  • 这可能是神经网络和协同过滤(电影推荐)领域的最先进研究:

    Salakhutdinov, R., Mnih, A. Hinton, G, 限制玻尔兹曼机在协同过滤中的应用,发表于2007年国际机器学习大会论文集。PDF

  • 一个用Python实现的霍普菲尔德网络:

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

  • 关于使用限制玻尔兹曼机的协同过滤的论文(他们说Python不太适合这个工作):

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

目前,神经网络并不是协同过滤领域的最先进技术,也不是最简单、最常用的解决方案。关于你提到的使用神经网络的原因是数据太少,实际上神经网络在这种情况下并没有固有的优势或劣势。因此,你可能想考虑一些更简单的机器学习方法。

其他机器学习技术

现在最好的方法是结合 k-近邻算法矩阵分解

如果你坚持使用Python,可以看看 pysuggest(一个SUGGEST推荐引擎的Python封装)和 PyRSVD(主要用于协同过滤,特别是Netflix比赛)。

如果你愿意尝试其他开源技术,可以查看:开源协同过滤框架http://www.infoanarchy.org/en/Collaborative_Filtering

撰写回答