Идея АЛП основана на одном предположении: чем больше двух слов встречается в одних и тех же документах, тем больше они похожи . Действительно, можно ожидать, что слова «программирование» и «алгоритм» будут встречаться в одних и тех же документах гораздо чаще, чем, скажем, «программирование» и «разведение собак».
То же самое для документов: чем больше общих / похожих слов в двух документах, тем больше они похожи . Таким образом, вы можете выразить сходство документов по частоте слов и наоборот.
Зная это, мы можем построить матрицу совместного вхождения , где имена столбцов представляют документы, имена строк - слова, а каждый cells[i][j]
представляет частоту слова words[i]
в документе documents[j]
. Частота может быть вычислена многими способами, IIRC, оригинальный LSA использует индекс tf-idf .
Имея такую матрицу, вы можете найти сходство двух документов, сравнив соответствующие столбцы. Как их сравнить? Опять же, есть несколько способов. Наиболее популярным является косинусное расстояние . Из школьной математики вы должны помнить, что матрица может рассматриваться как набор векторов, поэтому каждый столбец - это просто вектор в некотором многомерном пространстве. Вот почему эта модель называется "Модель векторного пространства" . Подробнее о VSM и косинусном расстоянии здесь .
Но у нас есть одна проблема с такой матрицей: она большая. Очень очень большой Работа с ним слишком затратна в вычислительном отношении, поэтому нам нужно как-то уменьшить ее * на 1027 *. LSA использует технику SVD для сохранения наиболее «важных» векторов. После сокращения матрица готова к использованию.
Итак, алгоритм для LSA будет выглядеть примерно так:
- Соберите все документы и все уникальные слова из них.
- Извлечение информации о частоте и построение матрицы совпадений .
- Уменьшить матрицу с SVD.
Если вы собираетесь писать библиотеку LSA самостоятельно, лучше всего начать с поисковой системы Lucene , которая значительно упростит шаги 1 и 2, а также некоторую реализацию многомерных матриц с Возможность SVD, например Parallel Colt или UJMP .
Также обратите внимание на другие техники, которые выросли из LSA, например Random Indexing . RI использует ту же идею и показывает примерно те же результаты, но не использует стадию полной матрицы и является полностью инкрементной, что делает ее намного более эффективной в вычислительном отношении.