如何使用 n-gram 进行多标签分类?

Posted

技术标签:

【中文标题】如何使用 n-gram 进行多标签分类?【英文标题】:How to use n-grams for multi-label classification? 【发布时间】:2017-11-09 02:04:57 【问题描述】:

我正在开展一个项目,根据他们用英语交流的方式来确定他们的国籍。我有 10 个国籍和 1000 个文件,每个国籍 100 个。我正在使用 n-gram 作为特征并希望验证我的方法。我的数据结构将具有不同的 n-gram(字符 n-gram、bi-gram,作为列)作为特征和国籍作为标签(作为行)我的步骤是:

    提取给定国籍的所有文件 (FINE)。 1.1。将它们组合在一起形成一个文本语料库(例如将 100 个文件组合成一个大文件)。我最初考虑一次获取一个文件并根据它们的出现更新 n-gram 的计数。但是对于每个新的 n-gram,我必须查看它是否已经发生,然后针对给定的标签更新它的频率。这会是更好的方法吗? 提取二元/三元并获取每克的频率。 (NLTK 有 FreqDist 为每个计数) 存储此信息,以便我使用它来分类我的测试集。 (我如何存储这些信息。更多信息如下)

问题是我应该将 n-gram 和频率信息存储在一个矩阵中(一个具有所有 n-gram 和标签的单个矩阵或每个标签的单独矩阵)还是应该将它存储为一个映射(每个标签的映射,具有 n-gram 及其频率计数)。我想要一个数据结构(用于存储提取的信息),分类器很容易将其作为输入并处理它们。我无法预见,哪种数据结构会是更好的选择。

【问题讨论】:

【参考方案1】:

1) 没关系。如果您有办法单独执行然后合并它,那么如果您将来想要扩展到分布式系统(通常称为 map-reduce 方法),这将有所帮助。

2) 好的。

3) n-gram 和频率计数通常不适用于特征分类。您可能希望为每个标签使用单独的矩阵/映射,然后使用 TF-IDF (https://en.wikipedia.org/wiki/Tf%E2%80%93idf) 之类的东西来识别具有特定标签特征的 n-gram。

4) 在分类方面,您将构建一个固定长度的向量,您可以在其中选择在上一步中为每个标签识别的 ngram 子集,然后将其用于训练和分类。您可能还需要对计数进行某种标准化。

【讨论】:

以上是关于如何使用 n-gram 进行多标签分类?的主要内容,如果未能解决你的问题,请参考以下文章

使用 SKlearn 进行多标签分类 - 如何使用验证集?

使用 BERT 进行多标签分类

如何集成所有分类器以进行多标签 svm 分类

使用KNN模型进行多标签分类实战(Multilabel Classification)

使用 Sklearn 进行多标签分类

如何使用 keras 实现多标签分类神经网络