LSA ссылки:
Вот полный алгоритм. Если у вас есть SVD, вы больше всего там. В приведенных выше документах это лучше, чем у меня.
Предположения:
- ваша функция СВД будет давать особые значения и сингулярные векторы в порядке убывания. Если нет, вам нужно сделать больше акробатики.
M: корпус матрицы, 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 :)
Тогда reductionality .... фактический LSA документ предлагает хорошее приближение для основы, чтобы сохранить достаточное количество векторов, таких, что их особые значения более чем 50% от общего числа сингулярных значений.
Больше succintly ... (псевдокод)
Let s1 = sum(Sigma).
total = 0
for ii in range(len(Sigma)):
val = Sigma[ii]
total += val
if total > .5 * s1:
return ii
Это вернет звание нового базиса, который был мин (д, ш) до, и мы будем Теперь приблизительная с {II}.
(здесь, '-> премьер, не транспонировать)
Мы создаем новые матрицы: U', Сигма 'V', с размерами ш х II, II х II и II х д.
В этом суть алгоритма LSA.
Эта результирующая матрица U '* Sigma' * V 'может использоваться для поиска улучшенных косинусов, или вы можете выбрать, например, верхние 3 слова для каждого документа в нем. Является ли этот yeild больше, чем простой tf-idf, является предметом некоторых дебатов.
Для меня LSA плохо работает в реальных наборах данных из-за многозначности и наборов данных со слишком большим количеством тем. Это математическая/вероятностная основа необоснованна (она предполагает нормальные-иш (гауссовские) распределения, которые не имеют смысла для подсчета слов).
Ваш пробег определенно будет отличаться.
Пометка с помощью LSA (один метод!)
Построить U 'Sigma' V»размерно уменьшенных матрицы с помощью SVD и уменьшение эвристического
Под рукой, смотрите над U 'и придумать термины, описывающие каждую «тему». Например, если самыми большими частями этого вектора были «Бронкс, Янки, Манхэттен», то «Нью-Йорк» мог бы быть хорошим для него. Храните их в ассоциативном массиве или списке. Этот шаг должен быть разумным, так как число векторов будет конечным.
Предполагая, что у вас есть вектор (v1) слов для документа, то v1 * t (U ') даст самые сильные «темы» для этого документа. Выделите 3 наивысших значения, затем укажите их «темы», которые были вычислены на предыдущем шаге.
«Я уже реализацию для сингулярного разложения» http://stackoverflow.com/questions/960060/singular-value-decomposition-svd-in-php – Ben
К сожалению, я добавлена ссылка сейчас. – caw
Что это связано с PHP? – Novelocrat