LSA ссылки:
Вот полный алгоритм. Если у вас есть СВД, вы большую часть пути туда. Вышеуказанные документы объясняют это лучше, чем я.
Предположения:
- ваша функция SVD выдаст сингулярные значения и сингулярные векторы в порядке убывания. Если нет, вам придется больше заниматься акробатикой.
M : матрица корпуса, w (слова) на d (документы) (w строк, d столбцов). Это могут быть необработанные значения, или tfidf, или что-то еще. Стоп-слова могут или не могут быть устранены, и может произойти остановка (Ландауэр говорит, что держите стоп-слова и не ставьте, но да, tfidf).
U,Sigma,V = singular_value_decomposition(M)
U: w x w
Sigma: min(w,d) length vector, or w * d matrix with diagonal filled in the first min(w,d) spots with the singular values
V: d x d matrix
Thus U * Sigma * V = M
# you might have to do some transposes depending on how your SVD code
# returns U and V. verify this so that you don't go crazy :)
Тогда редукция ... фактическая статья LSA предлагает хорошее приближение для основы, чтобы сохранить достаточно векторов, чтобы их особые значения составляли более 50% от общего числа сингулярных значений.
Более кратко ... (псевдокод)
Let s1 = sum(Sigma).
total = 0
for ii in range(len(Sigma)):
val = Sigma[ii]
total += val
if total > .5 * s1:
return ii
Это вернет ранг нового базиса, который раньше был min (d, w), и теперь мы приблизимся к {ii}.
(здесь, '-> простое, не транспонировать)
Мы создаем новые матрицы: U ', Sigma', V ', с размерами w x ii, ii x ii и ii x d.
В этом суть алгоритма LSA.
Эта результирующая матрица U '* Sigma' * V 'может использоваться для «улучшенного» поиска косинусного сходства, или, например, вы можете выбрать первые 3 слова для каждого документа в нем. Является ли это чем-то большим, чем простой tf-idf, - вопрос некоторых дискуссий.
Для меня LSA плохо работает в наборах данных реального мира из-за многозначности и наборов данных со слишком большим количеством тем. Его математическая / вероятностная основа несостоятельна (она предполагает нормальное (гауссовское) распределение, которое не имеет смысла для подсчета слов).
Ваш пробег определенно будет отличаться.
Пометка с использованием LSA (один метод!)
Построение размерно редуцированных матриц U 'Sigma' V с использованием SVD и эвристики редукции
От руки посмотрите матрицу U 'и найдите термины, которые описывают каждую «тему». Например, если самые большие части этого вектора были «Бронкс, Янки, Манхэттен», то «Нью-Йорк» может быть хорошим термином для этого. Храните их в ассоциативном массиве или списке. Этот шаг должен быть разумным, поскольку число векторов будет конечным.
Если у вас есть вектор (v1) слов для документа, то v1 * t (U ') даст самые сильные «темы» для этого документа. Выберите 3 самых высоких, затем укажите их «темы», как было вычислено в предыдущем шаге.