6

В НЛП всегда бывает, что размер функций очень велик. Например, для одного из проектов размерность объектов составляет почти 20 тысяч (p = 20 000), и каждая функция является целым числом 0-1, чтобы показать, представлено ли конкретное слово или биграмм в документе (один документ является точкой данных $ x \ in R^{p} $).В обработке на естественном языке (НЛП), как вы делаете эффективное уменьшение размера?

Я знаю, что избыточность среди функций огромна, поэтому необходимо уменьшить размер. У меня есть три вопроса:

1) У меня есть 10 тысяч точек данных (n = 10 000), а каждая точка данных имеет 10 тысяч функций (p = 10 000). Каков эффективный способ уменьшения размеров? Матрица $ X \ in R^{n \ times p} $ настолько велика, что и PCA (или SVD, усеченный SVD в порядке, но я не думаю, что SVD - хороший способ уменьшить размерность для двоичных функций) и Bag слов (или K-средств) трудно провести прямо на $ X $ (конечно, он разрежен). У меня нет сервера, я просто использую свой компьютер :-(

2) Как судить о сходстве или расстоянии между двумя точками данных? Я думаю, что евклидово расстояние может не работать хорошо для двоичных объектов. Как насчет нормы L0? Что ты используешь?

3) Если я хочу использовать машину SVM (или другие методы ядра) для проведения классификации, какое ядро ​​следует использовать?

Большое спасибо!

+3

выглядит как хороший вопрос для этого сообщества http://stats.stackexchange.com/ – Leo

ответ

2

1) Вам не нужно уменьшать размерность. Если вы действительно этого хотите, вы можете использовать линейный классификатор L1, чтобы уменьшить до наиболее полезных функций.

2) Часто используется сходство с косинусом или сходство с косинусом перемасштабированных векторов TFIDF.

3) Линейные СВМ работают лучше всего с таким количеством функций.

Существует хороший учебник о том, как сделать классификацию, как это в питон здесь: http://scikit-learn.org/dev/tutorial/text_analytics/working_with_text_data.html