[mathjax]

Pour les questions sur le cours, le projet, etc., utilisez le groupe de discussion google

Description du cours

Ce cours a pour but de présenter le domaine de la recherche d'information textuelle. Les TPs associés reposeront sur le développement d'un moteur de recherche complet. Les documents, questions et jugements de pertinences proviennent de la compétition INEX et ont été modifiés spécialement pour ce cours.

Ce cours est composé de six séances qui se décomposent de la façon suivante :

  1. Introductionprétraitements et lois
  2. Indexation
  3. Modèles de recherche d'information (transparents)
  4. Évaluation
  5. Recherche Web : Introduction & PageRank/Hits
  6. Apprentissage et Recherche d’Information
  7. Modèles de recommandation

Sources

En complément des cours et transparents, vous pouvez vous référer à ces deux livres :

  1. Le livre (anglais, gratuit et en ligne) "Introduction to Information Retrieval"
  2. Le livre (français) Recherche d'Information

Évaluation

La note finale sera la moyenne de la note d'examen et de projet (et au maximum de 20, les deux notes étant sur 25 points pour permettre de donner des points d'avance pour de très bon projets ou examens).

L’examen porte sur l’ensemble des cours - il y aura des questions de cours, ainsi que des questions plus poussées (ex. analyse d’un nouveau modèle de RI). Le seul document autorisé est une feuille manuscrite recto-verso.

Données

Voici les liens pour télécharger le jeu de données : échantillon pour l'indexation (7,4 Mo)grand échantillon (35 Mo) ou complet (3,3 Go).

Ces trois jeux de données sont similaires mais contiennent un nombre de documents croissant. Il y a quatre répertoires à l'intérieur :

  • stopwords contient des listes de mots de l'anti-dictionnaire
  • documents contient des fichiers contenant eux-même un ensemble de documents. Chaque fichier dans documents comporte un ensemble de documents de la collection. Afin d’en faciliter le traitement, chaque ligne est préfixée par une balise (une lettre) dont les significations sont les suivantes :
    • La balise I repère le début d’un document en en donnant l’identifiant (important car utilisé par les jugements de pertinence des requêtes test);
    • La balise T donne le titre du document - utile pour afficher une liste de résultat ;
    • La balise L donne les liens vers d’autres documents (liste d’identifiants séparés par des espaces). Cela sera utile lors de l’utilisation d’algorithmes utilisant les liens entres articles ;
    • La balise C donne le contenu
  • queries contient la liste des questions. Le format est similaire à celui des documents : I est la ligne identifiant, T est la ligne contenant la question qu'il faut utiliser, N une description du besoin d'information.
  • qrels contient les jugements de pertinence au format TREC: chaque ligne contient quatre champs (séparés par des espaces) :
    1. Identifiant de la question (champ I des questions)
    2. Champ à ignorer
    3. Identifiant du document (champ I des documents)
    4. Degré de pertinence (0 = non pertinent, > 0 pertinent avec 100 au maximum)

Resources

But des TPs

Le but du TP est d'évaluer un certain nombre de modèles de RI afin de comparer l'effet des différents composants (pré-traitement, modèle de RI, utilisation de PageRank, de modèle d'apprentissage). Le travail peut être effectué en binôme, mais il doit être deux fois plus important que s'il ne l'est pas (dans le rapport, précisez qui a fait quoi).

Les trois jeux de données doivent être utilisés de la manière suivante :

  • Le petit jeu de données doit être utilisé pour le développement
  • Les moyen/grand doivent être utilisés pour les expériences; utilisez le grand si vous avez une machine suivant puissante (espace disque ~ 8 Go, mémoire vive disponible ~1 Go)

Voici les instructions générales. Utilisez le forum si vous avez des questions !

  1. Construire un index d'un ensemble de documents après indexation en utilisant comme base (optionnel) les classes décrites dans les resources
    1. Lire les documents un par un; pour chaque document
      1. Conserver l'identifiant (et le titre si possible, pour l'affichage)
      2. Segmenter le texte (les chaînes maximales de caractères alphabétiques sont les mots)
      3. Pré-traitement des "mots" (tous optionnels) : filtrage par longueur, mise en minuscule, utilisation d'un anti-dictionnaire (stop words), racinisation (stemming) ou lemmatisation
  2. Construire 2/3 modèles de RI (ex. BM25, TF-IDF/cosine, modèle de langue)
    1. Commencez par écrire un modèle simple, qui renvoie comme score le nombre de mots en commun entre la question et le document (voir plus bas "Premier modèle de RI")
  3. Utilisation du PageRank pour biaiser les résultats; pour cela, utilisez le champ des documents qui contient la liste des liens sortants (sous forme d'identifiants de documents)
  4. Utilisation de modèles d'apprentissage. Par exemple, utilisez le modèle linéaire avec un coût "Hinge-Loss", ie [latex syntax=display]max(0, 1 - (s(d+) - s(d^-))[/latex]
  5. Évaluer avec MAP et/ou nDCG

Premier modèle de RI

Voici la marche à suivre pour utiliser l'index et retrouver l'ensemble des documents qui contiennent un des termes de la question [latex]q=(q_1, \ldots, q_n)[/latex]

  1. Récupérer l'ensemble des postings [latex]P_1[/latex], ..., [latex]P_n[/latex] correspondant aux termes [latex]q_1[/latex] à [latex]q_n[/latex]. La longueur d'un index [latex]P_i[/latex] (en nombre de postings) est [latex]L_i[/latex]
  2. On associe à chaque index un pointeur [latex]j(i)[/latex] qui permet de savoir quel est le posting courant, i.e. [latex]j(i)[/latex] donne le numéro du posting courant de l'index [latex]P_i[/latex]. Les pointeurs sont tous initialisés à 1.
  3. Boucle tant qu'un pointeur [latex]i[/latex] au moins vérifie [latex]j(i) \le L_i[/latex]
    1. Trouver le numéro de document minimum [latex]d_min[/latex] pour les postings [latex]P_{i,j(i)}[/latex] pour lesquels [latex]j(i) \le L_i[/latex]
    2. Récupérer les postings donc le document est [latex]d_{min}[/latex] parmi les postings [latex]P_{i,j(i)}[/latex] et calculer le score du document [latex]d_{min}[/latex]
    3. Pour tous les postings [latex]i[/latex] tels que le document de [latex]P_{i,j(i)}[/latex] est [latex]d_{min}[/latex], incrémenter le pointeur ([latex]j(i) \leftarrow j(i)+1[/latex])