我正在使用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)。我试过增加和减少这个限制,但无济于事。
有人知道问题可能来自哪里吗?我的语料库可能太小了,或者我的标记化/构建特征向量的方法有问题吗?
提前感谢您的帮助。