Notes de cours hebdomadaires

La recherche d'informations

Quatorze semaines pour comprendre comment on trouve une aiguille dans une botte de foin numérique — de la loi de Zipf et de l'entropie de Shannon jusqu'à PageRank et aux systèmes de recommandation, en passant par les expressions régulières, les modèles vectoriels et probabilistes, et les index inversés.

À propos de ces notes

La recherche d'informations est le domaine de l'informatique qui s'occupe de l'information non structurée : des textes, des courriels, des pages web, des images — tout ce qui n'a pas été conçu pour être traité par une machine. C'est un domaine ancien, aussi vieux que l'ordinateur, mais que le web a entièrement réinventé.

Chaque semaine présente un thème, l'illustre par des exemples concrets, des formules et du code, puis se termine par un quiz qui vous permet de vérifier votre compréhension. Les notes sont conçues pour être lues confortablement à l'écran, en mode clair comme en mode sombre, et sont compatibles avec les lecteurs d'écran. Choisissez une semaine ci-dessous pour commencer.

Module 1 — Fondations et information non structurée

Préalables

Les fondations : vecteurs, algorithmique et probabilités

Vecteurs, matrices, produit scalaire et cosinus ; notation grand-O ; moyenne, variance, corrélation de Pearson et théorème de Bayes.

Lire la semaine 1
Information

L'information non structurée, Zipf et Shannon

Données structurées, semi-structurées et non structurées ; lois de Zipf et de Mandelbrot, longue traîne, entropie de Shannon, Lempel-Ziv, XML et RDF.

Lire la semaine 2
Corpus

Les sources de données

Le web et sa mesure, Wikipédia, réseaux sociaux, bibliothèques numériques, données ouvertes, Internet des objets — et le corpus Gutenberg du cours.

Lire la semaine 3

Module 2 — Les expressions régulières

Regex

Les expressions régulières en pratique

Classes de caractères, quantificateurs, ancrages, parenthèses capturantes, tests avant/arrière, groupement atomique — et le laboratoire grep.

Lire la semaine 4
Théorie

La mécanique des expressions régulières

Hiérarchie de Chomsky, automates finis déterministes et non déterministes, explosion combinatoire et attaques ReDoS, puis java.util.regex.

Lire la semaine 5

Module 3 — Les modèles de recherche textuelle

Modèles

Le modèle booléen et les modèles vectoriels

Opérateurs logiques, synonymie et polysémie, troncature et lemmatisation, pondération tf-idf, similarité cosinus, LSI et embeddings.

Lire la semaine 6
Probabilités

Modèles probabilistes et modèles de langue

Le Probability Ranking Principle, la valeur de statut de recherche, les n-grammes, les lissages de Laplace et de Good-Turing, les grands modèles de langue.

Lire la semaine 7
Index

Index inversés, ergonomie, précision et rappel

Index inversés et binaires, arbres et tableaux de suffixes, ergonomie de la recherche, puis les mesures de précision, de rappel et le score F.

Lire la semaine 8

Module 4 — Un moteur de recherche dans votre application

Lucene

Lucene : indexer et chercher

Documents, champs et analyseurs ; création d'un index et interrogation en Java ; la syntaxe de requête ; Elasticsearch, OpenSearch et Wikipédia.

Lire la semaine 9
Analyse

Troncature et analyse linguistique

Analyseurs par langue, racinisation Snowball, indexation multilingue ; l'effet concret de la troncature sur le rappel et la précision.

Lire la semaine 10

Module 5 — Algorithmique des moteurs de recherche web

PageRank

MapReduce, graphes et PageRank

La logistique d'un moteur web, le parallélisme et MapReduce ; graphes dirigés, chaînes de Markov, matrices ergodiques et l'algorithme PageRank.

Lire la semaine 11
HITS

HITS, hubs et autorités

L'algorithme de Kleinberg, sa convergence, sa comparaison expérimentale avec PageRank — et un mot sur le référencement web.

Lire la semaine 12

Module 6 — Filtrage collaboratif et recommandation

Utilisateurs

Le filtrage collaboratif utilisateur-utilisateur

La matrice article-utilisateur, la corrélation de Pearson, la moyenne pondérée, l'amplification des similitudes, le cold start et la mise à l'échelle.

Lire la semaine 13
Articles

Le filtrage par article et son évaluation

L'algorithme item-to-item d'Amazon, Slope One, la validation croisée et la mesure d'erreur All-But-1.

Lire la semaine 14

Ressources transversales

Aide-mémoire

Pense-bête

Logarithmes, vecteurs et matrices, notation grand-O, probabilités, théorème de Bayes, entropie, loi de Zipf et syntaxe complète des expressions régulières.

Consulter le pense-bête
Définitions

Glossaire

Une centaine de termes du domaine, de l'analyse syntaxique au web sémantique, définis et reliés aux semaines où ils apparaissent.

Ouvrir le glossaire
Pour aller plus loin

Bibliowebographie

Les manuels, les livres en accès libre, les articles fondateurs et les logiciels cités au fil des quatorze semaines.

Voir les références
Navigation

Rechercher dans les notes

Un moteur de recherche qui parcourt les quatorze semaines, section par section, sans quitter le navigateur. Un index inversé, forcément.

Ouvrir la recherche

À propos de l'auteur

Daniel Lemire

Professeur d'informatique · Université du Québec (TÉLUQ), Montréal

Les recherches de Daniel Lemire portent sur les structures de données et les algorithmes qui permettent d'interroger très rapidement de grands volumes de données — précisément l'enjeu central de la recherche d'informations moderne.

Il a conçu les Roaring Bitmaps, un format d'index compressé devenu un standard : il est utilisé au cœur d'Apache Lucene — le moteur que vous programmerez à la semaine 9 — et donc d'Elasticsearch et de Solr, ainsi que d'Apache Druid, de ClickHouse et du moteur SQL de YouTube. Ses travaux sur la compression des index inversés (FastPFOR, SIMD-BP128) réduisent la taille mémoire des index tout en accélérant leur décompression.

Il est aussi l'un des auteurs de simdjson, une bibliothèque capable d'analyser plusieurs gigaoctets de JSON par seconde, et l'auteur de l'algorithme Slope One de filtrage collaboratif, que vous rencontrerez à la semaine 14. Son blogue, suivi par une vaste communauté de développeuses et de développeurs, aborde la performance, les algorithmes et la programmation. Il figure parmi les 2 % de scientifiques les plus cités au monde (classement Stanford/Elsevier).