1 / 47

Indexation avancée

Indexation avancée. Indexation et Recherche d'Information. Rappels des épisodes précédents. Recherche d'Information. Indexation (modèle de document). Collections dynamiques vs. statiques. Modèle de recherche. Évaluation. Requête. Construction de l’index : vue générale. INDEX.

justine-roy
Download Presentation

Indexation avancée

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Indexationavancée Indexation et Recherche d'Information

  2. Rappels des épisodes précédents

  3. Recherche d'Information Indexation(modèle de document) Collections dynamiques vs. statiques Modèle derecherche Évaluation Requête

  4. Construction de l’index : vue générale INDEX DOCUMENTS TERMES sert ne Rien de faut courir il point partir à TERMESnormalisés TEXTE Rien ne sert de courir; il faut partir à point : Le lièvre et la tortue en sont un témoignage. «Gageons, dit celle-ci, que vous n'atteindrez point Sitôt que moi ce but. - Sitôt? Êtes-vous sage ? Repartit l'animal léger : Ma commère, il vous faut purger Avec quatre grains d'ellébore.) - Sage ou non, je parie encore." Ainsi fut fait; et de tous deux On mit près du but les enjeux : Savoir quoi, ce n'est pas l'affaire, Ni de quel juge l'on convint. Notre lièvre n'avait que quatre pas à faire, J'entends de ceux qu'il fait lorsque, prêt d'être atteint, Il s'éloigne des chiens, les renvoie aux calendes, Et leur fait arpenter les landes. Ayant, dis-je, du temps de reste pour brouter, Pour dormir et pour écouter D'où vient le vent, il laisse la tortue Aller son train de sénateur. Elle part, elle s'évertue, Elle se hâte avec lenteur. Lui cependant méprise une telle victoire, Tient la gageure à peu de gloire, Croit qu'il y a de son honneur De partir tard. Il broute, il se repose, Il s'amuse à toute autre chose Qu'à la gageure. A la fin, quand il vit Que l'autre touchait presque au bout de la carrière, Il partit comme un trait; mais les élans qu'il fit Furent vains : la tortue arriva la première. "Eh bien! lui cria-t-elle, avais-je pas raison ? De quoi vous sert votre vitesse ? Moi l'emporter! et que serait-ce Si vous portiez une maison ?" sert rien faut courir point partir

  5. Construction de l’index Terme Id. Doc Doc #1 Terme Id. Doc I enact did julius was caesar I Capitol the killed i’ Séquencede termes Brutus killed me Doc #2 it let with So be noble caesar The Brutus told hath you was ambitious caesar

  6. Construction de l’index Terme Id. Doc Terme Id. Doc Terme Id. Doc Tri par termes (puis par documents) ….. …..

  7. Construction de l’index Terme Fréquence Liste Terme Id. Doc Fichier inverse (dictionnaire) ….. …..

  8. Construction de l’index Terme Fréquence Liste Questions pour plus tard • Comment construire cet index de façon efficace et économe ? • Comment le conserver (mémoire, disque, quelle structure de données) ? C’est maintenant !

  9. Requête dans les index fusion = <> id1 = l1[0], id2 = l2[0] Tant que les listes ne sont pas vides siid1 = id2 alors ajouter(fusion, id1) id1 = suivant(l1) id2 = suivant(e2) sinon siid1 < id2 alors id1 = suivant(l1) sinon id2 = suivant(l2) • Les listes de documents sont ordonnées ! • On traverse les deux listes l1 et l2 simultanément Brutus Fin ! Caesar

  10. Arbres binaires de recherche jeu jard jeudi jante je jeux

  11. Recherche approximative dans l’index

  12. Joker (« Wild Card ») * • mon* : trouver tous les termes qui commencent par « mon ». • Aucun problème avec les arbres binaires ou les B-Tree. • *mon : trouver tous les termes qui finissent par « mon ». • Maintenir un second B-Tree contenant les termes à l’envers ! • tra*ant ?  S’arranger pour que le joker soit toujours à la fin ! Pourquoi ?

  13. Permuterm • Pour chaque terme, indexer de façon circulaire • bonjour$ • onjour$b • njour$bo • jour$bon • our$bonj • ur$bonjo • r$bonjou • $bonjour • Traitement des requêtes : permuter en conduisant le joker vers la droite • X  X$ • X*  $X* • *X  X$* • X*Y  • *X*  • X*Y*Z  • Index environ 4 fois plus gros ! ?

  14. Correction d’orthographe • Correction dans les documents • Particulièrement utile pour les documents numérisés (OCR) • Les pages Web ont beaucoup de fautes de frappe ou d’orthographe • Le but : introduire moins de termes erronés dans le dictionnaire • Correction dans les requêtes • « comprendre » ce que demandait l’utilisateur

  15. Correction d’orthographe • Correction d’un mot isolé : • Distance d’édition (Levenshtein) • Distance d’édition pondérée • N-grammes de caractères • Statistiques sur les logs de requêtes • Soundex

  16. Correction d’orthographe • Correction en contexte • cacher / cracher • foncer / forcer • Techniques : • Fonction du nombre de documents retrouvés • Bi-grammes les plus fréquents

  17. Construction de l’index

  18. Rappel des enjeux matériels • L’espace disque est nécessaire pour stocker les index inversés Certains moteurs de recherche stockent presque tout en mémoire, c’est rapide mais très cher, et le changement d’échelle est plus compliqué. (mais Google et Bing le font) • Le transfert de données via le disque dur est utilisé pour manipuler (au moins en partie) les listes inversées • La mémoire vive stocke (si possible) le dictionnaire et accumule les documents de l’index • La CPU est mise à contribution pour construire et ordonner les listes inversées

  19. Rappel des enjeux matériel Mémoire • Accès rapide • Accès aléatoire • Contenance moyenne (Go) • Chère Disque • Accès lent • Accès par blocs (de 8 à 256 Ko) • Contenance élevée (To) • Bon marché

  20. Construction de l’index : tri par termes Terme Id. Doc Terme Id. Doc Terme Id. Doc Tri par termes (puis par documents) ….. …..

  21. Tri • Le tri est généralement un travail pour la mémoire vive • Algorithmes efficaces, « lectures/écritures » fréquentes mais rapides • OK jusqu’à quelques dizaines de millions de termes à trier. • Impossible de tenir de grosses collections en mémoire pour la trier • On analyse un document à la fois (compression très difficile) • Les listes des index ne sont complètes qu’à la fin du processus • Nécessité de prévoir des stockages intermédiaires sur le disque • Algorithmes « classiques » de tri en mémoire impossible à reproduire sur le disque (accès trop lents) • Chaque comparaison demande 2 accès au disque. • On ordonne N éléments en N ln N comparaisons. • Temps d’accès moyen :  5ms • Combien de temps prendrait le tri de 100 M de termes ?

  22. Tri par blocs • Séparer la collection en n parties gérables en mémoire • Trier chacune de ses n parties séparément, et réécrire le résultat sur le disque (on trie par identifiants de termes et on conserve un dictionnaire) • Fusionner les résultats 2 par 2. • Fusion linéaire, vous commencez à connaître • Inutile de mettre les deux blocs en mémoire • Log2n fusions • Peut être fait avec plus de 2 blocs (plus efficace) • Temps de transfert du disque (une fois la tête positionnée) :  0,02s par octet • Un identifiant de terme : 4 octets • Temps d’une comparaison ou d’un échange de chaîne de caractères :  0,01s • Temps total pour accéder aux données d’un bloc, les trier et les réécrire sur le disque ?

  23. Tri par blocs • Condition du tri par blocs : le dictionnaire tient en mémoire • Le dictionnaire permet de faire le lien entre les termes et leurs identifiants • Il grandit dynamiquement • On pourrait indexer par termes et non par identifiants, mais les fichiers deviendraient très gros • Si le dictionnaire ne tient pas en mémoire ? • Indexation complète par blocs • On maintient un dictionnaire par bloc seulement • On trie les dictionnaires, mais pas les listes

  24. Indexation par blocs Tant que la mémoire n’est pas pleine token = token suivant sitoken est dans le dictionnaire alors liste = liste existante pour ce token sinon liste = nouvelle liste ajouterToken(token, liste) Ordonner le dictionnaire Écrire le bloc sur le disque (dictionnaire + index) Recommencer avec un nouveau bloc si la liste est pleine alors doubler la taille de la liste Fusion des blocs (toujours pareil)

  25. Indexation distribuée

  26. Indexation distribuée • Pour de très larges collections (Web) • Pour éviter de devoir utiliser des machines tolérantes aux fautes • Un serveur principal dirige le tout (doit être très sûr) • Il divise la tâche d’indexation en un ensemble de tâches parallèles • Il assigne chaque tâche à une machine libre et fonctionnelle du réseau Qu’est-ce qu’une tâche « parallélisable » ? (MapReduce)

  27. Indexation distribuée : contexte • Le problème : • Compter le nombre de mots d'un corpus est trivial... • Quand le corpus contient 100 documents... • … mais pas quand il y en a 10 milliards ! • Les deux aspects de la RI • Modéliserla pertinence d'un document • Construirel'architecture capable de mettre ce modèle en œuvre • Stocker les données (efficacement !) • Faciliter le traitement de masse de données

  28. Indexation distribuée • Aujourd'hui tous les moteurs de recherche utilisent une architecture semblable • un système de fichiers distribué • un système de contrôle de tâches (job scheduler : quel programme est exécuté sur quelle machine à quel moment) • Architecture initialeproposée par Google (Google File System & MapReduce) • Implémentation libre développée dans le projet Hadoop

  29. Système de fichiers distribué • Pour le programmeur : • Système de fichier standard (hiérarchie de répertoires + fichiers) • En réalité : • Les fichiers sont stockés découpés en morceaux (chunks) et stockés sur différentes machines • Chaque chunkest stocké plusieurs fois (redondance)  possibilité de perdre des machines • Système de fichiers : • Vue abstraite : on ne sait pas où sont physiquement stockés les fichiers • Gère la réplication: plus de copies des fichiers auxquels on accède le plus

  30. MapReduce • Principe : • Cadre de développement permettant de paralléliser et de distribuer facilement les tâches • Tous les algos sont écrits sous la forme de deux fonctions : • Une fonction mapqui réalise un traitement (modification) des données • Une fonction reducequi fusionne les résultats intermédiaires produits par map • Interêt : • Manière simple d‘écrire des programmes traitant plusieurs To de données • Les tâches map sont exécutés sur les machines sur lesquelles sont stockées les données • Les tâches map sont exécutées en parallèle

  31. MapReduce : compter les mots comptage Fusion des comptes comptage CORPUS comptage Compteglobal comptage comptage chunks REDUCE MAP

  32. Compression de l’index

  33. Pourquoi utiliser la compression ? • Utiliser moins d’espace disque(et faire des économies) • Conserver plus d’informations en mémoire(et réfléchir plus vite) • Conserver les dictionnaires • Éventuellement, garder même les listes des mots fréquemment demandés en mémoire. • Accélérer le transfert entre le disque et la mémoire • À condition que le temps de compression/décompression soit inférieur au temps gagné au transfert • Les algorithmes de compression doivent être rapides

  34. Compression avec ou sans perte • Compression avec perte C’est le principe même de l’indexation : • sac de mots • mots vides • lemmatisation, stemming, … • Compression sans perte • Rangement plus économe • Compression de l’index une fois qu’on a décidé quelles informations on conserve

  35. Rappel : Taille du vocabulaire • Le vocabulaire grandit quand la collection grandit. • Loi de Heaps : M = kTb • M : taille du vocabulaire • T : nombre de tokens dans la collection • bet k : constantes (typiquement, b = 0,5 et k = 30 à 100) • Loi empirique • Et c’est bien pire pour le Web !

  36. Rappel : Fréquence des termes • Peu de mots fréquents, et beaucoup de mots rares • Loi de Zipf: le nème mot le plus fréquent a une fréquence proportionnelle à 1/n fréquence des termes rang des termes

  37. Compression du dictionnaire • Si on a environ 400 000 termes • 28 octets par termes • 11,2 Mo 20 octets 4 octets 4 octets le double en unicode ! • Problèmes de cette structure fixe ? • « a » • « anticonstitutionnellement »

  38. Compression de la liste de termes comacombatcombecombinaisoncomblercombustible • Si un terme fait 8 lettres en moyenne (disons 8 octets) • 19 octets par terme au lieu de 28 • 7,6Mo 3 octets 4 octets 4 octets

  39. Compression de la liste de termes Pointeurs par blocs pointeur tous les k termes (ici, k=4) 4coma6combat5combe11combinaison7combler11combustible • On économise 3 pointeurs (9 octets) tous les k termes. • On dépense 1 octet de plus à chaque mot pour la taille • 7,1 Mo 3 octets 4 octets 4 octets Pourquoi ne pas augmenter k ?

  40. Compression de la liste de termes jeu jeu jard jeudi jante jeudi jante je jeux jeun jeun jard job je jeux Recherche sans les pointeurs par blocs… job Combien de comparaisons en moyenne ? … et avec les pointeurs par blocs

  41. Compression de la liste de termes Codage incrémental • Les mots ordonnés partagent souvent de longs préfixes en commun • On ne code que les différences • À l’intérieur d’un bloc uniquement ! On descend à 5,9 Mo 8attabler7attache9attachant9attaquer 8atta*bler3che5chant4quer

  42. Compression des listes de documents • On trie les listes de documents par leurs identifiants (entiers) • En général, un entier est codé sur 4 octets • Au mieux, pour 1 M de documents, sur log2 1 000 000 = 20 bits • Peu de termes fréquents, beaucoup de termes rares • « allomorphie » apparaît peut-être une fois tous les millions de documents, donc pour notre collection d’un million de document, 20 bits devraient suffire • « le » apparaît probablement dans chaque document, donc potentiellement 20 M de bits pour stocker la liste (c’est trop) 128564 128569 128580 128595 128601

  43. Compression des listes de documents • Une idée : stocker les intervalles entre identifiants • L’espoir est de pouvoir stocker les intervalles dans moins de 20 bits • Mais… • « le » • « allomorphie » • On a toujours besoin du maximum « au cas où » ! 128564 128569 128580 128595 128601 1452 … … 1 152654 5 1 11 15 1 1 6

  44. Compression des listes de documents • La solution? • Pour une valeur d’intervalle I, on veut utiliser aussi peu de bits que possible (l’entier au-dessus de log2I). • En pratique, on arrondit à l’octet supérieur. • Comme pour les encodages de caractères, on consacre 7 bits d’un octet à représenter le nombre, et le dernier est le bit de continuationc. • Si I  127, 7 bits suffisent, et c = 1. • Sinon, c = 0 et on continue sur l’octet suivant. • c = 1 signifie toujours que le nombre se termine à cet octet.

  45. Compression des listes de documents Bilan : • Pour une collection initiale de : • 800 000 documents • 16 M de termes • 400 000 termes uniques • Taille du dictionnaire : • Structure de taille fixe : 11,2 Mo • Avec pointeurs vers les termes : 7,6 Mo • Avec pointeurs par blocs : 7,1 Mo • Avec pointeurs par blocs et codage incrémental : 5,9 Mo • Taille de la liste de documents (sans les positions) : • Matrice d’incidence : 40 Go • Index inversé (4 octets) : 400 Mo • Entiers de tailles variables : 116 Mo

  46. Plusieurs index ?

  47. Pourquoi plusieurs index ? • Les collections évoluent plus ou moins rapidement • Documentation technique : de gros ajouts plutôt rares • Des articles de journaux : quelques ajouts assez fréquents • Le Web : beaucoup d’ajouts en permanence • Plusieurs raisons d’utiliser plusieurs index : • Pouvoir toujours utiliser un index si un autre est en reconstruction • Maintenir un index des nouveaux documents en attendant de les fusionner à l’index principal • Avoir un index pour chaque type de documents : • Les pages rarement modifiées (exemple, le blog de votre grand-mère) • Les pages modifiées régulièrement (exemple, le blog de votre petite sœur) • Les pages modifiées en « temps réel » (exemple, la page d’accueil de liberation.fr)

More Related