В обработке естественного языка (NLP), как вы делаете эффективное сокращение размера?

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

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

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

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

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

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

1 ответ

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

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

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

Здесь есть хорошее руководство о том, как сделать классификацию в Python: http://scikit-learn.org/dev/tutorial/text_analytics/working_with_text_data.html

Другие вопросы по тегам