Analyse sémantique latente
1542039
31211000
2008-07-01T22:11:17Z
Thijs!bot
105469
robot Ajoute: [[ja:潜在意味解析]]
L’'''analyse sémantique latente''' ('''LSA''', de l'[[anglais]] : ''Latent semantic analysis'') ou '''indexation sémantique latente''' (ou '''LSI''', de l'anglais : ''Latent semantic indexation'') est un procédé de [[Traitement automatique des langues|traitement des langues naturelles]], dans le cadre de la [[sémantique vectorielle]]. La LSA fut brevetée en [[1988]] <ref>{{en}} [http://patft.uspto.gov/netacgi/nph-Parser?patentnumber=4839853 Dépôt de brevet] par Scott Deerwester, Susan Dumais, George Furnas, Richard Harshman, Thomas Landauer, Karen Lochbaum et Lynn Streeter</ref> et publiée en [[1990]]<ref>{{en}} {{cite journal
| url=http://lsi.research.telcordia.com/lsi/papers/JASIS90.pdf
| title=Indexing by Latent Semantic Analysis
| author=S. Deerwester, S. Dumais, G. W. Furnas, T. K. Landauer, R. Harshman
| journal=Journal of the Society for Information Science
| volume=41
| issue=6
| pages=391-407
|date=1990
}}</ref>.
Elle permet d'établir des relations entre un ensemble de documents et les termes qu'ils contiennent, en construisant des « concepts » liés aux documents et aux termes.
== Matrice des occurrences==
La LSA utilise une [[matrice (mathématiques)|matrice]] qui décrit l'occurrence de certains termes dans les documents. C'est une [[matrice creuse]] dont les lignes correspondent aux « termes » et dont les colonnes correspondent aux « documents ».
Les « termes » sont généralement des mots tronqués ou ramenés à leur radical, issus de l'ensemble du corpus. On a donc le nombre d'apparition d'un mot dans chaque document, et pour tous les mots. Ce nombre est [[Norme|normalisé]] en utilisant la pondération ''[[tf-idf]]'' (de l'[[anglais]] : ''term frequency'' – ''inverse document frequency''), combinaison de deux techniques : un coefficient de la matrice est d'autant plus grand qu'il apparaît beaucoup dans un document, et qu'il est rare — pour les mettre en avant.
Cette matrice est courante dans les modèles sémantiques standards, comme le [[Sémantique vectorielle|modèle vectoriel]], quoique sa forme matricielle ne soit pas systématique, étant donné qu'on ne se sert que rarement des propriétés mathématiques des matrices.
La LSA transforme la matrice des occurrences en une « relation » entre les termes et des « concepts », et une relation entre ces concepts et les documents. On peut donc relier des documents entre eux.
== Applications ==
Cette organisation entre termes et concepts est généralement employée pour :
* la comparaison de documents dans l'espace des concepts (classement et [[partitionnement de données]]) ;
* la recherche de documents similaires entre différentes langues, en ayant accès à un dictionnaire de documents multilingues ;
* la recherche de relations entre les termes (résolution de [[synonymie]] et de [[polysémie]]) ;
* étant donné une requête, traduire les termes de la requête dans l'espace des concepts, pour retrouver des documents liés sémantiquement ([[recherche d'information]]).
La résolution de la synonymie et de la polysémie est un enjeu majeur en [[traitement automatique des langues]] :
* deux [[synonyme]]s décrivent une même idée, un [[moteur de recherche]] pourrait ainsi trouver des documents pertinents mais ne contenant pas le terme exact de la recherche ;
* la [[polysémie]] d'un mot fait qu'il a plusieurs sens selon le contexte — on pourrait de même éviter des documents contenant le mot recherché, mais dans une acception qui ne correspond pas à ce que l'on désire ou au domaine considéré.
== Réduction du rang==
Après avoir avoir construit la matrice des occurrences, la LSA permet de trouver une matrice de [[rang (mathématiques)|rang]] plus faible, qui donne une approximation de cette matrice des occurrences. On peut justifier cette approximation par plusieurs aspects :
* la matrice d'origine pourrait être trop grande pour les capacités de calcul de la machine — on rend ainsi le procédé réalisable, et c'est un « mal nécessaire » ;
* la matrice d'origine peut être « bruitée » : des termes n'apparaissant que de manière anecdotique — on « nettoie » ainsi la matrice, c'est une opération qui améliore les résultats ;
* la matrice d'origine peut être présumée « trop creuse » : elle contient plutôt les mots propres à chaque documents que les termes liés à plusieurs documents — c'est également un problème de synonymie.
Cependant, la réduction du [[rang (mathématiques)|rang]] de la matrice des occurrences a pour effet la combinaison de certaines dimensions qui peuvent ne pas être pertinentes. On s'arrange en général pour — tant que c'est possible — fusionner les termes de sens proches. Ainsi, on pourra effectuer la transformation :
: {('''Voiture'''), ('''Camion'''), ('''Fleur''')} → {(1,3452 × '''Voiture''' + 0,2828 × '''Camion'''), ('''Fleur''')}
La synonymie est résolue de cette manière. Mais quelques fois cela n'est pas possible. Dans ces cas, la LSA peut effectuer la transformation suivante :
: {('''Voiture'''), ('''Bouteille'''), ('''Fleur''')} --> {(1,3452 × '''Voiture''' + 0,2828 × '''Bouteille'''), ('''Fleur''')}
Ce regroupement est beaucoup plus difficile à interpréter — il est justifié d'un point de vue mathématique, mais n'est pas pertinent pour un locuteur humain.
==Description==
===Construction de la matrice des occurrences===
Soit ''X'' la [[matrice (mathématiques)|matrice]] où l'élément ''(i,j)'' décrit les occurrences du terme ''i'' dans le document ''j'' — par exemple la [[fréquence]]. Alors ''X'' aura cette allure :
:<math>
\begin{matrix}
& \textbf{d}_j \\
& \downarrow \\
\textbf{t}_i^T \rightarrow &
\begin{pmatrix}
x_{1,1} & \dots & x_{1,n} \\
\vdots & \ddots & \vdots \\
x_{m,1} & \dots & x_{m,n} \\
\end{pmatrix}
\end{matrix}
</math>
Une ligne de cette matrice est ainsi un vecteur qui correspond à un terme, et dont les composantes donnent sa présence (ou plutôt, son importance) dans chaque document :
:<math>\textbf{t}_i^T = \begin{pmatrix} x_{i,1} & \dots & x_{i,n} \end{pmatrix}</math>
De même, une colonne de cette matrice est un vecteur qui correspond à un document, et dont les composantes sont l'importance dans son propre contenu de chaque terme.
:<math>\textbf{d}_j = \begin{pmatrix} x_{1,j} \\ \vdots \\ x_{m,j} \end{pmatrix}</math>
===Corrélations===
Le [[produit scalaire]] :
:<math>\textbf{t}_i^T \textbf{t}_p</math>
entre deux vecteurs « termes » donne la [[corrélation]] entre deux termes sur l'ensemble du corpus. Le produit matriciel <math>X X^T</math> contient tous les produits scalaires de cette forme : l'élément ''(i,p)'' — qui est le même que l'élément ''(p,i)'' car la matrice est [[matrice symétrique|symétrique]] — est ainsi le produit scalaire :
:<math>\textbf{t}_i^T \textbf{t}_p</math> (<math> = \textbf{t}_p^T \textbf{t}_i</math>).
De même, le produit <math>X^T X</math> contient tous les produits scalaires entre les vecteurs « documents », qui donnent leurs corrélations sur l'ensemble du lexique :
:<math>\textbf{d}_j^T \textbf{d}_q = \textbf{d}_q^T \textbf{d}_j</math>.
===Décomposition en valeurs singulières===
On effectue alors une [[décomposition en valeurs singulières]] sur ''X'', qui donne deux matrices [[matrice orthogonale|orthonormales]] ''U'' et ''V'' et une [[matrice diagonale]] ''Σ''. On a alors :
:<math>X = U \Sigma V^T</math>
Les produits de matrice qui donnent les corrélations entre les termes d'une part et entre les documents d'autre part s'écrivent alors :
:<math>
\begin{matrix}
X X^T &=& (U \Sigma V^T) (U \Sigma V^T)^T = (U \Sigma V^T) (V^{T^T} \Sigma^T U^T) = U \Sigma V^T V \Sigma^T U^T = U \Sigma \Sigma^T U^T \\
X^T X &=& (U \Sigma V^T)^T (U \Sigma V^T) = (V^{T^T} \Sigma^T U^T) (U \Sigma V^T) = V \Sigma U^T U \Sigma V^T = V \Sigma^T \Sigma V^T
\end{matrix}
</math>
Puisque les matrices :
:<math>\Sigma \Sigma^T</math> et <math>\Sigma^T \Sigma</math>
sont diagonales, ''U'' est faite des [[vecteur propre|vecteurs propres]] de <math>X X^T</math>, et ''V'' est faite des vecteurs propres de <math>X^T X</math>. Les deux produits ont alors les mêmes valeurs propres non-nulles — qui correspondent aux coefficients diagonaux non-nuls de <math>\Sigma \Sigma^T</math>. La décomposition s'écrit alors :
:<math>
\begin{matrix}
& X & & & U & & \Sigma & & V^T \\
& (\textbf{d}_j) & & & & & & & (\hat \textbf{d}_j) \\
& \downarrow & & & & & & & \downarrow \\
(\textbf{t}_i^T) \rightarrow
&
\begin{pmatrix}
x_{1,1} & \dots & x_{1,n} \\
\\
\vdots & \ddots & \vdots \\
\\
x_{m,1} & \dots & x_{m,n} \\
\end{pmatrix}
&
=
&
(\hat \textbf{t}_i^T) \rightarrow
&
\begin{pmatrix}
\begin{pmatrix} \, \\ \, \\ \textbf{u}_1 \\ \, \\ \,\end{pmatrix}
\dots
\begin{pmatrix} \, \\ \, \\ \textbf{u}_l \\ \, \\ \, \end{pmatrix}
\end{pmatrix}
&
\cdot
&
\begin{pmatrix}
\sigma_1 & \dots & 0 \\
\vdots & \ddots & \vdots \\
0 & \dots & \sigma_l \\
\end{pmatrix}
&
\cdot
&
\begin{pmatrix}
\begin{pmatrix} & & \textbf{v}_1 & & \end{pmatrix} \\
\vdots \\
\begin{pmatrix} & & \textbf{v}_l & & \end{pmatrix}
\end{pmatrix}
\end{matrix}
</math>
Les valeurs <math>\sigma_1, \dots, \sigma_l</math> sont les valeurs singulières de ''X''. D'autre part, les vecteurs <math>u_1, \dots, u_l</math> et <math>v_1, \dots, v_l</math> sont respectivement singuliers à gauches et à droite.
On remarque également que la seule partie de ''U'' qui contribue à <math>\textbf{t}_i</math> est la ''i''<sup>ième</sup> ligne. On note désormais ce vecteur <math>\hat \textrm{t}_i</math>. De même la seule partie de <math>V^T</math> qui contribue à <math>\textbf{d}_j</math> est la ''j''<sup>ième</sup> colonne, que l'on note <math>\hat \textrm{d}_j</math>.
===Espace des concepts===
Lorsqu'on sélectionne les ''k'' plus grandes valeurs singulières, ainsi que les vecteurs singuliers correspondants dans ''U'' et ''V'', on obtient une approximation de [[rang (mathématiques)|rang]] ''k'' de la matrice des occurrences<ref>On peut même montrer que c'est la meilleure approximation, au sens de la norme de Frobenius. Une preuve est donnée dans l'article sur la [[décomposition en valeurs singulières]].</ref>.
Le point important, c'est qu'en faisant cette approximation, les vecteurs « termes » et « documents » sont traduits dans l'espace des « concepts ».
Le vecteur <math>\hat \textbf{t}_i</math> possède alors ''k'' composantes, qui chacune donne l'importance du terme ''i'' dans chacun des ''k'' différents « concepts ». De même, le vecteur <math>\hat \textbf{d}_j</math> donne l'intensité des relations entre le document ''j'' et chaque concept. On écrit cette approximation sous la forme suivante :
:<math>X_k = U_k \Sigma_k V_k^T</math>
On peut alors effectuer les opérations suivantes :
* voir dans quelle mesure les documents ''j'' et ''q'' sont liés, dans l'espace des concepts, en comparant les vecteurs <math>\hat \textbf{d}_j</math> et <math>\hat \textbf{d}_q</math>. On peut faire cela en évaluant la [[similarité cosinus]], qui peut se calculer ainsi :
::<math>\cos{\theta} = \frac{{\hat \textbf{d}_j} \cdot {\hat \textbf{d}_q}}{\left\| {\hat \textbf{d}_j} \right\| \left \| {\hat \textbf{d}_q} \right\|}</math> ;
* comparer les termes ''i'' et ''p'' en comparant les vecteurs <math>\hat \textbf{t}_i</math> et <math>\hat \textbf{t}_p</math> par la même méthode ;
* une requête étant donnée, on peut la traiter comme un « mini-document » et la comparer dans l'espace des concepts à un corpus pour construire une liste des documents les plus pertinents. Pour faire cela, il faut déjà traduire la requête dans l'espace des concepts, en la transformant de la même manière que les documents. Si la requête est ''q'', il faut calculer :
::<math>\hat \textbf{q} = \Sigma_k^{-1} U_k^T \textbf{q}</math> avant de comparer ce vecteur au corpus.
== Implémentations ==
La [[décomposition en valeurs singulières]] est généralement calculée par des méthodes optimisées pour les matrices larges — par exemple l'[[algorithme de Lanczos]] — par des programmes itératifs, ou encore par des [[réseau de neurones|réseaux de neurones]], cette dernière approche ne nécessitant pas que l'intégralité de la matrice soit gardée en mémoire. <ref>{{en}} « ''[http://www.dcs.shef.ac.uk/~genevieve/gorrell_webb.pdf Generalized Hebbian Algorithm for Incremental Latent Semantic Analysis]'' » Geneviève Gorell et Brandyn Webb.</ref>
== Analyse sémantique latente probabiliste (PLSA)==
Le modèle statistique de l'analyse sémantique latente ne correspond pas aux données observées : elle suppose que les mots et documents forment ensemble un modèle [[distribution normale|gaussien]] (c'est l'[[hypothèse ergodique]]), alors qu'on observe une [[distribution de Poisson]].
Ainsi, une approche plus récente est l'[[analyse sémantique latente probabiliste]], ou PLSA (de l'anglais : ''Probabilistic latent semantic analysis''), basée sur un modèle [[loi multinomiale|multinomial]].
== Voir aussi ==
===Articles connexes===
* [[Sémantique vectorielle]] ;
* [[Décomposition en valeurs singulières]].
===Liens externes===
* {{en}} [http://knowledgesearch.org/ ''The Semantic Indexing Project''], un projet [[Open Source]] d'indexation sémantique latente.
=== Références ===
* {{en}} [http://lsa.colorado.edu/ The Latent Semantic Indexing home page], Université du Colorado ;
* {{en}} {{cite journal
| url=http://lsa.colorado.edu/papers/dp1.LSAintro.pdf
| title=''Introduction to Latent Semantic Analysis''
| author=Thomas Landauer, P. W. Foltz, et D. Laham
| journal=Discourse Processes
| volume=25
| pages=259-284
|date=1998
}}
* {{en}} {{cite journal
| url=http://citeseer.ist.psu.edu/berry95using.html
| title=''Using Linear Algebra for Intelligent Information Retrieval''
| author=M.W. Berry, S.T. Dumais, G.W. O'Brien
|date=1995
}} [http://lsirwww.epfl.ch/courses/dis/2003ws/papers/ut-cs-94-270.pdf PDF].
* {{en}} {{ Lien web | url=http://iv.slis.indiana.edu/sw/lsa.html | titre=Latent Semantic Analysis | éditeur=InfoVis }}
* {{en}} T. Hofmann, ''[http://www.cs.brown.edu/people/th/papers/Hofmann-UAI99.pdf Probabilistic Latent Semantic Analysis]'', Uncertainty in Artificial Intelligence, 1999.
* {{en}} G. Gorell et B. Webb, « ''[http://gen.gorrellville.com/gorrell_webb.pdf Generalized Hebbian Algorithm for Latent Semantic Analysis]'' », Interspeech, 2005.
* {{en}} {{ Lien web | url=http://cran.at.r-project.org/src/contrib/Descriptions/lsa.html | titre=''An Open Source LSA Package for R'' | auteur=Fridolin Wild | éditeur=CRAN | année=23 novembre 2005 | consulté le=20 novembre 2006 }}
* {{en}} {{ Lien web | url=http://scgroup.hpclab.ceid.upatras.gr/scgroup/Projects/TMG/ | titre=''A MATLAB Toolbox for generating term-document matrices from text collections'' | auteur=Dimitrios Zeimpekis and E. Gallopoulos | année=11 septembre 2005 | consulté le=20 novembre 2006 }}
{{Traduction/Référence|en|Latent semantic analysis}}
===Notes===
<references/>
{{Portail|informatique|linguistique}}
[[Catégorie:Intelligence artificielle]]
[[Catégorie:Traitement automatique du langage naturel]]
[[de:Latent Semantic Indexing]]
[[en:Latent semantic analysis]]
[[ja:潜在意味解析]]
[[ru:Латентно-семантический анализ]]
[[zh:潜在语义学]]