【问题标题】:Text Preprocessing for classification - Machine Learning用于分类的文本预处理 - 机器学习
【发布时间】:2018-12-01 20:57:23
【问题描述】:

预处理我们的 Twitter 文本以在二进制类之间进行分类的重要步骤是什么。我所做的是我删除了标签并保留它没有标签,我还使用了一些正则表达式来删除特殊字符,这是我使用的两个函数。

def removeusername(tweet):
    return " ".join(word.strip() for word in re.split('@|_', tweet))
def removingSpecialchar(text):
    return ' '.join(re.sub("(@[A-Za-z0-9]+)|([^0-9A-Za-z \t])|(\w+:\/\/\S+)"," ",text).split())

还有什么可以预处理文本数据。我还使用 nltk 停用词语料库从标记词中删除所有停用词。

我在 textblob 中使用 NaiveBayes 分类器来训练数据,我在训练数据上获得了 94% 的准确率,在测试数据上获得了 82% 的准确率。我想知道是否有任何其他方法可以获得良好的准确性。顺便说一句,我是这个机器学习领域的新手,我对这一切的了解有限!

【问题讨论】:

  • 您使用的是 tf-idf 模型(词袋)还是一些基于嵌入向量的技术?
  • 不,我没有使用 tf-idf,我只是使用 CountVectorizer 来提取特征!是否必须使用 tf-idf?

标签: python machine-learning textblock text-classification naivebayes


【解决方案1】:

那么,您可以从使用您的词汇量开始。您可能会排除一些在数据中过于频繁的词(不被视为停用词)。并且也对仅出现在一条推文中的单词(例如拼写错误的单词)执行相同的操作。 Sklearn CountVectorizer 允许以简单的方式做到这一点,看看 min_dfmax_df 参数。

由于您使用的是推文,因此您还可以考虑 URL 字符串。尝试从链接中获取一些有价值的信息,有很多不同的选择,从基于正则表达式的简单东西检索页面的域名到更复杂的基于 NLP 的研究链接内容的方法。再次由您决定!

我还会看一下代词(如果您使用的是 sklearn),因为默认情况下会将它们全部替换为关键字 -PRON- 。这是一个经典的解决方案,可以简化事情,但可能会导致信息丢失。

【讨论】:

    【解决方案2】:

    对于原始数据的预处理,可以尝试:

    • 停用词删除。
    • 词干化或词形还原。
    • 排除太常见或太少见的字词。

    然后可以进行第二步预处理:

    • 构造一个 TFIDF 矩阵。
    • 构造或加载预训练的 wordEmbedding(Word2Vec、Fasttext、...)。

    然后您可以将第二步的结果加载到您的模型中。

    这些只是最常见的“方法”,还有很多其他的。

    我会让你自己检查这些方法,但这是一个很好的基础。

    【讨论】:

      【解决方案3】:

      没有强制性步骤。例如,删除“yes”、“no”、“with”等停用词(也称为功能词)是很常见的。但是 - 在我的一个管道中,我跳过了这一步,准确性没有改变。 NLP 是一个实验领域,因此最重要的建议是构建一个尽可能快地运行的管道,定义您的目标,并使用不同的参数进行训练。

      在继续之前,您需要确保您的训练集是正确的。你在训练什么?你的设置是否干净(例如正面只有正面)?您如何定义准确性以及为什么?

      现在,您描述的情况似乎是过度拟合的情况。为什么?因为你在训练集上获得了 94% 的准确率,但在测试集上只有 82%。

      当您有很多特征但训练数据集相对较小时会出现此问题 - 因此该模型最适合特定训练集但无法泛化。

      现在,您没有指定您的数据集有多大,所以我猜测在 50 到 500 条推文之间,考虑到大约 200k 单词或更多的英语词汇,这太小了。我会尝试以下选项之一: (1) 获取更多的训练数据(至少2000) (2) 减少特征的数量,例如你可以删除不常见的词、名字——任何只出现很少次数的词 (3) 使用更好的分类器(贝叶斯对于 NLP 来说相当弱)。尝试支持向量机或深度学习。 (4) 尝试正则化技术

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-07
        • 2018-08-18
        • 1970-01-01
        • 2021-04-01
        • 2011-10-04
        • 1970-01-01
        • 2021-06-17
        • 2019-04-27
        相关资源
        最近更新 更多