twitter/facebook评论分类成不同的类别

2024-04-28 15:58:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些评论数据集,我想把它们分为五类:

jewelries, clothes, shoes, electronics, food & beverages

所以,如果有人谈论猪肉、牛排、葡萄酒、苏打水,那就吃吧:它分为餐饮类

然而,如果有人在谈论黄金、吊坠、项链盒等,那就归为珠宝了

我想知道,我应该在评论/tweet中寻找什么标签/令牌,以便将其分类到这些类别中的任何一个。最后使用哪个分类器。我只需要一些指导和建议,我就从那里开始。在

请帮忙。谢谢


Tags: 数据food评论餐饮tweet黄金葡萄酒项链
3条回答

嗯,这是一个很大的课题。在

您提到了Python,所以您应该看看NLTK library,它允许您处理自然语言,例如您的注释。在

在这一步之后,您应该有一个分类器,它将您检索到的单词映射到某个类。NTLK还提供了与知识数据库链接的分类工具。如果幸运的话,您要查找的类别已经可用;否则您可能需要自己构建它们。您可以看看使用NTLK和WordNet数据库的this example。您可以访问Synset,它似乎非常广泛;还可以查看hyperset(参见示例列表(狗。关闭(超)))。在

基本上你应该考虑在整个标记化的文本上使用multiclassifier(Facebook和tweets上的评论通常很短)。你也可以决定只考虑200个字符以下的FB评论,这是你的选择)。选择多分类器的动机在于分类集的非正交性(衣服、鞋子和珠宝可以是同一对象;您可以拥有电子珠宝[例如智能手表]等)。这是一个相当简单的设置,但这是一个有趣的第一步,它的优点和缺点将允许您轻松迭代(如果需要)。在

祝你好运!在

这个答案可能有点长,也许我抽象了一些东西,但它只是给你一个想法和一些建议。在

有监督与无监督

正如其他人已经提到的,在机器学习领域有两条主要道路:有监督的无监督的学习。正如你现在可能已经知道的,如果你的语料库(文档)被标记,你所说的就是监督学习。标签是类别,在本例中是布尔值。 例如,如果一个文本与衣服和鞋子有关,那么这些类别的标签应该是真的。在

因为一个文本可以与多个类别(多个标签)相关,所以我们正在研究多分类器。在

使用什么?

我假设数据集还没有被标记,因为twitter没有为您进行这种分类。所以你要做出一个重大决定。在

  1. 您手动标记数据,这意味着您尝试在数据集中查看尽可能多的tweets/fb消息,对于每一条,您考虑5个类别,并用True/False回答它们。在
  2. 你决定使用一个无监督的学习算法,并希望你发现这5个类别。因为像集群这样的方法只会尝试自己查找类别,而这些方法在默认情况下不必与您预先定义的5个类别相匹配。在

我在过去使用了不少监督式学习,并且对这种学习方式有很好的经验,因此我将继续解释这条道路。在

功能工程

你必须想出你想使用的功能。对于文本分类,一个好的方法是使用文档中的每个可能的单词作为特征。值True表示文档中是否存在该单词,false表示不存在。在

在执行此操作之前,您需要进行一些预处理。这可以通过使用NLTK库提供的各种特性来实现。在

  • 标记化这将把你的文本分解成一个单词列表。您可以使用this模块。在
  • 停止字删除这将从标记中删除常用词。像“a”,“the”,“the”这样的词,。。。你可以看看this。在
  • 词干提取将把单词转换成词干形式。例如:单词'working'、'worked'、'works'将转换为'work'。看看this。在

现在,如果您已经对数据进行了预处理,那么就为文档中存在的每个单词生成一个featureset。有自动的方法和过滤器来实现这一点,但我不确定如何在Python中实现这一点。在

分类

有多个分类器可用于此目的。我建议更深入地看一看那些存在的福利。你可以使用支持多分类的nltk分类器,但说实话,我以前从未尝试过。在过去,我使用了Logistic回归SVM。在

培训和测试

您将使用一部分数据进行培训,另一部分用于验证经过培训的模型是否表现良好。我建议您使用交叉验证,因为您将拥有一个小数据集(您必须手动标记数据,这很麻烦)。交叉验证的好处是不必将数据集拆分为训练集和测试集。相反,它将在多个回合中运行,并遍历零件训练数据和零件测试数据的数据。导致所有数据在您的培训数据中至少使用一次。在

预测

一旦你的模型被建立并且对“测试数据”的预测结果是可信的。你可以在野外使用你的模型来预测新的Facebook消息/twe的类别埃茨。在

工具

NLTK库对于预处理和自然语言处理来说非常好,但是我以前从未使用过它来进行分类。我听说过很多关于scikitpythonlibrary的好消息。但老实说,我更喜欢使用Weka,这是一个用java编写的数据挖掘工具,它提供了一个很棒的UI,可以大大加快您的任务执行速度!在


从另一个角度:主题建模

在您的问题中,您声明要将数据集分为五类。我想向你展示主题建模的想法。如果你真的只针对这些类别,那么它在你的场景中可能没有什么用处(这就是为什么我在回答的最后留下这一部分)。但是,如果您的目标是将tweets/fb消息分类到非预定义的类别中,那么主题建模是一种方法。在

主题建模是一种无监督的学习方法,您可以预先决定要“发现”的主题(类别)的数量。这个数字可能很高(例如40),现在最酷的事情是算法将找到40个主题,其中包含有相关内容的单词。它还将为每个文档输出一个分发,以指示文档与哪些主题相关。这样你可以发现比你预先定义的5个类别更多的类别。在

现在我不打算再深入研究这个问题了,如果你想了解更多的信息,就去谷歌一下。此外,您可以考虑使用MALLET,这是一个很好的主题建模工具。在

你要找的是

  • Natural Language Processing(NLP):处理文本数据和
  • Machine learning(在这里建立分类模型)

首先,我建议先阅读NLP教程,然后再阅读文本分类教程,最合适的是https://class.coursera.org/nlp/lecture

如果您正在查找pythonjava中可用的库,请查看Java or Python for Natural Language Processing

如果您不熟悉文本处理,请查看NLTK库,它提供了一个很好的NLP操作的介绍,请参见http://www.nltk.org/book/ch01.html


现在是核心细节:

  1. 首先,问问你自己是否有twitter/facebook评论(从现在起称之为文档),这些评论被手动标记为你想要的类别。在

    1a.如果,请查看有监督的机器学习,参见http://scikit-learn.org/stable/tutorial/basic/tutorial.html

    1b.如果没有,看看无监督机器学习,我建议使用聚类和主题建模http://radimrehurek.com/gensim/

  2. 在知道您需要哪种机器学习之后,将文档拆分为至少培训(70-90%)和测试(10-30%)集,请参阅

    注意。我建议至少,因为还有其他方法可以分割文档,例如用于开发或交叉验证。(如果您不明白这一点,没关系,只需执行步骤2)

  3. 最后,训练和测试您的模型

    3a.如果监督,则使用训练集来训练您的监督模型。将你的模型应用到测试集中,然后看看你的表现如何。在

    3b.如果无监督,则使用训练集生成文档簇(即对相似的文档进行分组),但它们仍然没有标签。因此,您需要想出一些聪明的方法来正确地标记文档组。(到目前为止,还没有真正好的解决方案,即使是超高效的神经网络也无法知道神经元在发射什么,他们只知道每个神经元在发射特定的东西)

相关问题 更多 >