【问题标题】:scikit-learn: classifying texts using custom labelsscikit-learn:使用自定义标签对文本进行分类
【发布时间】:2017-04-07 17:15:49
【问题描述】:

我有大量标记为posneg 的单词训练集来对文本进行分类。我使用 TextBlob(根据this tutorial)对文本进行分类。虽然它工作得相当好,但对于大型训练集(例如 8k 单词)来说可能会非常慢。

我想尝试使用scikit-learn 执行此操作,但我不确定从哪里开始。上面的教程在scikit-learn 中会是什么样子?我还希望训练集包含某些单词的权重。有些应该几乎可以保证特定文本被归类为“正面”,而另一些则保证它被归类为“负面”。最后,有没有办法暗示分析文本的某些部分比其他部分更有价值?

任何指向现有教程或文档的指针表示赞赏!

【问题讨论】:

    标签: python scikit-learn nlp naivebayes


    【解决方案1】:

    Sebastian Raschka's Python Machine Learning book 中有一个关于这个主题的精彩章节,代码可以在这里找到:https://github.com/rasbt/python-machine-learning-book/blob/master/code/ch08/ch08.ipynb

    他对 IMDB 数据集进行情绪分析(您正在尝试做的事情)。他的数据不像你的那么干净——从表面上看——所以他需要做更多的预处理工作。您的问题可以通过以下步骤解决:

    1. 通过矢量化文本来创建数字特征:http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.HashingVectorizer.html

    2. 训练测试拆分:http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html

    3. 训练和测试您最喜欢的模型,例如:http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html

    【讨论】:

    • 好资源,谢谢;我确实需要买那本书!一个问题:如果我的训练集实际上只是用布尔值标记的单个单词(不管每个代表什么),是否仍然可以构建一个分类器用于多句子文本?我的印象是,模型通过分析整个文本、创建概率表然后对输入文本应用集合启发式来工作。
    • 散列矢量化器使用 TF-IDF 为单词分配数值。 TF 部分只关心每个样本 - 所以每个样本都是 1。 IDF 部分将每个样本与所有样本进行比较,这就是创建数字特征的方式。由于您将尝试从单个数字特征预测情绪,因此您可以叠加直方图(按情绪着色)并在训练任何模型之前查看它的工作情况。
    【解决方案2】:

    有很多方法可以做到这一点,例如 Tf-Idf(词频 - 逆文档频率)、计数向量器、潜在语义分析 (LSA)、潜在狄利克雷分配 (LDA)、Word2Vec。

    在上述所有方法中,Word2Vec 是最好的方法。您可以使用 Google 为 Word2Vec 提供的预训练模型,可在以下网址获得:

    https://github.com/mmihaltz/word2vec-GoogleNews-vectors

    【讨论】:

      猜你喜欢
      • 2015-02-05
      • 2015-07-05
      • 2016-05-16
      • 2018-07-27
      • 2017-08-08
      • 2016-10-17
      • 2019-10-08
      • 2014-10-02
      • 1970-01-01
      相关资源
      最近更新 更多