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

时间:2017-06-07 15:48:59

标签: nlp classification n-gram language-model

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

  1. 获取特定国籍(FINE)的所有文件。 1.1。将它们组合在一起形成文本语料库(例如将100个文件合并为1个大文件)。我最初想过一次拿一个档案&根据它们的出现更新n-gram的数量。但是对于每个新的n-gram,我将不得不查看它是否已经出现&然后更新给定标签的频率。这会是一个更好的方法吗?
  2. 提取bi-gram / tri-gram&得到每克的频率。 (NLTK有FreqDist,它为每个人提供计数)
  3. 存储此信息,因此我会用它来对我的测试集进行分类。 (我如何存储这些信息。下面有更多信息)
  4. 问题是我应该存储n-gram&矩阵中的频率信息(具有所有n-gram&标签的单个矩阵或每个标签的单独矩阵)或者我应该将其存储为地图(每个标签的地图,具有n-gram及其频率计数)。我希望有一个数据结构(用于存储提取的信息),分类器很容易作为输入和输入。处理它们。我无法预见,哪种数据结构是更好的选择。

1 个答案:

答案 0 :(得分:1)

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

2)好的。

3)n-gram和频率计数通常不适合自己进行特征分类。您可能希望为每个标签分别使用矩阵/贴图,然后使用类似TF-IDF(https://en.wikipedia.org/wiki/Tf%E2%80%93idf)的内容来识别特定标签特征的n-gram。

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