<p>这个答案可能有点长,也许我抽象了一些东西,但它只是给你一个想法和一些建议。在</p>
<h2><strong>有监督与无监督</strong></h2>
<p>正如其他人已经提到的,在机器学习领域有两条主要道路:<strong>有监督的</strong>和<strong>无监督的</strong>学习。正如你现在可能已经知道的,如果你的语料库(文档)被标记,你所说的就是监督学习。标签是类别,在本例中是布尔值。
例如,如果一个文本与衣服和鞋子有关,那么这些类别的标签应该是真的。在</p>
<p>因为一个文本可以与多个类别(多个标签)相关,所以我们正在研究多分类器。在</p>
<h2><strong>使用什么?</strong></h2>
<p>我假设数据集还没有被标记,因为twitter没有为您进行这种分类。所以你要做出一个重大决定。在</p>
<ol>
<li>您手动标记数据,这意味着您尝试在数据集中查看尽可能多的tweets/fb消息,对于每一条,您考虑5个类别,并用True/False回答它们。在</li>
<li>你决定使用一个无监督的学习算法,并希望你发现这5个类别。因为像集群这样的方法只会尝试自己查找类别,而这些方法在默认情况下不必与您预先定义的5个类别相匹配。在</li>
</ol>
<p>我在过去使用了不少<strong>监督式学习</strong>,并且对这种学习方式有很好的经验,因此我将继续解释这条道路。在</p>
<h2><strong>功能工程</strong></h2>
<p>你必须想出你想使用的功能。对于文本分类,一个好的方法是使用文档中的每个可能的单词作为特征。值True表示文档中是否存在该单词,false表示不存在。在</p>
<p>在执行此操作之前,您需要进行一些<strong>预处理</strong>。这可以通过使用NLTK库提供的各种特性来实现。在</p>
<ul>
<li><strong>标记化</strong>这将把你的文本分解成一个单词列表。您可以使用<a href="http://www.nltk.org/api/nltk.tokenize.html" rel="nofollow noreferrer">this</a>模块。在</li>
<li><strong>停止字删除</strong>这将从标记中删除常用词。像“a”,“the”,“the”这样的词,。。。你可以看看<a href="https://stackoverflow.com/questions/5486337/how-to-remove-stop-words-using-nltk-or-python">this</a>。在</li>
<li>词干提取将把单词转换成词干形式。例如:单词'working'、'worked'、'works'将转换为'work'。看看<a href="http://www.nltk.org/api/nltk.stem.html" rel="nofollow noreferrer">this</a>。在</li>
</ul>
<p>现在,如果您已经对数据进行了预处理,那么就为文档中存在的每个单词生成一个featureset。有自动的方法和过滤器来实现这一点,但我不确定如何在Python中实现这一点。在</p>
<h2><strong>分类</strong></h2>
<p>有多个分类器可用于此目的。我建议更深入地看一看那些存在的福利。你可以使用支持多分类的<em>nltk分类器</em>,但说实话,我以前从未尝试过。在过去,我使用了<em>Logistic回归</em>和<em>SVM</em>。在</p>
<p><strong>培训和测试</strong></p>
<p>您将使用一部分数据进行培训,另一部分用于验证经过培训的模型是否表现良好。我建议您使用<strong>交叉验证</strong>,因为您将拥有一个小数据集(您必须手动标记数据,这很麻烦)。交叉验证的好处是不必将数据集拆分为训练集和测试集。相反,它将在多个回合中运行,并遍历零件训练数据和零件测试数据的数据。导致所有数据在您的培训数据中至少使用一次。在</p>
<p><strong>预测</strong></p>
<p>一旦你的模型被建立并且对“测试数据”的预测结果是可信的。你可以在野外使用你的模型来预测新的Facebook消息/twe的类别埃茨。在</p>
<h2><strong>工具</strong></h2>
<p>NLTK库对于预处理和自然语言处理来说非常好,但是我以前从未使用过它来进行分类。我听说过很多关于<code>scikit</code>python<a href="http://scikit-learn.org/stable/" rel="nofollow noreferrer">library</a>的好消息。但老实说,我更喜欢使用<a href="http://www.cs.waikato.ac.nz/ml/weka/" rel="nofollow noreferrer">Weka</a>,这是一个用java编写的数据挖掘工具,它提供了一个很棒的UI,可以大大加快您的任务执行速度!在</p>
<hr/>
<h2><strong>从另一个角度:主题建模</strong></h2>
<p>在您的问题中,您声明要将数据集分为五类。我想向你展示主题建模的想法。如果你真的只针对这些类别,那么它在你的场景中可能没有什么用处(这就是为什么我在回答的最后留下这一部分)。但是,如果您的目标是将tweets/fb消息分类到非预定义的类别中,那么主题建模是一种方法。在</p>
<p>主题建模是一种<strong>无监督的学习方法,您可以预先决定要“发现”的主题(类别)的数量。这个数字可能很高(例如40),现在最酷的事情是算法将找到40个主题,其中包含有相关内容的单词。它还将为每个文档输出一个分发,以指示文档与哪些主题相关。这样你可以发现比你预先定义的5个类别更多的类别。在</p>
<p>现在我不打算再深入研究这个问题了,如果你想了解更多的信息,就去谷歌一下。此外,您可以考虑使用<a href="http://mallet.cs.umass.edu" rel="nofollow noreferrer">MALLET</a>,这是一个很好的主题建模工具。在</p>