我有大约500字的短篇小说,我想将它们分为20个类别中的一个:
我可以对其中的一些进行手工分类,但我想实现机器学习以最终猜测类别。什么是最好的方法来解决这个问题?我应该使用机器学习的标准方法吗?我认为决策树不会很好,因为它是文本数据......我在这个领域是全新的。
任何帮助将不胜感激,谢谢!
答案 0 :(得分:24)
naive Bayes最有可能适合您。方法是这样的:
训练:
决定:
答案 1 :(得分:10)
我已经分类了成千上万的短文。我最初做的是使用tf-idf向量空间模型,然后对这些向量进行k均值聚类。这是探索性数据分析的一个非常好的初始步骤,可以很好地处理您的数据集。我用来聚类的包是cluto:http://glaros.dtc.umn.edu/gkhome/views/cluto/
要做tf-idf,我只是在perl中写了一个快速脚本来标记非字母数字。然后,每个文件都包含一个单词。每个文档都表示为它包含的单词的向量。向量的每个索引的值是术语频率(tf)*逆文档频率(idf)。它只是文档中该单词/术语计数乘以包含该单词的文档分数的倒数的乘积。 (因为像“the”这样的词语非常缺乏信息。)
这种方法可以快速达到80%-90%的准确率。然后,您可以手动标记正确的(或更重要的是:错误的),然后在您选择时进行监督学习。
答案 2 :(得分:6)
我认为论文“自动文本分类中的机器学习”(可以谷歌和下载PDF文件)值得一读。本文讨论了两个关键部分:一个用于特征选择(将文本转换为特征空间),另一个用于在特征空间上构建分类器。
有很多特征选择方法,以及几种分类方法(决策树,朴素贝叶斯,kNN,SVM等)。您可以尝试使用某种组合来查看它是否适用于您的数据集
之前我做过类似的事情,我使用Python进行文本操作,功能选择和功能加权。和Orange分类器。 Orange和Weka已经包含了朴素的贝叶斯,kNN ......,但是现在我可能直接用Python脚本编写分类器,它也不应该太难。
希望这会有所帮助。
答案 3 :(得分:3)
大多数人会说统计文本分析(如朴素的贝叶斯方法)是标准方法:“统计自然语言处理的基础”,Manning和Schuetze以及“语音和语言处理”,Jurafsky和Martin是标准参考。统计文本分析成为90年代后期的标准方法,因为它们很容易超越符号系统。然而,一些符号系统包含统计元素,您也可以实际使用连接主义方法(有一些论文证明了这一点)。你也可以使用余弦相似性(k-Nearest Neighbor的一种形式),虽然天真的贝叶斯通常是表现最好的。
以下是一个很好的概述:http://www.cs.utexas.edu/users/hyukcho/classificationAlgorithm.html我在该网页上提到的彩虹用于我在dot com项目上编写的搜索引擎原型上的文本分类。
答案 4 :(得分:2)
除非您将来有可能再进行500次分类,否则我不确定是否会采用机器学习方法。
除非类别非常相似(以“食物”和“意大利食物”为例),我认为一个非常天真的启发式方法可以很好地运作。
对于每个类别,建立一个常用词汇表(用于食物:“马铃薯”,“食物”,“厨师”,“番茄”,“餐馆”,...)以及每个文本计数哪个类别得到最多单词匹配。 您可以手动构建字典(例如100个),然后手动对其进行分类,然后让算法挑出单词,然后确保删除所有集合之间通用的单词(因为它们不是没有提供信息)。从本质上讲,这是一个非常简单的“学习”系统。
如果您真的想要机器学习系统,可以使用多种方法进行分类。缺点是虽然大多数方法实现起来都很简单,但难点在于选择一种好的方法,正确的特性和良好的参数。
答案 5 :(得分:2)
尝试Weka ...它是一个免费的数据挖掘工具,可以实现许多机器学习算法。它有一个GUI和一个API,因此您可以直接在数据集上使用它,也可以对它进行编程。
如果您喜欢各种机器学习算法的结果,并且您仍然对实现自己的算法感兴趣,那么您可以实现您最喜欢的算法。这也可以帮助你删除在构建ML / AI算法之前通常会得到的“它实际上会有效”的感觉。
答案 6 :(得分:1)
我们可以在这里使用NLP。以下是我实施的在不同类别中对电子邮件进行分类的步骤: 1.词形还原:这将删除不必要的细节,并将所有单词转换为基本形式或根形式。比如,它会将工作转化为工作,跑步,马匹转为马等。我们可以为此目的使用Stanford Lemmatizer。 http://stanfordnlp.github.io/CoreNLP/
Wordnet过滤:我们只能使用Wordnet中存在的那些词。我为此目的使用了Java Wordnet接口。只需过滤掉wordnet中找不到的单词,然后取出其余的单词。 http://projects.csail.mit.edu/jwi/
查找同义词和更多同义词:对于上述5或6个类别中的每一个,形成包含这些类别的同义词的同义词的单独集合。例如,形成一个包含娱乐同义词的集合,然后是发现的娱乐同义词的进一步同义词。我们也可以使用网络抓取来增加此设置。
答案 7 :(得分:0)
如果您正在寻找现成的东西,您可能想在SQL Server中尝试Microsoft的数据挖掘算法:
http://msdn.microsoft.com/en-us/library/ms175595%28v=SQL.100%29.aspx