Introduction au NLP
Georges-André Silber, École des mines de Paris, 2023/2024
Première séance (12/12/2023)
Deuxième séance (19/12/2023)
Troisième séance (8/1/2024)
Tokenisation pour l'apprentissage
- Tiktoken (OpenAI) (voir un exemple d'utilisation)
- SentencePiece (Google) (un article introductif sur le sujet, un autre)
- Travaux pratiques "tokenization du droit"
Grammaires
Quatrième séance (9/1/2024)
Cinquième séance (15/1/2024)
- Modèles de langue, Benoît Sagot
- Intro to Large Language Models (Andrej Karpathy) [transparents]
- The Unreasonable Effectiveness of Recurrent Neural Networks: un article de blog un peu ancien (2015) mais qui donne une vue générale de la manière dont on entraîne les modèles, même si aujourd'hui le RNN est remplacé par un Transformer
- Have you ever wanted to inference a baby Llama 2 model in pure C? No? Well, now you can!
- Démos de llama et codellama de Meta, download des données
- Mistral 7B
- Tutoriels sur les réseaux de neurones d'Andrej Karpathy
Sixième séance (16/1/2024)
- Retour sur la propagation arrière du gradient (notebook)
- Projet de recherche "Droit quotidien" (présentation ProLaLa - POPL 2023), sujet de thèse
- Choix et démarrage des projets
Projets
Les projets sont à rendre avant le 4/2/2024 à 23h59.
1. Consolidation automatique: classification des alinéas modificateurs publiés au JORF
L'objectif de ce projet est de créer une architecture d'apprentissage automatique permettant d'obtenir un modèle pour classifier automatiquement les alinéas modificateurs des textes parus au JORF, selon les types de modifications que ces alinéas effectuent sur les textes cibles.
Les données sources sont tous les JORF depuis 1990, données identiques à ce qui était fourni pour le TP 2:
Les données à produire doivent respecter le format CSV tel que généré par le projet dqclassify qui est un classifieur des alinéas modificateurs entièrement symbolique (expressions régulières, automate ad-hoc). Ce classifieur fourni un résultat assez correct, mais il se trompe parfois: le modèle généré par apprentissage automatique devra permettre d'améliorer la performance de ce classifieur symbolique en identifiant ses "loupés" par comparaison avec le modèle obtenu.
Les différentes catégories sont définies dans le fichier categories.py. Voici l'intégralité des données traitées par cet outil, obtenues avec le classifieur:
Le fichier README.md décrit la structure de ces données et la manière dont elles ont été obtenues. Le fichier tokenizer.py contient l'automate qui effectue la classification.
Parmi les données, vous devrez définir vos jeux d'entraînements et de tests. Commencez par explorer ces données pour comprendre les différentes catégories. Cette phase va être cruciale car c'est la qualité de ces données qui va déterminer la qualité de votre apprentissage.
Votre propre projet de classification pourra être écrit dans le langage de votre choix, et devra être rendu sous la forme d'un dépôt Github privé sur lequel vous m'inviterez (identifiant Github gasilber
). Intégrez à votre projet un README.md
le documentant et présentant les résultats de classification obtenus, en les comparant au résultats de dqclassify
. Vous pouvez également produire un notebook Jupyter pour restituer vos résultats.
2. Reconnaissance automatique des références juridiques dans les textes de loi
Projet non choisi.
3. Anonymisation automatique de la jurisprudence
Les données sources sont composées de 3500 décisions de la cour de cassation non anonymisées. Ces données ne doivent être en aucun cas être rediffusées ou publiées.
Le projet consiste à remplacer le nom de tous les demandeurs/demanderesses et défendeurs/défenderesses des décisions par des lettres. Ainsi M. Michel Denemar
, doit être remplacé dans tout le document par une lettre qui lui sera affecté, par exemple M. X
, y compris les formes dérivées comme M. Denemar
. D'autre part, Mme Sophie Fonsec
doit être transformé en Mme Y
. Des formes comme M. Jean-Pierre Rognon, époux de Foix
doivent être transformées en M. X, époux Y
. Les noms de la cour ou des avocats ne doivent pas être transformés. Une lettre affectée à une personne doit être réutilisée pour la même personne dans tout le document.
Votre projet pourra être écrit dans le langage de votre choix, et devra être rendu sous la forme d'un dépôt Github privé sur lequel vous m'inviterez (identifiant Github gasilber
). Intégrez à votre projet un README.md
le documentant et présentant les résultats. Vous pouvez également produire un notebook Jupyter pour restituer vos résultats.
4. Création d'une IA générative de droit pénal
L'objectif de ce projet est de créer un modèle de langue génératif gendp
à partir des données du droit pénal. Ce modèle de langue sera généré à partir d'une architecture de type nanoGTP ou llama2.c.
L'étape minimale est d'obtenir un générateur de droit pénal qui quand on le lance génère une suite de mots "ressemblant" à du droit pénal. On doit également pouvoir lui passer une amorçe qu'il continuera.
Données sources: tous les codes juridiques français en Markdown. Parmi ces codes, le droit pénal peut être vu comme le code pénal, le code de procédure pénale, le code de la sécurité intérieure, le code pénitentiaire, le code de l'entrée et du séjour des étrangers et du droit d'asile et du code de la route.
Il est fortement recommandé de visionner Let's build GPT: from scratch, in code, spelled out d'Andrej Karpathy.
Votre projet pourra être écrit dans le langage de votre choix, et devra être rendu sous la forme d'un dépôt Github privé sur lequel vous m'inviterez (identifiant Github gasilber
). Intégrez à votre projet un README.md
le documentant et présentant les résultats. Vous pouvez également produire un notebook Jupyter pour restituer vos résultats.
5. Rédaction d'un article critique sur l'article de l'ACM The End of Programming
A partir des ressources ci-dessous sur le point de vue de Matt Welsh concernant The end of programming,l'objectif de ce projet est de rédiger un article critique de type vulgarisation scientifique, comme par exemple ceux que l'on peut trouver dans un journal comme Sciences et Avenir - La Recherche ou Pour la Science.
L'article devra être rédigé en LaTeX et comportera une bibliographie, ainsi que des liens cliquables vers les ressources citées. Le livrable du projet sera soit un lien vers un projet sur Overleaf, soit un fichier zip ou tar.gz contenant le source et les figures de l'article. L'article devra faire entre 1000 et 2000 mots, hors bibliographie et figures.
Vous pouvez vous aider d'outils de type ChatGPT, à condition d'accompagner votre article d'un document annexe (non compté dans le quota de mots) listant tous les "prompts" et les résultats que vous avez obtenus.
- The End of Programming [ACM]
- Large Language Models and The End of Programming - CS50 Tech Talk with Dr. Matt Welsh
6. Rédaction d'un article critique sur les approches hybrides opposées aux approches Deep Learning
A partir des ressources ci-dessous sur la controverse opposant les tenants des approches symboliques et hybrides d'un côté et ceux pronants une approche "full deep learning", illustrée par les tensions entre Gary Marcus et Yann LeCun, l'objectif de ce projet est de rédiger un article critique de type vulgarisation scientifique, comme par exemple ceux que l'on peut trouver dans un journal comme Sciences et Avenir - La Recherche ou Pour la Science.
L'article devra être rédigé en LaTeX et comportera une bibliographie, ainsi que des liens cliquables vers les ressources citées. Le livrable du projet sera soit un lien vers un projet sur Overleaf, soit un fichier zip ou tar.gz contenant le source et les figures de l'article. L'article devra faire entre 1000 et 2000 mots, hors bibliographie et figures.
Vous pouvez vous aider d'outils de type ChatGPT, à condition d'accompagner votre article d'un document annexe (non compté dans le quota de mots) listant tous les "prompts" et les résultats que vous avez obtenus.