Indexation Avancée

Download Report

Transcript Indexation Avancée

Indexation
avancée
Extraction d’Information
dans les Textes
Xavier Tannier
[email protected]
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
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
3
Construction de l’index : vue générale
DOCUMENTS
INDEX
TERMES
Rien ne sert de
courir il faut
partir à point
TERMES
NORMALISÉ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 ?"
rien
courir
partir
sert
faut
point
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
4
Construction de l’index
Terme
Doc #1
Id. Doc
Terme
Id. Doc
I did enact julius
caesar
killed
I was
i’ the
Brutus killed
Capitol
me
Séquence
de termes
Doc #2
So let it be with
caesar The noble
Brutus hath told you
caesar was ambitious
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
5
Construction de l’index
Terme
Terme
Id. Doc
Terme
Id. Doc
Id. Doc
Tri par termes
(puis par documents)
…..
…..
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
6
Construction de l’index
Terme
Terme
Fréquence
Liste
Id. Doc
Fichier inverse
(dictionnaire)
…..
…..
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
7
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 !
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
8
Requête dans les index
fusion = <>
id1 = l1[0], id2 = l2[0]
Tant que les listes ne sont pas vides
si id1 = id2 alors
ajouter(fusion, id1)
id1 = suivant(l1)
id2 = suivant(e2)
sinon
si id1 < 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
Fin !
Brutus
Caesar
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
9
Arbres binaires de recherche
jeu
jard
jante
jeudi
je
jeux
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
10
Recherche approximative dans
l’index
Joker (« Wild Card »)
*
• mon* : trouver tous les termes qui commencent par « mon ».
• Aucun problème avec les arbres binaires ou les B-Tree.
Pourquoi ?
• *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 !
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
12
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 !
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
13
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
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
14
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
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
15
Correction d’orthographe
• Correction en contexte
– cacher / cracher
– foncer / forcer
• Techniques :
– Fonction du nombre de documents retrouvés
– Bi-grammes les plus fréquents
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
16
Construction de l’index
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
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
18
Rappel des enjeux matériel
Mémoire
•
•
•
•
Disque
Accès rapide
Accès aléatoire
Contenance moyenne (Go)
Chère
•
•
•
•
Accès lent
Accès par blocs (de 8 à 256 Ko)
Contenance élevée (To)
Bon marché
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
19
Construction de l’index : tri par termes
Terme
Terme
Id. Doc
Terme
Id. Doc
Id. Doc
Tri par termes
(puis par documents)
…..
…..
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
20
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 ?
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
21
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
– Log2 n 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 ?
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
22
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
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
23
Indexation par blocs
Tant que la mémoire n’est pas pleine
token = token suivant
si token est dans le dictionnaire alors
liste = liste existante pour ce token
sinon
liste = nouvelle liste
si la liste est pleine alors
doubler la taille de la liste
ajouterToken(token, liste)
Ordonner le dictionnaire
Écrire le bloc sur le disque (dictionnaire + index)
Recommencer avec un nouveau bloc
Fusion des blocs (toujours pareil)
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
24
Indexation distribuée
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
Qu’est-ce qu’une tâche « parallélisable » ?
(MapReduce)
• Il assigne chaque tâche à une machine libre et fonctionnelle du
réseau
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
26
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éliser la pertinence d'un document
– Construire l'architecture capable de mettre ce modèle en œuvre
• Stocker les données (efficacement !)
• Faciliter le traitement de masse de données
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
27
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 initiale proposée par Google
(Google File System & Map Reduce)
• Implémentation libre développée dans le projet Hadoop
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
28
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 chunk est 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
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
29
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 :
1. Une fonction map qui réalise un traitement (modification) des données
2. Une fonction reduce qui 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
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
30
MapReduce : compter les mots
comptage
Fusion des comptes
comptage
CORPUS
comptage
Compte
global
comptage
comptage
chunks
MAP
REDUCE
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
31
Compression de l’index
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
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
33
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
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
34
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
b et k : constantes (typiquement, b = 0,5 et k = 30 à 100)
Loi empirique
• Et c’est bien pire pour le Web !
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
35
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
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
36
Compression du dictionnaire
le double en unicode !
Termes
Fréquence
a
650 865
abandon
1245
…
…
zoulou
63
20 octets
Pointeur vers
les listes
…
4 octets
4 octets
Problèmes de cette structure fixe ?
• Si on a environ 400 000 termes
• 28 octets par termes
11,2 Mo
•
•
«a»
« anticonstitutionnellement »
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
37
Compression de la liste de termes
comacombatcombecombinaisoncomblercombustible
Termes
Fréquence
Pointeur vers
les listes
42
11
235
63
• Si un terme fait 8 lettres en
moyenne (disons 8 octets)
• 19 octets par terme au lieu de 28
7,6 Mo
3 octets
4 octets
4 octets
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
38
Compression de la liste de termes
Pointeurs par blocs
pointeur tous les k termes (ici, k=4)
4coma6combat5combe11combinaison7combler11combustible
Termes
Fréquence
Pointeur vers
les listes
42
11
• 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
235
63
3 octets
4 octets
4 octets
Pourquoi ne pas augmenter k ?
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
39
Compression de la liste de termes
jeu
jeu
jard
jante
jeudi
je
jeun
jeux
jante
jeudi
jard
jeun
je
jeux
job
Recherche sans les pointeurs par blocs…
job
Combien de comparaisons en
moyenne ?
… et avec les pointeurs par blocs
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
40
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 !
8attabler7attache9attachant9attaquer
8atta*bler3che5chant4quer
On descend à 5,9 Mo
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
41
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
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
42
Compression des listes de documents
• Une idée : stocker les intervalles entre identifiants
128564
128569
128580
128595
128601
…
5
11
15
6
• L’espoir est de pouvoir stocker les intervalles dans moins de 20 bits
• Mais…
…
– « le »
– « allomorphie »
1
1452
1
1
1
152654
• On a toujours besoin du maximum « au cas où » !
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
43
Compression des listes de documents
• La solution ? On l’a vue en TD !
• Pour une valeur d’intervalle I, on veut utiliser aussi peu de bits que
possible (l’entier au-dessus de log2 I).
• 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
continuation c.
– 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.
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
44
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
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
45
Plusieurs index ?
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)
Extraction d’Information dans les Textes
 Indexation Avancée
Xavier Tannier
47