使用SVM的文本分类适用于unigrams而不是更高阶的n-gram

时间:2012-03-20 15:17:14

标签: classification svm libsvm n-gram document-classification

我正在使用LibSVM(在Java fwiw中)将文本样本分为两类:英语或西班牙语。我正在训练每种语言的三种文本,每种语言总共大约50,000个单词。然后,我正在测试一些较短的文本并检查适当的分类。一些测试数据来自训练数据(微不足道,但基本上是作为完整性检查完成的),其余的是新的。

为了构建SVM向量,我一直在将文本解析为ngrams,然后对这些ngrams进行散列以获得数值表示。例如,以下向量:

2.0 1:9.0 2:3.0 3:1.0 4:7.0 5:4.0 ...
带有标签2的

表示9个ngrams值为1,3个ngrams值为2,依此类推。

在使用unigrams时,这对我来说效果很好,但出于某种原因,只要我切换到bigrams或更高阶的n-gram,分类就完全失败了。你能想出为什么会出现这种情况的原因吗?我的功能集的大小限制在4999(即我修改每个哈希值,使其不大于4999)。我试过增加和减少这个限制,但无济于事。

有人知道问题可能来自哪里吗?我的语料库可能太小了,或者我的标记化/构建特征向量的方法有问题吗?

提前感谢您的帮助。

0 个答案:

没有答案