【问题标题】:twitter/facebook comments classification into various categoriestwitter/facebook 评论分类成不同的类别
【发布时间】:2014-11-30 13:13:57
【问题描述】:

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

jewelries, clothes, shoes, electronics, food & beverages

所以如果有人谈论猪肉、牛排、葡萄酒、苏打水,吃:它归类为 f&b

而如果有人谈论说 - 黄金,吊坠,小盒等:它被归类为珠宝

我想知道,我应该在评论/推文中寻找哪些标签/令牌,以便将其分类为这些类别中的任何一个。最后使用哪个分类器。我只是需要一些指导和建议,我会从那里得到它。

请帮忙。谢谢

【问题讨论】:

  • 试试https://class.coursera.org/nlp/lecture,先了解(un)supervised machine learning
  • 请告诉我们一个有效的单词距离:)。同义词图除外。
  • 谢谢@alvas,我刚开始看他们。谢谢!!

标签: python facebook twitter machine-learning nltk


【解决方案1】:

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

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

在这一步之后,您应该有一个分类器,它将您检索到的单词映射到某个类。 NTLK 也有与知识数据库相关联的分类工具。如果幸运的话,您正在寻找的类别已经可用;否则您可能必须自己构建它们。您可以查看使用 NTLK 和 WordNet 数据库的this example。您可以访问 Synset,它似乎相当广泛;您还可以查看超集(例如参见 list(dog.closure(hyper)) )。

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

祝你好运!

【讨论】:

  • 嗨,flav,您提到了 NLTK-“知识数据库”。您能否指出 nltk 中的特定工具/库,或者可能是具有此“知识数据库”信息的 nltk 章节?如果你能在这方面指导我,我会自己回去探索更多。顺便说一句,感谢您的建议。指导正是我所需要的。再次感谢 !!!!干杯
  • 好的 Flav。我很高兴潜入。感谢您的指导!!
【解决方案2】:

您正在寻找的主题是

  • 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 cmets(我们从现在开始称它们为文档),手动标记了您想要的类别

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

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

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

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

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

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

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

【讨论】:

  • 与 WordNet 等已经内置语义关系的数据库相比,在我看来这有点过头了。我完全支持这种机器学习技术,但是当涉及到一些主观性技能时,它们会更有效例如,在对“好”或“坏”的 cmets 进行分类时会使用它。充其量你的表现会比一个完善的数据库更差。
  • 谢谢@alvas 我也会在这条路上工作。非常感谢大家的指导和支持。干杯!!!
【解决方案3】:

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

监督与非监督

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

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

使用什么?

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

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

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

特征工程

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

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

  • 标记化这会将您的文本分解为单词列表。您可以使用this 模块。
  • 停用词删除这将从标记中删除常用词。单词喜欢'a',the',...你可以看看this
  • Stemming 词干会将单词转换成它们的stem 形式。例如:单词“working”、“worked”、“works”将转换为“work”。看看this

现在,如果您已经对数据进行了预处理,则为文档中存在的每个单词生成一个特征集。对此存在自动方法和过滤器,但我不确定如何在 Python 中执行此操作。

分类

有多个分类器可用于此目的。我建议深入了解现有的分类器及其好处。您可以使用支持多分类的 nltk 分类器,但老实说,我以前从未尝试过。过去我使用过 Logistic 回归SVM

培训和测试

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

预测

一旦您的模型建立并且“测试数据”的预测结果是合理的。您可以在野外使用您的模型来预测新 Facebook 消息/推文的类别。

工具

NLTK 库非常适合预处理和自然语言处理,但我以前从未将它用于分类。我听说过很多关于 scikit python library 的好消息。但老实说,我更喜欢使用Weka,这是一个用java编写的数据挖掘工具,提供了一个很棒的用户界面,它可以大大加快你的任务!


换个角度:主题建模

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

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

现在我不会对此进行更深入的讨论,如果您想了解更多信息,只需在 Google 上搜索即可。另外你可以考虑使用MALLET,它是一个很好的主题建模工具。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-30
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 2016-12-23
    • 1970-01-01
    • 2012-10-11
    相关资源
    最近更新 更多