scikit-learn 中为文本分类排列文本数据的标准方法是啥?

Posted

技术标签:

【中文标题】scikit-learn 中为文本分类排列文本数据的标准方法是啥?【英文标题】:What is the standard way in scikit-learn to arrange textual data for text classification?scikit-learn 中为文本分类排列文本数据的标准方法是什么? 【发布时间】:2015-02-05 11:48:58 【问题描述】:

我有一个NLP 任务,基本上是有监督的文本分类。我用它的 POS 标签标记了一个语料库,然后我使用 scikit-learn 提供的不同矢量化器来提供 scikit-learn 提供的一些分类算法。我还拥有之前以无监督方式获得的语料库的标签(类别)。

首先我对语料库进行了POS标记,然后我得到了一些不同的二元组,它们具有以下结构:

bigram = [[('word','word'),...,('word','word')]]

显然,我似乎有一切可以分类(我已经准备好用一些小例子分类,但不是所有的语料库)。

我想使用二元组作为特征,以便将它们呈现给分类算法(多项朴素贝叶斯、SVM 等)。

安排所有文本数据以分类和显示分类语料库结果的标准(pythonic)方法是什么?我正在考虑使用 arff files 并使用 numpy 数组,但我想这可能会使任务不必要地复杂化。另一方面,我正在考虑将数据拆分为 train 和 test 文件夹,但我不知道如何在 train 文件夹中设置标签。

【问题讨论】:

【参考方案1】:

你的问题很模糊。您可以访问有关该主题的书籍和课程。 看看这个博客作为开始1和这些课程2和3。

【讨论】:

【参考方案2】:

最简单的选项是load_files,它需要一个目录布局

data/
    positive/     # class label
        1.txt     # arbitrary filename
        2.txt
        ...
    negative/
        1.txt
        2.txt
        ...
    ...

(这并不是真正的标准,它只是方便和习惯。网络上的一些 ML 数据集就是以这种格式提供的。)

load_files 的输出是 dict,其中包含数据。

【讨论】:

感谢您的反馈,我创建了自己的语料库,所以我有几个文件夹(原始文本、post tagged 文本),因为编辑说我想在二元级别进行分类任务。如何以分类可以“理解”的格式指定二元组中的标签(类别),如何制作火车和测试文件:bigram = [[('word','word'),...,('word','word')], 'label']【参考方案3】:

1) larsmans 已经提到了一种方便的方式来安排和存储您的数据。 2) 使用 scikit 时,numpy 数组总是让生活更轻松,因为它们具有许多可以轻松更改数据排列的功能。 3)训练数据和测试数据的标注方式相同。所以你通常会有类似的东西:

bigramFeatureVector = [(featureVector0, label), (featureVector1, label),..., (featureVectorN, label)]

训练数据与测试数据的比例很大程度上取决于数据的大小。您确实应该了解n-fold cross validation。因为它将解决您的所有疑虑,并且很可能您必须使用它来进行更准确的评估。简单解释一下,为了进行 10 倍交叉验证,假设您将拥有一个数组,其中包含所有数据和标签(类似于我上面的示例)。然后在循环运行 10 次时,您将留下十分之一的数据用于测试,其余的用于训练。如果您了解了这一点,那么您就不会对训练或测试数据的外观感到困惑。它们看起来应该完全一样。 4)如何可视化你的分类结果,取决于你想使用什么评估措施。您的问题不清楚,但如果您还有其他问题,请告诉我。

【讨论】:

以上是关于scikit-learn 中为文本分类排列文本数据的标准方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

应用scikit-learn做文本分类

如何使用 scikit-learn 对大文本数据进行分类?

scikit-learn 中分类算法的文本特征输入格式

需要帮助将 scikit-learn 应用于这个不平衡的文本分类任务

如何在 scikit-learn 中正确加载文本数据?

使用 scikit-learn 进行多标签文本分类,使用哪些分类器?