liens LSA:
Voici l'algorithme complet. Si vous avez une maladie vésiculeuse du porc, vous êtes là pour la plupart. Les papiers ci-dessus l'expliquent mieux que moi.
Hypothèses:
- votre fonction SVD donnera les valeurs singulières et des vecteurs singuliers dans l'ordre décroissant. Sinon, vous devez faire plus d'acrobaties.
M: matrice corpus, w (mots) d (documents) (w lignes, colonnes d). Ceux-ci peuvent être des comptes bruts, ou tfidf ou autre. Les mots d'ordre peuvent ou non être éliminés, et l'arrêt peut arriver (Landauer dit garder les mots vides et ne pas s'arrêter, mais oui à 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 :)
Puis le reductionality .... le papier LSA réelle suggère une bonne approximation de la base est de garder des vecteurs assez de sorte que leurs valeurs singulières sont plus de 50% du total des valeurs singulières.
Plus ... succintement (pseudocode)
Let s1 = sum(Sigma).
total = 0
for ii in range(len(Sigma)):
val = Sigma[ii]
total += val
if total > .5 * s1:
return ii
Cela renverra le rang de la nouvelle base, qui était min (d, w) avant, et nous allons maintenant environ avec {ii}.
(ici, '-> prime, pas transposé)
Nous créons de nouvelles matrices: U', Sigma 'V', avec des tailles w x ii, ii x ii, et ii x d.
C'est l'essence de l'algorithme LSA. Cette matrice résultante U '* Sigma' * V 'peut être utilisée pour une recherche de similitude de cosinus «améliorée», ou vous pouvez choisir les 3 premiers mots de chaque document, par exemple. Que ce soit plus qu'un simple tf-idf est un sujet de débat.
Pour moi, LSA fonctionne mal dans les ensembles de données du monde réel en raison de la polysémie, et les ensembles de données avec trop de sujets. Sa base mathématique/probabiliste est non fondée (elle suppose des distributions normales-gaussiennes, ce qui n'a pas de sens pour le nombre de mots).
Votre kilométrage va certainement varier.
Balisage en utilisant LSA (une méthode!)
Construire U 'Sigma' V » matrices de dimensions réduites en utilisant SVD et une réduction heuristique
la main, regarder par-dessus l'U «matrice, et de trouver des termes qui décrivent chaque« sujet ». Par exemple, si les plus grandes parties de ce vecteur étaient "Bronx, Yankees, Manhattan", alors "New York City" pourrait être un bon terme pour cela. Conservez-les dans un tableau ou une liste associative. Cette étape devrait être raisonnable puisque le nombre de vecteurs sera fini.
En supposant que vous avez un vecteur (v1) de mots pour un document, alors v1 * t (U ') donnera les «sujets» les plus forts pour ce document. Sélectionnez les 3 plus élevés, puis donnez leur "sujets" comme calculé à l'étape précédente.
« Je l'ai déjà une mise en œuvre pour la Décomposition en Valeurs Singulières » http://stackoverflow.com/questions/960060/singular-value-decomposition-svd-in-php – Ben
Désolé, j'ai ajouté le lien maintenant. – caw
Qu'est-ce que cela a à voir avec PHP? – Novelocrat