Vous êtes sur la page 1sur 4

IFT-4022/IFT-7022 Traitement automatique de la langue naturelle

Travail pratique # 1
Expressions régulières, modèles N-grammes et classification de textes
Automne 2022
Proposé par Luc Lamontagne

OBJECTIF :
• Se familiariser à l’analyse de textes et aux difficultés que cela comporte même pour accomplir
des tâches relativement simples.
• Mener des expérimentations avec les expressions régulières pour extraire des informations dans
des textes.
• Comprendre comment construire un modèle N-gramme simple à partir d’un corpus de textes.
• Utilisez des modèles N-grammes pour choisir les mots les plus appropriés à un contexte.
• Utilisez des techniques de classification de textes pour catégoriser des textes courts.

INSTRUCTIONS :
• Matériel disponible le 12 septembre.
• Ce travail sera noté sur 100 et vaut 20% de la note du cours.
• Rapport et code : À remettre le 30 septembre sur MonPortail, le tout compressé en format zip.
• Format de rapport : PDF.
• Références : Chapitres 2, 3, 4 et 5 de la 3e édition du livre de Jurafsky et Martin.
• Seul langage de programmation autorisé: Python 3.
• Ressources disponibles sur le site du cours (tp1_fichiers) :
o Des fichiers de textes pour mener vos expérimentations (fichiers d’entraînement, de
tests et de solutions).
o Du code pour démarrer votre travail et faciliter notre correction des travaux. Merci de
suivre les instructions pour chacun des problèmes à résoudre.
• Librairies autorisées :
o Expressions régulières : module re de python.
o Modèles de langue N-grammes : librairie NLTK.
o Classification de textes : librairie Scikit-learn.
o Normalisation de textes : librairies Spacy (lemmatisation) et NLTK (Porter Stemmer).

TÂCHE 1 – EXPRESSIONS RÉGULIÈRES – EXTRACTION D’INFORMATION À PARTIR DE RECETTES

Utilisez des expressions régulières pour repérer les aliments et les quantités de chaque item du fichier
data/ingredients.txt. Compléter la fonction get_ingredients du fichier t1_extraction_ingredients.py afin de
retourner la quantité et l’ingrédient d’un item. Par exemple,
get_ingredients("2 cuillères à café de poudre à pâte")

devrait retourner la paire :

"2 cuillères à café", "poudre à pâte"


IFT-4022/IFT-7022 Traitement automatique de la langue naturelle

Présentez dans votre rapport les performances que vous obtenez avec vos expressions régulières. Les
solutions sont disponibles dans le fichier data/ingredients_solutions.txt. Discutez dans votre rapport des
principales erreurs commises par vos expressions régulières.

TÂCHE 2 – MODÈLES DE LANGUE N-GRAMMES - COMME LE DISAIT LE PROVERBE…

Pour cette tâche, vous allez construire des modèles de langue qui vous aideront à compléter des
proverbes incomplets en ajoutant un mot au bon endroit. Par exemple, étant donné la phrase incomplète:
aide-toi, le *** t’aidera

et la liste de mots candidats [médecin, ciel, professeur, whisky], votre logiciel doit retourner la séquence la
plus probable qui, souhaitons-le, sera
aide-toi, le ciel t’aidera

a) En utilisant NLTK, entraînez des modèles N-grammes de mots (N = 1 à 3) à partir du fichier


data/proverbes.txt. Quelques précisions :
• Structure : Un proverbe = 1 ligne du fichier.
• Segmentation : Ne pas segmenter un proverbe en sous-phrases.
• Tokénisation : Utilisez NLTK pour tokéniser les mots des proverbes.
• Prétraitement:
o Aucune normalisation n’est appliquée aux mots.
o Tous les caractères devraient être déjà en minuscule.
o J’ai retiré la ponctuation à la fin des proverbes.
o Il faut ajouter des symboles de début et de fin de phrases.
• Lissage : Effectuez un lissage de Laplace sur vos modèles.
• Code : Utilisez le fichier t2_completer_proverbes.py pour démarrer votre code

b) Compléter les proverbes:


• Compléter un proverbe consiste à remplacer les étoiles (un mot masqué) par l’un des mots de la
liste de choix.
• Évaluez la performance des modèles N-grammes à l’aide du fichier de test
data/test_proverbes.txt.
• Mener les expérimentations en utilisant à tour de rôle le logprob et la perplexité pour
sélectionner le meilleur mot.
• Analyses à inclure dans votre rapport :
o Présentez les résultats obtenus.
o Les différents modèles capturent-ils bien le langage utilisé dans les proverbes ?
o Quel est l’impact de la longueur de l’historique ?
o Quelle est la différence entre les résultats obtenus avec le logprob et la perplexité ?
Expliquez.

TÂCHE 3 – CLASSIFICATION DE TEXTES – ANALYSE DE SENTIMENT

Cette tâche vise à classifier des critiques de produits selon leur polarité (positive ou négative). Un corpus
d’entraînement, disponible sur le site du cours, contient des critiques positives et négatives que vous
utiliserez pour entraîner des classificateurs binaires. Un corpus de test est également disponible pour
évaluer la performance de ces classificateurs.
IFT-4022/IFT-7022 Traitement automatique de la langue naturelle

Plus précisément, la tâche consiste à évaluer un analyseur de sentiment construit à partir des mots des
textes. Vous devez comparer 3 configurations :
• Les mots des textes sans normalisation
• Les mots normalisés avec le stemming
• Les mots normalisés avec la lemmatisation

On vous demande de comparer les algorithmes d’apprentissage suivants pour accomplir cette tâche : naïf
bayésien (Naive Bayes) et régression logistique.

Quelques consignes :
• Vous devez utiliser la librairie Scikit-learn pour entraîner les classificateurs.
• On utilise les comptes de mots pour la pondération des sacs de mots (bag of words - BOW).
• Évaluez la performance de chacun des modèles à l’entraînement et également en test (voir
fichiers disponibles sur le site du cours).
• Vous devrez évaluer la performance de ces algorithmes en termes d’exactitude (accuracy) et
analyser vos résultats à l’aide de matrices de confusion (contingence).
• Je laisse à votre discrétion le choix d’hyperparamètres de ces modèles. Vous pouvez prendre
ceux par défaut dans Scikit-learn.
• Débutez votre travail à partir du fichier t3_analyse_sentiment.py. Ne pas modifier la signature de
la fonction train_and_test_classifier que nous utiliserons pour faire nos tests automatisés. Vous
pouvez cependant ajouter tout le code que vous jugez nécessaire.
• Utilisez Spacy pour la lemmatisation de mots et NLTK pour le stemming de Porter.

Présentez dans votre rapport les éléments suivants :


• Quelles sont les performances obtenues avec chacun des classificateurs ? Notez-vous des
différences significatives au niveau de la performance et de l’exécution du code ?
• Est-ce que certains mots semblent jouer un rôle plus important ?
• Recommandez la configuration qui vous semble la plus intéressante.

Quelques liens utiles pour cette tâche :


• Scikit-learn: http://scikit-learn.org/stable/index.html
• Quelques classes/fonctions utiles : MultinomialNaiveBayes, LogisticRegression, CountVectorizer,
cross_val_score, métriques d’évaluation.
• Stemming – NLTK : voir les exemples sur le site du cours.
• Lemmatisation – Spacy : voir les exemples sur le site du cours.

TÂCHE 4 – CLASSIFICATION DE TEXTES - IDENTIFICATION DE LANGUE

En utilisant la librairie Scikit-learn, entraînez des classificateurs de type Naive Bayes et Régression
logistique pour identifier la langue d’origine d’un nom. Par exemple, votre logiciel devrait tenter de
déterminer que :
• Lamontagne à French
• Nguyen à Vietnamese
• Yassine à Arabic
• etc.

Vos classificateurs seront construits non pas à partir de N-grammes de mots comme dans la tâche 3, mais
à partir de N-grammes de caractères. Les fichiers à utiliser pour entraîner vos modèles sont disponibles
sur le site du cours (fichiers du répertoire data/names). Quelques précisions :
- Langue d’origine : Spécifiée dans le nom du fichier (total de 18 fichiers)
IFT-4022/IFT-7022 Traitement automatique de la langue naturelle

- Un nom = 1 ligne du fichier = 1 exemple d’entraînement


- Tokénisation : Effectuée au niveau des caractères (pas au niveau des mots).
- Normalisation : Assurez-vous que tous les caractères sont en minuscule et qu’il n’y a pas
d’espace en début et fin de mot. Une fonction a été ajoutée au code pour convertir les noms en
caractères ASCII (par ex. Noël à Noel).

Voici quelques consignes pour cette tâche :


• Débutez votre travail à partir du fichier t4_classification_noms.py. Les fonctions à développer
sont train_classifiers, get_classifier, origin et evaluate_classifier. Ne pas modifier les signatures
de ces fonctions.
• Évaluez la performance de chacun des modèles à l’entraînement et également en test (voir
fichiers disponibles sur le site du cours).
• Faites varier la composition des N-grammes (unigrammes, bigrammes, trigrammes ou
multigrammes) et analyser les résultats.
• Discutez des principales sources d’erreur de vos modèles.

ÉVALUATION DU TRAVAIL
T1 – Extraction d’ingrédients avec des expressions régulières 25%
T2 – Modèles N-grammes pour compléter des proverbes 25%
T3 – Classification de textes – Analyse de sentiment 20%
T4 – Classification de textes - Identification de langue 20%
Qualité du rapport 10%

Vous aimerez peut-être aussi