Le système SMART Le système SMART (System for the Mechanical Analysis and Retrieval of Text) (aussi appelé Salton's Magic Automatic Retrieval Technique:-) est un système de RI expérimental. Il utilise le modèle vectoriel. Ce système a été construit entre 1968 et 1970 (la première version). Dans les années 1980, il a été réécrit et réorganisé. Cette nouvelle version est accessible gratuitement pour les recherches à l'adresse suivante: ftp://ftp.cs.cornell.edu/pub/smart/ Les travaux sur SMART ont été dirigés par Prof. G. Salton. Vous pouvez aussi trouver plus de descriptions sur ce système dans le livre suivant: G. Salton, The SMART Retrieval System: Experiments in Automatic Document Processing, 1971, Prentice-Hall, (Z699.4 S2 S25) Dans ce système, on peut remarquer les faits suivants: - C'est le premier système de RI expérimental est robuste. Il peut manipuler un grand nombre de documents. Pour la version actuelle, SMART peut traiter jusqu'à 500 MOctets de documents. Pour beaucoup d'applications, cette capacité est suffisante. - SMART a été programmé avec un souci d'efficacité. Les opérations d'indexation et de recherche ont été optimisées dans une certaine mesure. Ainsi, le temps de traitement est raisonnable. Par exemple, pour indexer un corpus de 150 Moctets, il faut environ 1 heur. Pour effectuer une recherche sur ce corpus, il faut 2-3 seconds (dépendant de la taille de la requête). Cette vitesse est tout à fait acceptable. Bien sûr, on peut l'optimiser encore plus. - SMART est un système flexible. C'est un système fait pour des expérimentations scientifiques (c'est-à-dire de tester des approches en pratique). Les codes sont écrits de telle manière qu'on peut les modifier assez facilement. Par exemple, il y a 2 méthodes de lemmatisation incluses dans SMART. Mais on peut très bien programmer une autre méthode de lemmatisation et de l'ajouter dans SMART. - Dans SMART, certaines nouvelles techniques ont été testées. Par exemple, la rétroaction de pertinence (relevance feedback), la classification de documents (document clustering), etc. Ces techniques ont une grande influence sur le développement de la RI. Beaucoup de système de RI actuels ont grandement bénéficié de SMART. Certain ont repris les mêmes idées, certains d'autres sont développés directement à partir de SMART (en utilisant les codes de SMART). Si on analyse les moteurs de recherche disponibles sur l'internet, on peut affirmer que SMART se compare très bien à ces moteurs, et dans beaucoup de cas, il fonctionne mieux (donne de meilleures réponses). Le but de présenter ici le système SMART est de vous montrer un système de RI concret. Vous pouvez ainsi avoir une idée sur comment faire un système de RI concrètement. C'est aussi un cadre idéal pour vous montrer comment les techniques qu'on a présentées jusqu'à là peuvent s'enchaîner pour faire la RI. Nous allons séparer les traitements en différents volets: indexation de document, indexation de requête, évaluation d'une requête, évaluation du système. 1. Indexation Un document textuel peut contenir différents champs (appelés section dans SMART). Par exemple, dans un document, on peut distinguer le titre, l'auteur, la date, et le corps. SMART
offre la possibilité de traiter ces champs de façon différente. Par exemple, on peut indexer les noms d'auteur d'une manière différente qu'un texte dans la partie corps. La même chose pour la date. Dans une requête, on peut aussi avoir différents champs (sections). L'indexation de document et de requête est illustrée dans la figure suivante: Document Requête Reconnaissance de sections Reconnaissance de sections Tokenisation Tokenisation Stoplist Stoplist Le prechain proch. mot Lemmatisation Lemmatisation mot le prochain section Dic Statistique sur Statistique sur proch. les occurrences les occurrences sect. le prochain document résultat_section: <no_mot, fréquence> résultat_doc: <no_doc, ctype, not_mot, fréq> résultat_section: <no_mot, fréquence> résultat_req: <no_req, ctype, not_mot, fréq> Conversion en fichier inversé et/ou de poids Conversion de poids La partie gauche correspond à l'indexation de document, et à droite, l'indexation de requête. Les deux traitements sont très similaires, à quelques détails près. L'indexation de document Reconnaissance de sections: Pour chaque document, le premier traitement est la séparation de champs (ou la reconnaissance de section). Cela se fait par des marqueurs qui annoncent le début de différentes sections. Par exemple, on peut avoir le marqueur <Title> pour annoncer que les lignes suivantes (jusqu'au prochain marqueur) correspondent au titre. <Date> marque une date, <Body> marque le début du corps du document - un plein-texte. Dans Smart, on peut définir un ensemble de marqueurs, et les actions d'indexation correspondantes. Par exemple, pour <Author>, on peut choisir une transformation spéciale pour les noms propres (transformer "Marc Gingras" en "Gingras, M."). Tokenisation: Pour chaque section que SMART doit indexer, on doit d'abord la couper en mots. Cela consiste à reconnaître les séparateurs de mots, comme ",", ";", l'espace, etc. Le résultat de ce traitement est une suite de "tokens" ou mots (dans un sens large). Stoplist: Les mots trouvés se compare avec la stoplist qui contient l'ensemble de mots qu'on ne veut pas garder comme index. Les autres mots sont soumis aux traitements suivants. Ce
traitement est facultatif. On peut très bien décider que tous les mots sont significatifs, et doivent être gardés. Lemmatisation: Ce traitement consiste à transformer une forme de mot en une certaine forme standard. Trois options sont offertes dans SMART: aucune lemmatisation, enlever le "s" à la fin, ou utiliser un arbre trie pour enlever la terminaison. Après la lemmatisation, la forme standard obtenue est comparée avec un dictionnaire. Dans ce dictionnaire, on stocke tous les index, et à chaque index, on attribue un numéro d'identification. Ainsi, on a la structure suivante pour le dictionnaire: <no_mot, nature, mot> où no_mot est le numéro d'identification, mot est le mot correspondant, et nature désigne la nature de ce mot (par exemple, un chiffre, un mot normal, un nom propre, ou un mot vide). La comparaison du résultat de la lemmatisation a pour le but d'obtenir le no_mot pour le mot. Si ce mot a été déjà rencontré (et donc stocké dans le dictionnaire), on reprend simplement son no_mot; sinon, le système crée un numéro automatiquement pour lui, et on ajoute une entrée dans le dictionnaire pour ce nouveau mot. Statistique: Pour chaque mot, on doit faire la statistique de sa fréquence d'occurrence dans le document. Ainsi, à chaque occurrence d'un mot, on ajoute 1 dans sa fréquence. Itérations: Dans la figure, il y a 3 itérations dans l'indexation de document: itération pour traiter chaque mot, itération pour chaque section, et itération pour chaque document. Résultat: Le résultat d'indexation pour un document est un ensemble de <no_doc, ctype, no_mot, fréq>. Si le document contient 100 mot significatifs distincts, alors il y a 100 entrées colle cela. Conversion du résultat: La conversion se fait seulement quand tous les documents ont été indexés. On peut faire deux sortes de conversions: convertir des vecteurs en fichier inversé, ou convertir les poids de termes. La première conversion consiste à trier à nouveau les résultats de l'indexation. Initialement, ils sont triés dans l'ordre croissant de no_doc. Dans un fichier inversé, ce sera trié dans l'ordre croissant de no_mot. La seconde conversion consiste à transformer le poids a chaque terme dans chaque document en un nouveau poids. La conversion dans SMART se fait en 3 étapes: 1. transformation de tf: on peut garder la fréquence obtenue comme la tf, ou bien on peut choisir à la normaliser en la divisant par la fréquence maximale dans le document, ou bien on peut la convertir en une valeur binaire (0 ou 1). 2. La tf obtenue est de l'étape 1 est multiplié par idf. À ce stade, on peut choisir différentes façons de calculer idf. Par exemple, log(n/n), ou bien 1/n, etc. 3. La troisième étape est la normalisation. On peut normaliser le poids obtenu en le divisant par la valeur maximale, ou bien par la formule Cosinus (c'est-à-dire 1/(Σ i pi 2 ) 1/2 ). À chaque étape, il y a de multiples choix. Pour en connaître plus, vous pouvez lire le fichier suivant: http://www.iro.umontreal.ca/~nie/ift6255/doc_smart/howto/weight Indexation de requête Consultation du dictionnaire: Nous soulignons ici seulement la différence avec l'indexation de document. Après la lemmatisation, le mot obtenu est comparé avec le dictionnaire pour connaître no_mot. Si ce mot n'existe pas dans le dictionnaire, on n'ajoute pas une nouvelle entrée dans le
dictionnaire pour ce mot. Le mot est considéré "inconnu" par le système. En effet, il ne sert à rien d'ajouter ce mot inconnu dans le dictionnaire puisqu'il ne correspond à aucun document. On peut donc l'ignorer dans le modèle vectoriel. (Note: Dans le modèle boooléen, la traitement de mot inconnu doit être différent. Pourquoi?) Conversion: On n'a pas à convertir une requête en forme de fichier inversé. La seule conversion utile pour une requête est la conversion de poids. Ici, on utilise la même méthode que pour le document. Si on utilise idf dans la second étape, les n et N sont aussi celles des documents. Donc, on utilise la même idf que pour les documents. Itération: Dans la figure, on n'a pas inclus une itération pour traiter différentes requêtes. Cela est possible dans SMART. Par exemple, si on utilise SMART sur un corpus de test qui contient un ensemble de requ^etes, on peut très bien indexer toutes les requêtes. Mais dans une situation plus réelle, on traite généralement une requête à la fois. 2. évaluation d'une requête L'évaluation d'une requête utilise le fichier inversé des documents et le résultat d'indexation de la requête qui est une suite de no_mot et de son poids. SMART utilise le produit interne comme similarité, c'est-à-dire: Sim(d, q) = Σ i (p i * q i ) où p i et q i sont les poids d'un mot dans le document d et dans la requête q. SMART implante un calcul global pour tous les document à la fois. L'algorithme est comme suit: Initialiser Sim(d j, q) à 0 pour tout d j ; Pour chaque mot (no_mot i ) dans la requête q (avec poids q i ) faire; Trouver dans le fichier inversé tous les documents d j incluant ce mot, avec le poids p i ; Pour chaque d j dans cet ensemble faire: Sim(d j, q) = Sim(d j, q) + p i * q i À la fin de cet algorithme, on obtient la valeur de Sim pour chaque document. Cette méthode dévaluation globale est plus efficace qu'une évaluation séquentielle. Dans la méthode séquentielle, on doit comparer chaque document séparément avec la requête, et utiliser la formule théorique de Sim pour calculer la similarité. Le plus grand désavantage est qu'on doit considérer tous les documents, même ceux qui ne contiennent aucun mot de la requête. Dans l'évaluation globale utilisant le fichier inversé, on ne considère que les documents qui contiennent au moins un mot de la requête. Le nombre de documents à considérer est beaucoup réduit. Dans SMART, il est cependant possible de choisir l'évaluation séquentielle, si on veut. Dans des cas normaux, cela ne fait aucune différence dans les réponses. 4. Évaluation du système Pour évaluer la qualité d'un système, on doit tester ce système avec des corpus de test. Rappelons qu'un corpus de test contient 3 éléments: un ensemble de documents, un ensemble de requêtes, et le jugement de pertinence par un expert pour chaque requête (c'est-à-dire d'indiquer les documents du corpus qui sont pertinents à chaque requête).
Le système à tester doit indexer les documents, les requêtes, et produire une liste de documents comme réponses pour chaque requête. On compare ensuite les réponses du système avec celle de l'expert pour évaluer la précision et le rappel. Plus souvent, on s'intéresse à connaître l'effet d'une technique (par exemple, la lemmatisation). Dans ce cas, on peut faire un système 1 sans cette technique et un autre système 2 avec cette technique. Les autres composantes des systèmes restent les mêmes. Si système 2 fonctionne mieux que Système 1, on peut alors conclure que la technique a un effet positive. En général, pour conclure que la technique a toujours un effet positive, il faut tester cela avec plusieurs corpus de test différents. On a déjà décrit la méthode utilisée pour obtenir les valeurs de précision-rappel. Elle consiste à avancer 1 à 1dans la liste de réponses du système, et on considère à chaque étape que les documents précédant ce point constituent la réponse du système. On évalue la précision et le rappel. Ainsi, on obtient un point de précision-rappel à chaque étape. Finalement, on obtient une courbe. La courbe moyenne est calculée sur toutes les requêtes du corpus de test. On peut aussi calculer la précision moyenne sur 11 points de rappel (0.0, 0.1,, 1.0). SMART contient un ensemble de fonctions qui permettent d'évaluer la courbe précision-rappel pour un ou plusieurs systèmes et de les comparer. L'amélioration du Système 2 par rapport au Système 1 se calcule de la façon suivante: Amélioration = (P2 - P1) / P1 où P1 et P2 sont les performances des systèmes 1 et 2 (qui peut être une précision, un rappel, ou la précision moyenne). 5. Rétroaction de la pertinence (Relevance feedback) Cette technique a été inventé par Roccio, un membre dans l'équipe SMART. L'idée de la rétroaction est qu'après une première évaluation du système, l'utilisateur, en lisant les réponses, peut indiquer ceux qui sont pertinents, et ceux qui ne sont pas. Avec ces indications, le système peut reformuler la requête. La nouvelle requête peut devenir plus proche des documents pertinents et plus loin des documents non-pertinents. Pour mieux comprendre l'effet de la rétroaction, il faut mentionner que la requête d'un usager souvent ne décrit pas très bien son besoin d'information. Par exemple, un usager peut utiliser la requête "bases de données et gestion" pour décrire son besoin sur "l'utilisation de bases de données dans la gestion". Or, la requête donnée ne donne pas autant de précision. En effet, on peut très bien interpréter la requête comme "gestion de bases de données". A part l'interprétation ambiguë, on trouve plus souvent des requêtes dans lesquelles les concepts importants sont manquants. Ainsi, l'idée de la rétroaction est d'essayer de saisir plus précisément le besoin de l'usager à travers les documents qu'il a jugés. La nouvelle requête tente de se modifier pour devenir plus similaire aux documents pertinents, et moins similaires aux documents nonpertinents. La formule générale de réformulation de Roccio est la suivante: q' = α * q + β * Doc_Pert - γ * Doc_Npert.
où q et q' sont les vecteurs de l'ancienne et la nouvelle requêtes, Doc_Pert et Doc_Npert sont les centroïdes des documents pertinents et non-pertinents, α,β et γ sont les 3 paramètres qui règlent l'importance de chaque élément dans la nouvelle requête. Ces 3 paramètres sont fixes. Pour obtenir la nouvelle requête q', on doit d'abord calculer les deux centroïdes. Ce sont les vecteurs moyens de tous les documents pertinents et non-pertinents jugés par l'usager. Ensuite, pour chaque terme (dimension dans l'espace vectoriel), le nouveau poids du terme est p' = α * p + β * p pert - γ * p npert En pratique, on n'a pas besoin de calculer cela pour tous les termes de l'espace vectoriel, mais seulement les termes concernés (qui apparaissent dans q, Doc_Pert ou Doc_Npert). Par exemple, soit un espace vectoriel à 5 dimensions. La requête initiale est la suivante: t1 t2 t3 t4 t5 q = <1, 2, 0, 1, 0> Les 2 document pertinents que l'usager a jugés sont: d p1 = <2, 0, 1, 1, 0> d p2 = <1, 1, 1, 0, 0> et les document non-pertinents: d n1 = <0, 1, 0, 1, 1> d n2 = <0, 1, 0, 2, 0> Les vecteurs centroïdes sont: d p = <1.5, 0.5, 1, 0.5, 0> d n = <0, 1, 0, 1.5, 0.5> Soit α=1, β=0.5, γ=0.5, la nouvelle requête est la suivante: q' = <1.75, 1.75, 0.5, 0.5, -0.25> Si on compare q' avec q, on voit que le poids de t1 a beaucoup augmenté. La raison est que dans les deux documents pertinents, t1 a un poids fort; tandis que dans les documents non-pertinents, ses poids sont nuls. Donc, on peut croire que les documents pertinents pour l'usager doit avoir un poids fort sur t1. Par contre, le poids de t4 a diminué de 1 à 0.5. C'est parce que t4 apparaît plus dans les documents non-pertinents que dans les documents pertinents. Ainsi, son apparition est vue plutôt comme un signe de non-pertinence. Donc, son poids dans la nouvelle requête est diminué. Il y a aussi un poids négatif dans q'. Ceci signifie que l'apparition de t5 est un signe totalement négatif. Donc, quand il apparaît dans un document, on diminue la similarité du document. Globalement, on peut voir le changement dans la nouvelle requête comme le changement dans la direction des documents non-pertinents vers les documents pertinents. On peut illustrer cela comme la figure suivante: Corpus * * x * x x x x x x * * x x x * * x * * x x x * * * x * * x x x x x * * x x x x * x x x x x x * x q' q
Dans cette figure, q et q' correspond à tous les documents que q et q' permettent de retrouver comme réponse. Les points noirs corresponds aux centroïdes des documents pertinents et nonpertinents jugés par l'usager. La flèche entre eux illustre la direction de changement qu'on apporte à la requête. Ainsi, la nouvelle requête est changée de l'ancienne requête dans cette direction. L'effet est donc de s'approcher plus aux documents pertinents et de s'éloigner des documents non-pertinents. Ici, on fait l'hypothèse que les documents pertinents seront similaires à ceux jugés par l'usager, ainsi que pour les documents non-pertinents. Dans ce cas, on peut espérer retrouver plus de documents pertinents et moins de documents non-pertinents avec la nouvelle requête. Dans le cas ou il n'y a pas cette similarité, l'effet sera imprévisible. En pratique, il existe une certaine similarité au sein des documents pertinents même si on ne peut pas en dire autant pour les documents non-pertinents. Ainsi, certains suggèrent de définir γ=0 pour ne pas utiliser les documents nopn-pertinents comme contre-exemples. La définition des 3 paramètres dépende du corpus et de la précision de la requête de l'usager. En général, on définit un α plus grand que β. Il n'est pas nécessaire non plus de tenir compte de tous les termes dans les documents pertinents et non-pertinents. En effet, beaucoup de termes peuvent apparaître dans ces documents par hasard. Ainsi, on utilise généralement les termes les plus forts de ces documents pour réformuler la requête (par exemple, 100 termes les plus forts).