2017-04-11 2 views
0

Je travaille sur le développement d'un algorithme de recherche et j'ai du mal à comprendre comment utiliser réellement les résultats d'une décomposition de valeur singulière (u, w, vt = svd (a)) réduction sur une matrice document-terme.Comment comparer une requête de recherche à la matrice 'w' SVD

Par exemple, dire que j'ai une matrice M x N comme suit où chaque colonne représente un vecteur de document (nombre de termes dans chaque document)

a = [[ 0, 0, 1 ], 
    [ 0, 1, 2 ], 
    [ 1, 1, 1 ], 
    [ 0, 2, 3 ]] 

Maintenant, je pouvais exécuter une fonction tf-idf sur cette matrice pour générer un score pour chaque valeur de terme/document, mais par souci de clarté, je vais ignorer cela.

SVD Résultats

Lors de l'exécution SVD sur cette matrice, je me retrouve avec le vecteur diagonale suivante pour « w »

import svd 

u,w,vt = svd.svd(a) 
print w 

// [4.545183973611469, 1.0343228430392626, 0.5210363733873331] 

Je comprends plus ou moins ce que cela représente (grâce à un beaucoup de lecture et en particulier cet article https://simonpaarlberg.com/post/latent-semantic-analyses/), mais je ne peux pas comprendre comment relier cette matrice 'approximation' résultant aux documents originaux? Que représentent ces poids? Comment puis-je utiliser ce résultat dans mon code pour trouver des documents liés à une requête de terme?

Fondamentalement ... Comment l'utiliser?

Répondre

0

Le rank- r SVD réduit un rank- RM x N matrice A dans r rang 1 M x N matrices orthogonales (u_n * s_n * v_n '). Si vous utilisez ces valeurs et vecteurs singuliers pour reconstruire la matrice d'origine, vous obtiendrez le meilleur rang. r approximation de A.

Au lieu de stocker la matrice complète A, vous stockez juste le U_n, s_n et v_n. (A est M x N, mais U est M x r, S peuvent être stockées dans une dimension que r éléments, et V 'est r x N).

Pour rapprocher A * x, vous calculer simplement (U * (S * (V » * x))) [M x r x r x r x r x N x N x1]. Vous pouvez accélérer encore plus loin en stockant (U * S) au lieu de U et S séparément.

Alors, que représentent les valeurs singulières? D'une certaine façon, ils représentent l'énergie de chaque matrice de rang 1. Plus une valeur singulière est élevée, plus sa matrice de rang 1 associée contribue à la matrice originale et plus votre reconstruction sera mauvaise si elle n'est pas incluse si elle est tronquée.

Notez que cette procédure est étroitement liée à Principal Component Analysis, qui est réalisée sur des matrices de covariance et est couramment utilisé dans l'apprentissage de la machine pour réduire la dimensionnalité de mesure N des variables de dimension.

En outre, il convient de noter que le SVD est utile pour de nombreuses autres applications dans le traitement du signal.

Plus d'informations sur le Wikipedia article.

+0

Merci @rlbond, je pense que ça commence à avoir du sens. J'utilise le gensim, qui fait vraiment tout le travail pour moi, mais je veux vraiment comprendre les maths sous-jacents aussi. Je pense que j'ai juste besoin de plus de temps pour étudier le sujet afin d'en avoir la tête enveloppée. –