Классификация текста с использованием SVM работает с униграммами, но не с n-граммами более высокого порядка. - PullRequest
0 голосов
/ 20 марта 2012

Я использую LibSVM (в Java fwiw), чтобы классифицировать образцы текста в одну из двух категорий: английский или испанский язык. Я тренируюсь на трех текстах на каждом языке, всего около 50 000 слов каждый. Затем я проверяю ряд коротких текстов и проверяю их на предмет соответствующей классификации. Некоторые из данных тестирования взяты из данных обучения (тривиальные, но по сути делаются как проверка работоспособности), а остальные новые.

Чтобы построить векторы SVM, я разбирал текст в нграммы, а затем хешировал эти нграммы, чтобы получить числовые представления. Например, следующий вектор:

2.0 1:9.0 2:3.0 3:1.0 4:7.0 5:4.0 ...

с меткой 2 означает, что 9 нграмм хэшированы до значения 1, 3 нграммы хэшированы до значения 2 и т. Д.

Это хорошо работает для меня при использовании униграмм, но по какой-то причине, как только я перехожу на биграммы или n-граммы более высокого порядка, классификация полностью терпит неудачу. Можете ли вы вспомнить причину, по которой это может иметь место? Размер моего набора функций ограничен 4999 (т. Е. Я изменяю каждый хеш, чтобы он не превышал 4999). Я пытался увеличить и уменьшить эту границу, но безрезультатно.

Кто-нибудь знает, откуда может возникнуть проблема? Могут ли мои корпусы быть слишком маленькими, или это проблема с моим подходом к токенизации / созданию векторов элементов?

Заранее спасибо за помощь.

...