Telechargé par Rihab BEN LAMINE

4-Recherche d'information

publicité
Chapitre 5
RECHERCHE D’INFORMATION
Mineure « Data Science » Frédéric Pennerath
INTRODUCTION
Mineure « Data Science » Frédéric Pennerath
Le problème de la recherche d’information
(information retrieval)
Documents :
Ensemble de
documents
Application
cliente
Requête
Moteur de
recherche
d’information
Langage de requête :
–
–
–
Mots clés pour le texte
Requête par l’exemple (image, son, etc)
Algèbre : opérateurs logiques, opérateurs
de proximité
Mineure « Data Science » Frédéric Pennerath
–
–
–
Textes (bases documentaires)
Hypertextes, documents XML/HTML
R.I multimédia : images, vidéo, sons, etc
Réponse
Ensemble de
références
Granularité des réponses :
–
–
–
–
Page web (URL)
Documents (pdf,.doc, etc)
Section, chapitre, page
Paragraphes
Objectifs
1.
Démystifier les moteurs de recherche :
– Problème résolu depuis longtemps (bases documentaires)
– Théorie très simple : recherche linéaire dans des listes
2.
Prétexte à introduire des notions connexes
– Modèles IR : modèle booléen, vectoriel, probabiliste
– Algorithmique : indexation, optimisation des requêtes, B-tree, correction
orthographique
– Fouille de texte et traitement automatique du langage naturel (TALN)
– Problématique du Big Data : parallélisme des données (Map Reduce), NoSQL
– Techniques Web : crawling /scraping
Mineure « Data Science » Frédéric Pennerath
La préhistoire de la recherche d’information :
l’approche de type « grep »
• Principe du grep :
grep(requête Q)
Liste L
pour chaque document D,
si D satisfait Q, ajouter la référence de D à L
fin pour
retourner L
• Avantage : requête sophistiquée (expressions régulières)
• Inconvénient :
– Parcours de toute la base documentaire à chaque requête
– Très lent car pas de prétraitement
– Inutilisable pour la recherche sur le Web
Mineure « Data Science » Frédéric Pennerath
RECHERCHE D’INFORMATION
MODÈLE LOGIQUE
ET
IMPLÉMENTATION
Mineure « Data Science » Frédéric Pennerath
Index inversé
(inverted index)
Principe :
–
–
–
–
Index inversé = ensemble (liste) des documents associés à / contenant un terme
Vocabulaire = ensemble des termes indexés
Les index inversés sont calculés offline.
Le traitement online d’une requête combine les index inversés :
recherche(requête « M1 et M2 »)
Index L1 <- ensemble des documents contenant M1
Index L2 <- ensemble des documents contenant M2
Liste L <- intersection de L1 et L2
retourner L
Avantage :
– Rapide car minimise le traitement online
Inconvénient :
– Nécessite des capacités de stockage importantes.
– Que se passe t-il si un terme de la requête n’est pas dans le vocabulaire ?
Mineure « Data Science » Frédéric Pennerath
Langage de requêtes booléennes :
•
•
Opérateurs logiques ET, OU, NON
Langage des premiers moteurs de recherche
• Exemple : vienne AND NOT(autriche OR département)
ET (x)
OU (x)
ET NON (x)
•
Peu adapté à l’usage :
– Liste de résultats trop longue ou trop courte
– Résultat « à plat » : pas de tri des résultats par importance
– Utilité du OU et du NON discutable : la conjonction de termes est la plus naturelle
pour décrire le concept recherché.
Exemple : vienne AND isère
Mineure « Data Science » Frédéric Pennerath
Implémentation d’un index inversé
vienne
1
4
5
9
12 15
vienne ET isère
isère
2
4
5
6
4
5
9
9
• Chaque document dispose d’un identifiant unique entier (UID)
• Chaque mot est associé à la liste des UIDs des documents contenant ce mot,
rangés par UID croissant.
• Cette liste est stockée dans un fichier que l’on peut lire rapidement selon
une lecture séquentielle des blocs disque.
Mineure « Data Science » Frédéric Pennerath
Traitement séquentiel de l’opérateur ET
L1
1
4
5
9
12 15
L
L2
2
4
5
6
4
5
9
9
intersection(fichier index L1, fichier index L2)
entier uid1 = lire(L1), uid2 = lire(L2);
créer fichier index L vide;
tant que uid1 et uid2 sont définis
si(uid1 < uid2) uid1 = lire(L1);
sinon si(uid1 > uid2) uid2 = lire(L2);
sinon
écrire uid1 dans L; uid1 = lire(L1); uid2 = lire(L2);
fsi
fin tant que
retourner L
Mineure « Data Science » Frédéric Pennerath
NB: possibilité d’accélérer
l’algorithme avec des « skip lists »
Traitement séquentiel de l’opérateur NON
•
•
Problème : l’index de NON(M) est énorme et non stockable.
Solution :
– l’opérateur NON n’est acceptable que dans le cas d’une requête « M1 ET NON M2 ».
– Dans ce cas l’algorithme s’apparente au calcul d’une intersection.
intersectionEtNegation(fichier index L1, fichier index L2)
entier uid1 = lire(L1), uid2 = lire(L2);
créer fichier index L vide;
tant que uid1 et uid2 sont définis
si(uid1 < uid2) { uid1 = lire(L1); écrire uid1 dans L; }
sinon si(uid1 > uid2) uid2 = lire(L2);
sinon
écrire uid1 dans L; uid1 = lire(L1); uid2 = lire(L2);
fsi
fin tant que
tant que uid1 est défini { écrire uid1 dans L; uid1 = lire(L1); }
retourner L
Mineure « Data Science » Frédéric Pennerath
Optimisation du moteur de requête
•
•
•
Accès aux index d’un mot grâce à un B-tree
Composition des opérations par accumulation en mémoire (cache)
Ordonnancement des opérations pour minimiser la taille du résultat et le temps de
calcul
1.
2.
3.
•
Mettre la requête sous forme DNF (disjunctive normal form)
Négation à la fin des conjonctions
Ordonner les conjonctions en commençant par les index les plus courts.
Exemple : (A and not B and (C or D) and E)
– Réécriture : (A and not B and C and E) or (A and not B and D and E)
– Ordonnancement : (((E and C) and A) and not B) or …
Terme
– Calcul :
L ← intersection(LE,LC)
L ← intersection(L,LA)
L ← intersectionEtNegation(L,LB)
Mineure « Data Science » Frédéric Pennerath
Fréquence
A
100M
B
20M
C
30M
D
50M
E
1M
RECHERCHE D’INFORMATION
MODÈLE VECTORIEL
ET
IMPLÉMENTATION
Mineure « Data Science » Frédéric Pennerath
Le modèle vectoriel :
t7
Modèle booléen peu adapté :
t5
– Réponses binaires trop rigides (trop ou pas assez de résultats)
– Pas de classement des résultats
t6
t4
Introduction du modèle vectoriel :
–
–
–
–
t3
t1
dim = nbr. de termes
Représentation des requêtes et des documents par des vecteurs
Chaque terme du vocabulaire est une dimension de l’espace vectoriel.
Approche « sac de mots » : un vecteur équivaut à un ensemble pondéré de mots.
Deux vecteurs sont similaires s’ils sont alignés.
→ Score d’un document d pour une requête q : angle entre d et q
𝑞⋅𝑑
𝑠𝑖𝑚 𝑞, 𝑑 = cos 𝑞, 𝑑 =
𝑞 ⋅ 𝑑
Avantages :
– Classement des résultats selon un score.
– Pas de différence entre requêtes et documents : requête par document possible.
– Possibilité d’appliquer les méthodes de classification numérique (SVM, etc)
Mineure « Data Science » Frédéric Pennerath
t2
Les coordonnées tf-idf :
Comment calculer le poids wd,t (coordonnée) d’un terme t dans un document d ?
𝑑=
𝑤𝑑,𝑡 ⋅ 𝑢𝑡
𝑡∈𝑉𝑜𝑐𝑎𝑏.
Le poids wd,t doit être d’autant plus grand que :
–
–
Le terme t est informatif (rare dans l’ensemble des documents)
Le terme t est présent dans le document d.
Modèle tf-idf : poids = information (en bits) pour coder les occurrences de t
𝑤𝑑,𝑡 = 𝑡𝑓𝑑,𝑡 × 𝑖𝑑𝑓𝑡 = 𝑡𝑓𝑑,𝑡 × log 2
𝑁
𝑁𝑡
–
tfd,t (term frequency) : nbr. d’occurrences de t dans le document d
–
–
idft (inverse document frequency) : information pour coder une seule occurrence de t
N : nbr. de documents / Nt : nbr. de documents contenant t
Questions : à quelle condition deux documents
–
Sont parfaitement similaires (𝑠𝑖𝑚 𝑑1 , 𝑑2 = 1) ?
–
Ne partagent aucune similarité (𝑠𝑖𝑚 𝑑1 , 𝑑2 = 0) ?
Mineure « Data Science » Frédéric Pennerath
Exemple de calcul de similarité
Termes
tfvienne
tfisère
1
10
2
2
3
0
3
0
0
4
2
4
𝑑 =
…
tf−idf𝑡,𝑑
𝑡∈𝑉𝑜𝑐𝑎𝑏.
Doc-ID
Terme
(bits)
DocID
vienne
20
1
4 ⋅ 104
isère
18
2
2 ⋅ 104
3
102
4
103
idf
…
Calcul de la similarité entre la requête « vienne isère » et le document 1 :
tf−idf1,𝑣𝑖𝑒𝑛𝑛𝑒 ⋅ 𝑢𝑣𝑖𝑒𝑛𝑛𝑒 + tf−idf1,𝑖𝑠è𝑟𝑒 ⋅ 𝑢𝑖𝑠è𝑟𝑒
𝑞
𝑑1
𝑢𝑣𝑖𝑒𝑛𝑛𝑒 + 𝑢𝑖𝑠è𝑟𝑒
⋅
=
⋅
𝑞
2
𝑑1
𝑑1
⇒ cos 𝑞, 𝑑1 =
1
10 ⋅ 20 + 2 ⋅ 18
= 41 ⋅ 10−4
4
4 ⋅ 10
2
⋅
Mineure « Data Science » Frédéric Pennerath
cos(𝑞, 𝑑2 ) =
1
3 ⋅ 20
= 21 ⋅ 10−4
4
2 2 ⋅ 10
⋅
𝒅
2
Implémentation du modèle tf-idf :
structure des index
Intégration dans les index :
• Chaque index de terme t est associé à son idft
• Chaque entrée dans l’index du terme t contient tft,d en plus du docID de d.
docID
𝒅
idft docID tft,d
vienne / 20 bits
isère / 18 bits
1/10
1/2
4/2
3/1
5/7
4/4
9/4
9/5
1
4.104
…
…
4
103
Algorithme de calcul des similarités :
• Les docID sont traités un par un en progressant en parallèle dans les index des termes
de la requête
• Le score de chaque docID est calculé.
• Une file de priorité contient en permanence les k meilleurs docIDs trouvés.
Mineure « Data Science » Frédéric Pennerath
Implémentation du modèle tf-idf :
traitement en ligne d’une requête
vienne / 20 bits
1/10
isère / 18 bits
1/2
4/2
3/1
5/7
4/4
9/4
9/5
DocId
Somme
tf-idf
DocId
Score
1
3
4
5
9
200
236
112
140
170
18
41
11,2.10
5,9.10-3-3
3
4
5
9
112
140
170
18
40
513
0,9.10-3
5,9.10
8,5.10
4
9
170
40
80
File des DocId en
cours de traitement
Mineure « Data Science » Frédéric Pennerath
File de priorité des 2
meilleurs DocID triés
par score décroissant
DocId
𝒅
1
4.104
3
2.104
4
104
5
14.104
9
2.104
Implémentation du modèle tf-idf :
parcours des index
Entrées : requête q, nbr. de réponses attendues k, table d’index I[]
Sortie : liste L des k meilleures réponses
créer une file de priorité F de couples(docID, score) maximale sur les scores
créer une file de priorité D de triplets (index, docID, tf-idf) minimale sur docID
pour chaque terme t de la requête q
insérer (I[t], d, tf * I[t].idf) dans D
où (d, tf) est la première entrée de l’index I[t] du terme t
fin pour
docIdCourant <- 1; score <- 0;
tant que D n’est pas vide
(index I, docID d, tf-idf) <- D.retirerMinimum()
si(d == docIdCourant)
score <- score + tf-idf
si I n’a pas été entièrement lu
(d, tf) <- lire prochaine entrée de I
D.insérer(I, d, tf * I.idf);
fin si
sinon
score <- score / norme[docIdCourant];
F.insérer((docIdCourant , score)); F.écrêter(k);
score <- 0; docIdCourant <- d
fin si
fin tant que
recopier F dans L; retourner L
Mineure « Data Science » Frédéric Pennerath
RECHERCHE D’INFORMATION
MODÈLE PROBABILISTE
ET
IMPLÉMENTATION
Mineure « Data Science » Frédéric Pennerath
Le modèle probabiliste :
1er principe : Probability Ranking Principle
Problème : à quelle condition 𝑅 = 1|𝑄, 𝐷 ?
Réponse : si
𝑃 𝑅 = 1 𝑄, 𝐷 > 𝑃(𝑅 = 0|𝑄, 𝐷)
𝑅 : relevance
𝑄 : query
𝐷 : document
Calcul d’un score 𝒔𝑸 (𝑫)
𝑠𝑄 (𝐷) =
=
∝
𝑃 𝑅 = 1 𝑄, 𝐷
𝑃 𝑅 = 0 𝑄, 𝐷
𝑃 𝐷 𝑅 = 1, 𝑄 × 𝑃 𝑅 = 1 𝑄
𝑃 𝐷 𝑅 = 0, 𝑄 × 𝑃 𝑅 = 0 𝑄
𝑃 𝐷 𝑅 = 1, 𝑄
𝑃 𝐷 𝑅 = 0, 𝑄
– Tri des documents par ordre décroissant de 𝑠𝑄 (𝐷)
– Ne gère pas la redondance entre documents
Mineure « Data Science » Frédéric Pennerath
Q
R
D
Le modèle probabiliste :
2ème principe : Binary Independance Model (BIM)
Hyp 1 : les termes d’un document sont indépendants cond à 𝑄 et 𝑅 :
𝑃 𝐷 𝑅 = 𝑟, 𝑄
=
𝑄, 𝑅
𝑃(𝑡 ∈ 𝐷|𝑅 = 𝑟, 𝑄)
𝑡∈𝐷
×
1 − 𝑃 𝑡 ∈ 𝐷 𝑅 = 𝑟, 𝑄
𝑡∉𝐷
Hyp 2 : les termes hors requête sont indépendants de 𝑅 :
𝑃 𝑡 ∈ 𝐷 𝑅 = 0, 𝑡 ∉ 𝑄 = 𝑃 𝑡 ∈ 𝐷 𝑅 = 0, 𝑡 ∉ 𝑄
⇒ 𝑠𝑄 (𝐷) ∝
𝑡∈𝑄∩𝐷
𝑝𝑡
1 − 𝑢𝑡
𝑝 = 𝑃 𝑡 ∈ 𝐷 𝑅 = 1, 𝑡 ∈ 𝑄
×
𝑎𝑣𝑒𝑐 𝑡
𝑢𝑡 = 𝑃 𝑡 ∈ 𝐷 𝑅 = 0, 𝑡 ∈ 𝑄
1 − 𝑝𝑡
𝑢𝑡
 Retrieval Status Value :
𝑅𝑆𝑉𝑄 𝐷 =
log
𝑡∈𝑄∩𝐷
Mineure « Data Science » Frédéric Pennerath
𝑝𝑡
1 − 𝑢𝑡
+ log
1 − 𝑝𝑡
𝑢𝑡
𝑇1
…
𝑇𝑉
D
Le modèle probabiliste :
Apprentissage des paramètres 𝑝𝑡 et 𝑢𝑡
Coefficient
de Laplace
Hyp : il existe un jeu d’apprentissage 𝐷 + 𝑄 ∪ 𝐷− 𝑄 pour la requête 𝑄 :
𝑝𝑡 =
𝑃 𝑡 ∈ 𝐷 𝑅 = 1, 𝑡 ∈ 𝑄 =
𝑢𝑡 = 𝑃 𝑡 ∈ 𝐷 𝑅 = 0, 𝑡 ∈ 𝑄 =
𝑁 𝐷 ∈ 𝐷+ 𝑄 , 𝑡 ∈ 𝐷 + 𝛼
𝑁 𝐷+ 𝑄
+ 2𝛼
𝑁 𝐷 ∈ 𝐷− 𝑄 , 𝑡 ∈ 𝐷 + 𝛼
𝑁 𝐷− 𝑄
+ 2𝛼
1 − 𝑢𝑡
𝑁 − 𝑑𝑓𝑡
= log
𝑢𝑡
𝑑𝑓𝑡 − 𝑁𝑄+ 𝑡
⇒ 𝑅𝑆𝑉𝑄 𝐷 =
≃ log
log
𝑡∈𝑄∩𝐷
Mineure « Data Science » Frédéric Pennerath
𝑑𝑓𝑡 − 𝑁𝑄+ 𝑡 + 𝛼
=
𝑁 − 𝑁𝑄+ + 2𝛼
Fréquence de 𝑡
dans les documents
Remarque : on retrouve les coefficients idf :
log
=
𝑁𝑄+ 𝑡 + 𝛼
𝑁𝑄+ + 2𝛼
𝑁 − 𝑑𝑓𝑡
𝑁
≃ log
= 𝑖𝑑𝑓𝑡
𝑑𝑓𝑡
𝑑𝑓𝑡
𝑝𝑡
+ 𝑖𝑑𝑓𝑡
1 − 𝑝𝑡
Le modèle probabiliste BM25
(Spärck Jones et al. 2000)
Problème : jeu d’apprentissage par requête contraignant / irréaliste
Hypothèses :
– Pas de documents pertinents : 𝑝𝑡 = 𝑃 𝑡 ∈ 𝐷 𝑅 = 1, 𝑡 ∈ 𝑄 =
1
2
– Mais prise en compte du nombre d’occurrences d’un terme dans le document
relativement à sa longueur
Résultat :
𝑅𝑆𝑉𝑄 𝐷
=
𝑖𝑑𝑓𝑡 ×
𝑡∈𝑄
𝑘1
𝑘1 + 1 𝑡𝑓𝑡,𝑑
𝐿
1 − 𝑏 + 𝑏 𝑑 + 𝑡𝑓𝑡,𝑑
𝐿
Fréquence de 𝑡 dans
le document 𝑑
Longueur du document 𝑑
Typiquement 𝑏 = 0,75 et 1,2 < 𝑘1 < 2
Mineure « Data Science » Frédéric Pennerath
Longueur moyenne
des documents
INTRODUCTION AU TALN
(TRAITEMENT AUTOMATIQUE DU
LANGAGE NATUREL)
PRÉTRAITEMENT DU TEXTE POUR
L’APPRENTISSAGE ET LA RECHERCHE
D’INFORMATION
Mineure « Data Science » Frédéric Pennerath
Définition du vocabulaire
Question : quels sont les termes à indexer ?
Plusieurs problèmes :
– Un terme est une notion spécifique à un langage.
Exemple : mot pain en français/anglais
=> Intérêt de dissocier les termes par langage pour des index plus courts
– Les « stop words » produisent des index inutiles et couteux :
Exemple : en français un, le, la, est. En anglais a, the, is etc.
– Synonymie : plusieurs mots désignent le même objet ou la même action :
Exemple : formes conjuguées des verbes, accord des noms et adjectifs réguliers ou
irréguliers, synonymes, etc.
→ nécessité de réaliser une recherche modulo les formes conjuguées
– Polysémie : un même mot peut avoir plusieurs sens
Exemple : les poules du couvent couvent.
Mineure « Data Science » Frédéric Pennerath
Prétraitement des textes à indexer
1.
Segmentation du texte : séparation d’un document en unités d’indexation
(paragraphes, pages, etc)
2.
Identification de la langue de chaque unité
3.
Tokenization : séparation du texte d’une unité en une liste de mots (token)
Problème complexe spécifique à la langue :
• En français, gestion des traits d’union, des apostrophes :
Ex : l’article = (l + article), fait-il = (fait + il) mais chef-d’œuvre = (chef-d’œuvre)
• En chinois, les mots sont une suite d’idéogrammes qui ne sont pas séparés par des espaces !
4.
Elimination des « stop words » de la langue
5.
Normalisation simple des mots (minuscules, accents)
6.
Décomposition de mots (allemand, etc)
7.
Normalisation par racinisation ou lemmatisation
Mineure « Data Science » Frédéric Pennerath
Identification de la langue (Baldwin 2010)
Vecteurs d’occurrences
pour des textes de
référence
Unité
textuel
Extraction
des n-grams
(n=1, 2 ou 3)
Vecteur
d’occurrences
des différents
items
Classifieur
(K-NN,
SVM,
Naive Bayes)
Langue
Remarques :
• Le cosinus est utilisé comme mesure de similarité pour K-NN.
• Pour une détection rapide, K-NN sur des vecteurs prototypes moyennés (quelques uns
par langue)
• La classification peut se faire sans tokenisation (sur le codage binaire brut)
Mineure « Data Science » Frédéric Pennerath
Racinisation versus lemmatisation des mots
Racinisation (stemming) :
–
Suite de règles ad hoc de simplification d’un mot spécifiques au langage pour
obtenir une racine (stem)
Ex: suis/es/est → être, ent/ant → *, *s → *, *ité → *, *ement → *, …
–
Stemmers : snowball.tartarus.org
–
Avantages : simple à implémenter, rapide
–
Inconvénient : approximatif
Ex de confusion : majorité / major → major
Ex de dissociation : contraindre → contraind / contraint → contraint
Lemmatisation (lemmatization) :
–
Analyse morpho-syntaxique : construction d’un arbre syntaxique
–
Chaque mot est étiqueté par son lemme (représentant), son genre, son
nombre, sa fonction, etc.
–
Avantage : rigoureux et précis (en théorie)
–
Inconvénient : couteux et gain faible dans le cadre de la RI
Mineure « Data Science » Frédéric Pennerath
Calcul de similarité entre termes
et correction orthographique
Que faire lorsqu’un terme de la requête n’est pas dans le dictionnaire ?
→ Correction orthographique :
– Distance d’édition : nombre minimal de transformations
•
•
Avec ajout, suppression, remplacement de caractères
Avec en plus permutation de caractère
– Problème de programmation dynamique :
𝑎1 … 𝑎𝑛−1 → 𝑏1 … 𝑏𝑚−1
𝑎1 … 𝑎𝑛 → 𝑏1 … 𝑏𝑚−1
Ajout
de bm
Remplacement
de an par bm
𝑎1 … 𝑎𝑛−1 → 𝑏1 … 𝑏𝑚
𝑎1 … 𝑎𝑛 → 𝑏1 … 𝑏𝑚
Suppression de an
𝑑 𝑎1 … 𝑎𝑛 → 𝑏1 … 𝑏𝑚
𝑑𝑠𝑎𝑛𝑠 𝑝𝑒𝑟𝑚𝑢𝑡. 𝑐𝑎𝑠, 𝑠𝑎𝑐 = 2
𝑑𝑎𝑣𝑒𝑐 𝑝𝑒𝑟𝑚𝑢𝑡. 𝑐𝑎𝑠, 𝑠𝑎𝑐 = 1
→
0
c→
1
ca→
2
cas→
3
→s
1
c→s
1
ca→s
2
cas→s
2
→sa
2
c→sa
2
ca→sa
1
cas→sa
2
→sac
3
c→sac
2
ca→sac
2
cas→sac
2
Temps ≈ 3 × 𝑛 × 𝑚
𝑑 𝑎1 … 𝑎𝑛−1 → 𝑏1 … 𝑏𝑚 + 𝑐𝑠𝑢𝑝𝑝𝑟 𝑎𝑛
𝑑 𝑎1 … 𝑎𝑛 → 𝑏1 … 𝑏𝑚 + 𝑐𝑎𝑗𝑜𝑢𝑡 𝑏𝑚
= 𝑚𝑖𝑛
𝑑 𝑎1 … 𝑎𝑛−1 → 𝑏1 … 𝑏𝑚−1 + 𝑐𝑟𝑒𝑚𝑝𝑙 𝑎𝑛 , 𝑏𝑚
Mineure « Data Science » Frédéric Pennerath
Calcul rapide de termes similaires :
approche fondée sur les permutations circulaires
Problème : le calcul de la distance d’édition d’un terme R de la requête avec tous les termes
du vocabulaire est trop long.
→ Se focaliser sur les termes partageant un grand nombre de lettres consécutives avec R
– Création d’un dictionnaire contenant toutes les rotations circulaires des termes.
– Recherche des termes du dictionnaire préfixés par R supprimé des k derniers caractères
– Calcul de la distance d’édition sur ces sous-ensembles de termes
Exemple : k = 2 et requête = linx
linx
linx
linx
li
inxl
in
nxli
nx
xlin
xl
Mineure « Data Science » Frédéric Pennerath
linux
lynx
lin
linux
lynx
lin
inuxl
ynxl
inl
nuxli
nxly
nli
uxlin
xlyn
xlinu
Calcul rapide de termes similaires :
approche fondée sur les n-grams
Mineure « Data Science » Frédéric Pennerath
A B
J R, Ti  

avec N R Ti  
A B
J  A, B  
n  gramsR   n  gramsTi 
n  gramsR   n  gramsTi 
N R Ti 
 R  n  1  Ti  n  1  N R Ti 
  g  LT 
gn  grams R
i
A B
A B
albâtre < albatros
Trigrams de
albatos
Idée : deux termes sont proches s’ils partagent
de nombreux n-grams.
Principe :
1.
Chaque terme est décomposé en n-grams.
Ex : trigrams(albatos) =
{alb,lba,bat,ato,tos}
2.
Chaque terme Ti du vocabulaire est
indexé selon ses n-grams.
3.
Les index des n-grams du terme R de la
requête sont parcourus.
4.
L’indice de Jaccard J(R, Ti) est calculé
dynamiquement par comptage des Ti dans
les index des n-grams de R.
5.
Seuls les termes Ti dont l’indice J(R, Ti) est
supérieur à un seuil donné sont
conservés.
6.
Leur distance d’édition d(R, Ti) est
finalement calculée.
alb
1
2
lba
1
2
bat
1
2
ato
tos
atr
1
tro
2
tre
1
ros
2
2
J albatos, albatre 
3
 0,429
553
J albatos, albatros 
3
 0,375
563
Elastic Search / Solr
Bases de données NoSQL orientée documents
• Index  base de données
• Type  ensemble de documents similaires 
tables
• Documents  tuples
• Champs colonnes
+ un vrai moteur de recherche d’information :
• Lucene : moteur de recherche Java
• Indexation en continue
• Fonctionnement en cluster
• Fonctionnalités avancées
Mineure « Data Science » Frédéric Pennerath
Téléchargement