LingPipe Valeur de décomposition Tutoriel Singulier

SVD comme factorisation

SVD comme approximation des moindres carrés

SVD pour des valeurs inconnues Matrices

Applications de SVD

Latent Semantic Analysis

L'application originale et la plus connue de SVD dans le traitement du langage naturel a été pour l'analyse sémantique latente (LSA). LSA est une application de SVD réduite ordre dans lequel les lignes de la matrice d'entrée représentent les mots et les documents de colonnes, avec des entrées étant le nombre de mots dans le document. Les vecteurs singuliers et valeurs singulières correspdoning produites par SVD permettent des mots et des documents à être mis en correspondance dans le même « espace sémantique latente ». Les lieux et l'intégration résultant mots documents similaires tels que mesurés par co-occurrence près de l'autre, même si elles ne co-ont eu lieu dans le corpus de formation.







Latent Semantic Indexing

SVD pour Classement Général

l'indexation sémantique latente est vraiment juste un problème de classification simple où chaque document est sa propre catégorie, les données de formation pour la catégorie est le texte extrait du document, et où les requêtes ne sont que des textes à classer.

SVD pour Clustering et fonctionnalités

En raison des représentations simples vecteurs des termes et des documents produits par SVD, SVD (ainsi que PCA) a été largement utilisé pour le regroupement.

SVD pour le filtrage collaboratif

En dehors des applications strictement linguistiques, SVD a été utilisé pour le filtrage collaboratif, notamment dans le cadre du concours Prix Netflix. Dans ce contexte, les lignes représentent les utilisateurs et les colonnes représentent les films. Les scores qui existent sont évaluations fournies par les utilisateurs pour les films (sur une échelle 1-5 entière). Le concours implique cotes pour les films devinettes un utilisateur n'a pas noté; qui est, les valeurs inconnues imputant.

Définition de SVD

Nous-mêmes répéter

où U est une matrice m × k, V est une matrice n × k et S k × matrice de k, où k est le rang de la matrice A. La multiplication (*) est la multiplication de la matrice et le T en exposant indique la transposition de la matrice .

Vecteurs Singulier: une base orthonormée

Les vecteurs de dimension m constituant les colonnes de U sont appelés vecteurs singuliers gauche, alors que les n vecteurs -dimesnional constituant les colonnes de V sont appelés vecteurs singuliers.

L'ensemble de gauche et un ensemble de vecteurs singuliers sont orthonormé (qui est, à la fois orthogonal et normal). Normalité signifie que chaque vecteur singulier est d'une longueur unitaire (longueur 1). Un ensemble de vecteurs est dite orthogonale si une paire de vecteurs dans le jeu est orthogonal; rappellent que les vecteurs sont orthogonaux si et seulement si leur produit (équivalente cosinus) est égal à zéro (0). Orthogonalité que toute paire de vecteurs singuliers gauche est le vecteurs singuliers sont également orthonormé, étant d'une longueur unitaire et deux à deux orthogonaux.

Valeurs Singulier: Facteur de pondération

Les valeurs sur la diagonale de S sont appelés les valeurs singulières. La combinaison des q -ème vecteur singulier gauche, droit vecteur singulier et valeur singulière est connue comme un facteur. Les valeurs singulières de déterminer l'importance relative des dimensions, et sont disposées dans un ordre non croissant:

Unicité

La mise en œuvre SVD Matrices

valeurs calcul

Dans le com.aliasi.matrix.SVDMatrix de mise en œuvre de l'interface de matrice com.aliasi.matrix.Matrix. les lignes mises à l'échelle et de vecteurs de colonnes sont stockés. Par exemple, voici la valeur du ième vecteur ligne après mise à l'échelle par la racine carrée des valeurs singulières:

Exigences de temps et l'espace

Ainsi, l'extraction d'une valeur à partir d'une matrice SVD d'ordre k nécessite multiplications k et additions.

L'espace de stockage requis pour une représentation SVD d'une matrice de dimension m × n d'ordre k est (n + m) * k valeurs doubles (de huit octets chacune).

Latent Semantic Analysis et indexation

Exécution de la démo

Pour exécuter l'exemple, appelez simplement le lsi cible Ant.

Nous allons vous expliquer toute la production produit que nous passons par le code et une brève explication de la façon dont l'indexation sémantique latente fonctionne par SVD.

Terme-document Matrice

LSI commence par une matrice terme-document. Les 9 documents suivants sont des titres de rapports techniques. Nous avons pris la liberté de les renumérotation de 0 à 8.

Le comte d'un terme dans un document est ici juste le nombre de fréquences brutes. Dans les applications de SVD, ces comptes sont souvent pondérées en utilisant la fréquence de documents inverse et humidifiés à l'aide des racines carrées ou les journaux.

Le code pour notre LSI démo se trouve dans le fichier src / Lsi.java. Parce que nous ne nous intéressons à la création de l'exemple simple, il est assez compact.

Le code commence par définir la matrice terme-document et l'ensemble des termes et des documents eux-mêmes:

Il y a une ligne pour chaque terme, avec les colonnes indexées par l'ID du document (0 à 8). Les termes et matrice terme-document devrait évidemment être calculé à partir des documents dans une application générale. Ici, nous avons copié la matrice de Deerwester et al. Dans une structure de données à la main. Nous utilisons uniquement le tableau terme et tableau de documents à des fins d'affichage.

Nous imprimons les vecteurs de sortie pour les deux dimensions SVD, nous avons calculé. Les valeurs singulières, de gauche à droite vecteurs singuliers et valeurs singulières sont extraits de la matrice SVD:

Nous ne répétons pas le code ici pour imprimer ces tableaux, mais voici ce que le programme imprime de démonstration:







Notez que cette représentation indique clairement comment sont définissaient les termes et documents dans le même espace k dimensions pour la comparaison. On appelle souvent l'espace sémantique latente. À titre de comparaison, les dimensions sont réduites par leurs valeurs singulières correspondantes. Nous pourrions, par exemple, utiliser ces vecteurs pour les termes regroupement, documents de regroupement ou termes relatifs aux documents.

Nous examinons ensuite le composant de recherche de l'indexation sémantique latente. Les requêtes sont calculées en prenant le barycentre des vecteurs terme correspondant aux termes de la requête. Par exemple, Deerwester et al. utilisez la requête « interaction homme » à titre d'illustration, et nous le répétons leur exemple. Seuls les termes « humain » et de montrer « ordinateur » vers le haut. pointwise calculée au barycentre, en additionnant les valeurs dans chaque dimension:

Il est ensuite comparé aux documents vecteurs en utilisant l'échelle fournie par les valeurs singulières, avec le résultat suivant:

Comme l'a noté Deerwester et al. Document 2 et le document 4, ni de contenir l'un des termes de recherche, le score relativement élevé. Ceci est des relations b arce de second ordre entre les termes, comme le terme « utilisateur » apparaître dans les documents connexes. Si nous devions faire correspondre le vecteur de requête aux termes, nous obtenons les termes de la requête connexes suivants:

Notez que la requête « interaction homme-ordinateur » fournit des termes « humain » et « ordinateur » qui sont à la fois proche de point de vue raisonnable la requête elle-même, qui est le barycentre des vecteurs pour « humain » et « interface ». Plus intéressant encore, des termes tels que « interface » et « système » sont également proches de la requête dans l'espace sémantique latente.

Nous venons parcourons les arguments et de la recherche par rapport à l'indexation. Voici la méthode de recherche:

Le code trouve d'abord les termes en fractionnant sur des espaces ou des virgules. Il initialise alors le vecteur de requête pour le nombre de dimensions dans l'espace sémantique latente, à savoir, le nombre de facteurs dans le SVD. Il a ensuite itère sur les termes et ajoute leurs vecteurs terme au vecteur de la requête. L'ajout est fait par la force brute, la recherche du terme dans la liste des termes, puis en ajoutant son vecteur se trouve. Si le terme ne figure pas dans le tableau des termes, elle est ignorée.

Enfin, le vecteur de requête est imprimé (ne pas répéter ce code), puis marqué contre le document et vecteurs terme:

Produit scalaire est calculée par rapport aux échelles comme suit:

Il est courant de remplacer la mesure du produit scalaire de similitude avec un ordre cosinus. Cela ressemblerait à ceci:

Les scores à base Cosinus-sont les suivants (avec des scores point-produits reproduites dans parens pour plus de commodité):

Et c'est tout. Une implémentation de démonstration complète de l'indexation sémantique latente en quelques lignes de code.

Matrice complète SVD

L'API est configuré pour permettre le calcul de SVD facile pour une matrice complète, c'est un où chaque valeur est connue. Il y a un seul appel de méthode, mais la méthode nécessite une série d'arguments assez sensibles, dont les effets nous efforcerons d'illustrer dans cette section. Avant de le faire, nous allons obtenir un exemple et en cours d'exécution.

Complète SVD pour Jeton bigrams

Pour notre premier exercice, nous allons simplement regarder compte bigrammes dans les données textuelles. compte bigrammes sont asymétriques; par exemple, « du » se produit beaucoup plus souvent que « le de » en anglais.

Replicating Gorrell

Téléchargement Pride and Prejudice

Exécution de la démo

Ant en cours d'exécution

Rapport paramètre

La première chose que le programme fait est un rapport tous ses paramètres. Autre que le nom du fichier, ceux-ci sont codés en dur dans le programme et présenté ici pour plus de commodité.

Rapport Factor- Epoch niveau

Vos résultats peuvent varier

Résultats: Facteurs

Deux négations positif

Après le calcul du SVD, nos rapports de programme de démonstration sur les valeurs singulières et des vecteurs, il a trouvé. À la suite de l'article de Gorrell, nous présentons des valeurs singulières ainsi que les plus grandes et les plus petites valeurs de la gauche et vecteurs singuliers. Ceux-ci sont marqués par le jeton. Voici le rapport pour le premier facteur:

La première valeur singulière est 985, ce qui est très élevé pour ce corpus, où les comptes moyens sont très faibles. Cela dit que le premier facteur fournit un nombre élevé de bigrammes avec les premiers mots « de », « à », « dans » et « et », et avec des seconds mots comme « le », « elle », et « être ».

Les facteurs suivants doivent être orthogonale à la première dimension. Ils sont également tenus d'avoir des valeurs singulières qui sont de taille égale ou inférieure à des facteurs précédents. Voici le deuxième rapport du facteur:

Notez que non seulement ajoute comptes positifs pour les bons bigrams comme « elle avait », mais compte positifs mauvais bigrams comme « qu'elle soit ». Rappelez-vous, c'est juste une approximation, et il est entraîné par moindres carrés, la théorie non linguistique.

Ce qui est intéressant à noter est qu'il ya de grandes dimensions négatives dans ce facteur. Mais rappelez-vous les signes. Ces valeurs réduiront les estimations pour bigrams comme « je lui » et « WAS », mais augmentera réellement compte dans les cas où les deux valeurs sont négatives, telles que « dans son ».

Voici le troisième facteur (rappelez-vous que nous comptons de zéro):

Résultats: Reconstruction

Enfin, avec seulement trois facteurs, voici comment les valeurs d'origine sont reconstruites pour les paires de jetons avec les comptes les plus élevés dans les données de formation:

Le domaine de l'auteur de Autant en emporte le vent poursuivi Projet Gutenberg pour retirer le livre du Projet Gutenberg de l'Australie (PGA), où le livre est dans le domaine public. Voici le lien de donwload de la PGA:

  • Autant en emporte le vent de Gutenberg Australie

Notez que certains bigrammes sont reconstruites avec précision, alors que d'autres sont loin. Rappelez-vous que l'erreur quadratique est la métrique. Par exemple, le nombre initial de « être » est 436, le nombre est reconstruit 393, de sorte que la différence est 436-393 = 43, pour une contribution à l'erreur carrée de 43 * 43 = 1849 (ce rappel est divisé par le nombre de positions dans la matrice afin de déterminer l'erreur quadratique moyenne, la racine carrée de ce qui est rapporté comme RMSE dans les rapports d'époque).

Comparaison avec les résultats de Gorrell

Gorrell a commencé avec une matrice de compte bigrammes comme nous l'avons fait. Mais elle normalise les vecteurs à une échelle de probabilité. Voici son rapport des dimensions supérieures des deux premiers facteurs:

Notez que ceux-ci portent une certaine similitude avec nos résultats, qui sont repris ici sous une forme similaire:

Inspectant le Code

Le code pour générer le SVD est assez simple. La plupart des travaux de l'E / S comme il n'y a qu'une seule méthode pour SVD appel. Voici la mise en œuvre de commande de haut niveau de src / TokenBigramSvd.java.

Le premier lot de code ici extrait simplement une matrice de compte bigrammes du fichier texte spécifié et il attribue aux valeurs variables. Cela nécessite une usine de tokenizer. Comme cela fonctionne, il l'extracteur bigrammes alimente une table de symboles en correspondance les jetons aux dimensions de la matrice; il est utilisé plus tard pour les rapports de sortie, mais ne vient pas autrement en jeu dans le calcul de SVD.

Le deuxième groupe d'instructions définit simplement tous les paramètres de la course. Nous expliquerons ces peu en détail.

Vient ensuite le calcul de la SVD réelle, qui est gérée par un appel à la méthode statique SVD (). qui se trouve dans la classe com.aliasi.matrix.SvdMatrix. Le résultat est une instance de la classe SvdMatrix. Comme nous l'avons mentionné plus haut, la classe SvdMatrix implémente l'interface Matrix en stockant les vecteurs singuliers mis à l'échelle et de les utiliser pour calculer des valeurs au moment de l'exécution.

La dernière pièce du code des rapports sur la matrice SVD résultante en utilisant le tableau original de valeurs et de la table des symboles.

La première chose que la méthode du rapport est fait retirer le vecteur des valeurs singulières et des matrices de vecteurs singuliers. Nous avons ensuite simplement marcher à travers les facteurs (la dimensionnalité des trois tableaux) et rapport sur la valeur singulière et les valeurs extrêmes. Le calcul des valeurs extrêmes est simple. Il utilise notre util.ObjectToDoubleMap classe pratique pour créer une carte de symbole compte, puis les rapports simplement sur les principales valeurs. Notez que la table des symboles est nécessaire pour cartographier la dimension i retour à un jeton de symbole.

SVD Tuning

Paramètres totaux SVD







Articles Liés