twitter/facebook评论分为各类

6 python twitter facebook machine-learning nltk

我有一些评论数据集,我想将其分为五类: -

jewelries, clothes, shoes, electronics, food & beverages
Run Code Online (Sandbox Code Playgroud)

因此,如果有人谈论猪肉,牛排,葡萄酒,苏打水,吃:它分类为f&b

然而,如果某些人谈论说 - 金,下垂,小盒子等:它被分类为珠宝

我想知道,我应该在评论/推文中寻找什么标签/代币,以便将其分类为任何这些类别.最后使用哪个分类器.我只需要一些指导和建议,我会从那里接受它.

请帮忙.谢谢

DJa*_*ens 5

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

监督的Vs无监督

正如其他人已经提到的那样,在机器学习领域有两条主要道路:监督无监督学习.正如您现在可能已经知道的那样,如果您的语料库(文档)被标记,那么您正在谈论有监督的学习.标签是类别,在这种情况下是布尔值.例如,如果文本与衣服和鞋子相关,那些类别的标签应该是真实的.

由于文本可以与多个类别(多个标签)相关,因此我们正在研究多分类器.

用什么?

我认为数据集尚未标记,因为twitter不会为您进行此类别分类.所以这是你的一个重大决定.

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

我过去使用过一些监督学习,并且对这种学习有很好的经验,因此我将继续解释这条道路.

特色工程

您必须提供要使用的功能.对于文本分类,一种好的方法是使用文档中的每个可能的单词作为特征.值为True表示文档中是否存在该单词,false表示缺席.

在此之前,您需要进行一些预处理.这可以通过使用NLTK库提供的各种功能来完成.

  • 标记化会将您的文本分解为单词列表.您可以使用模块.
  • 停用词移除,这将删除常用词了记号.单词喜欢'a',',......你可以看看这个.
  • 词干词干会改变的话他们构型中.例如:"工作","工作","工作"等词将转换为"工作".看看这个.

现在,如果您已预处理数据,则为文档中存在的每个单词生成一个功能集.有自动方法和过滤器,但我不知道如何在Python中执行此操作.

分类

您可以使用多个分类器来实现此目的.我建议深入研究那些存在的和它们的好处.你可以使用支持多分类nltk分类器,但说实话我以前从未尝试过那个.在过去,我使用了Logistic回归SVM.

培训和测试

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

预测

一旦你的模型建立起来,"测试数据"的预测结果似乎是合理的.您可以在野外使用您的模型来预测新Facebook消息/推文的类别.

工具

NLTK库非常适合预处理和自然语言处理,但我之前从未使用它进行分类.我听说过很多关于scikitpython 的好东西.但说实话,我更喜欢使用Weka,这是一个用java编写的数据挖掘工具,提供了很好的用户界面,可以加速你的任务!


从不同的角度:主题建模

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

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

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


Fla*_*ois 2

嗯,这是一个很大的话题。

您提到了 Python,所以您应该看看NLTK 库,它允许您处理自然语言,例如您的评论。

完成此步骤后,您应该有一个分类器,它将您检索到的单词映射到某个类别。NTLK 还具有与知识数据库链接的分类工具。如果幸运的话,您正在寻找的类别已经可用;否则你可能必须自己构建它们。您可以看一下这个使用 NTLK 和 WordNet 数据库的示例。你可以访问 Synset,它看起来相当广泛;您还可以查看超集(例如 list(dog.closure(hyper)) )。

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

祝你好运!