Java 如何对使用lucene索引的文档进行分类
我用Lucene对一组文档进行了分类(字段:内容、类别)。每个文档都有自己的类别,但其中一些文档被标记为未分类。在java中有什么方法可以轻松地对这些文档进行分类吗?分类是机器学习/统计领域的一个广泛问题。在阅读了您的问题之后,我觉得您使用了某种SQL group by子句(尽管是在Lucene中)。如果您希望机器对文档进行分类,那么您需要了解机器学习算法,如神经网络、贝叶斯、SVM等。Java中有用于这些任务的优秀库。为了实现这一点,您需要特征(从数据中提取的一组属性),您可以在这些特征上训练您的算法,以便它可以预测您的分类标签 Java中有一些很好的API(它允许您专注于代码,而不必过多地理解这些算法背后的数学理论,尽管如果您知道这将非常有利)。韦卡很好。我还看到了曼宁的几本书,它们很好地处理了这些任务。给你: 第10章(分类)行动中的集体智慧: 第五章智能网算法分类: 这些绝对是很棒的分类材料(对于Java用户来说),特别适合那些不想深入研究这个理论(虽然非常重要:)并且很快就想要一个工作代码的人Java 如何对使用lucene索引的文档进行分类,java,lucene,machine-learning,classification,Java,Lucene,Machine Learning,Classification,我用Lucene对一组文档进行了分类(字段:内容、类别)。每个文档都有自己的类别,但其中一些文档被标记为未分类。在java中有什么方法可以轻松地对这些文档进行分类吗?分类是机器学习/统计领域的一个广泛问题。在阅读了您的问题之后,我觉得您使用了某种SQL group by子句(尽管是在Lucene中)。如果您希望机器对文档进行分类,那么您需要了解机器学习算法,如神经网络、贝叶斯、SVM等。Java中有用于这些任务的优秀库。为了实现这一点,您需要特征(从数据中提取的一组属性),您可以在这些特征上训练
集体智能行动解决了使用JDM和Weka进行分类的问题。因此,请在您的任务中查看这两个方面。是的,您可以使用相似性查询,例如由实现的,用于这类事情(假设您的lucene索引的文档中有一些较大的文本字段)。查看底层的javadoc,了解其工作原理的详细信息 要将lucene索引转换为文本分类器,您有两个选项:
termVectors=true
用于python的sunburnt Solr客户端能够执行mlt查询。下面是一个原型python分类器,它使用Solr通过维基百科类别索引进行分类:
从Lucene 5.2.1开始,您可以使用。Lucene提供了一个开箱即用的朴素贝叶斯分类器、一个k-最近邻分类器(基于类)和一个基于感知器的分类器
缺点是,所有这些类都标有实验性警告,并附有指向维基百科的链接。当然,我可以从Lucene生成的索引中提取特征。让我看看这本书,我会回来的;)我认为许多ML的问题在于,它们产生单标签分类,而多标签分类是理想的。我可能错了,但Weka很好地实现了这一点。其余的似乎不是他们做的。谢谢你的建议,但是有大约10^6个文档需要分类,第一个选项好吗?我认为第一个选项更容易实现:你不需要在索引中添加任何新对象。如果它对您的应用程序来说不够好,也可以尝试后者。我没有足够的经验来确定。要分批对这么多示例进行分类可能需要一些时间。根据max query term上的数字(我使用30),如果使用shingle和索引中具有类别的文档数量,单个查询时间可能相当长,比如300ms。训练mahout SGD分类器并在一次性特征提取上批量预测可能会更快。