# IDL - Cours 2 - idl_03_XML_TAL
Vous avez vu comment :
- structurer des fichiers XML (notion de hiérarchie entre les éléments, attributs, valeurs)
- faire des feuilles de style qui permettent de produire un affichage utile
Rentrons un peu plus dans la partie d'analyse linguistique :
#### Rappel des étapes, qui constituent un ==pipeline==, l'idée étant qu'on a besoin de l'étape n-1 pour réaliser l'étape n
1. :arrow_forward: She's = she is : **segmentation** (ou tokénisation)
2. book = livre, c'est un nom commun (pas le verbe "réserver") : analyse **morphosyntaxique**
3. She's tired = elle est fatiguéE, c'est "elle" le sujet de "être fatigué" : analyse **syntaxique**
4. Apple computer : ordinateur Apple : extraction des **entités nommées**.
5. They are best friends = elles sont meilleures amies, car vous savez qu'il s'agit de Jane et Claire // Son ordinateur = his computer. Vous savez que l'ordinateur est à Marc : analyse de **co-références**.
6. mad = énervée, dans ce contexte mad ne se traduit pas par folle ! : analyse **sémantique**
:::info
**Question 1** : Quelles sont les stratégies mises en place pour développer chacun des modules de ce pipeline ?
:::
---
## Deux grands courants d'approches en NLP :
---
### 1. Courant n°1 : Approches à base de règles
:bulb: idée : si j'observe X, alors j'applique l'annotation/l'étiquette Y.
On parcourt le texte à traiter et on applique les règles en fonction des motifs reconnus.
#### Exemple 0 : reconnaissance naïve de mots
Tant que je lis autre chose qu'un caractère espace, alors je suis en train de lire un mot.
#### Exemple 1 : reconnaissance d'une séquence spécifique : les nombres
**Prérequis :** Le texte a été séparé en mots au préalable.
Règles sous forme de graphes pour reconnaître (_et annoter_) les nombres de 2 à 99 :


(source : [Tutoriel Unitex](https://tln.lifat.univ-tours.fr/medias/fichier/correction-tutoriel-priseenmain-unitex-annotationcorpus-denis-maurel_1603455974191-zip?ID_FICHE=334600&INLINE=FALSE))
Le programme lit le texte "mot-à-mot" et lorsqu'il reconnaît un motif, les balises `<nombre>` et `</nombre>` sont ajoutées autour des éléments reconnus.
#### Exemple 2 : reconnaissance de motifs plus complexe : les longueurs
"Vers le sud, une jetée longue de deux mille mètres s’allongeait comme un bras sur la rade de Suez, et à quelques mètres environ de l'extrémité de la jetée se trouvait ma maison"

Remarque : ce graphe reconnaît des structures incorrectes...
- entre 0 et 1 mètre = ok
- entre 1 et 2 mètres = ok
- entre 0 et 0 mètre ???
#### Exemple 3 : détecter les phrases incorrectes
"*Je mange bleu sur la*."
:question: pourquoi cette phrase est-elle incorrecte ? Que faudrait-il vérifier ici ?
et celle-ci : "*Je mange souvent une maison sur la conscience.*" ?
---
:::warning
:question: À quelle occasion avez-vous déjà fait l'usage d'analyse à base de règles ?
:::
:::spoiler

Petit automate qui reconnaît...

:::
---
### 2. Courant n°2 : Approches à base d'apprentissage
:question: Quel est l'objectif de l'apprentissage ?
:::spoiler
L'objectif de l'apprentissage est de **prédire une sortie à partir d'une entrée**.
##### Exemples :
- mon entrée est un mot, je veux **prédire** sa catégorie grammaticale
- mon entrée est un profil utilisateur/trice, je veux **prédire** le film qu'il/elle veut voir ce soir
- mon entrée est un prompt ChatGPT, je veux **prédire** le mot qui suit.
:::
#### Apprentissage "supervisé"
L'algorithme s'entraîne sur des données "annotées" (*labeled*), c'est à dire que pour chaque donnée d'entraînement, on renseigne aussi l'output désiré.
- utilisé pour la **classification** : on veut prédire une catégorie (par exemple, la catégorie grammaticale d'un mot)
- la **régression** : on veut prédire une valeur dans un ensemble continu de réels, par exemple le prix d'une maison, le temps passé à regarder une vidéo par un.e utilisateurice de YouTube, etc.
-> données à annoter, bonne interprétabilité
#### Apprentissage "non supervisé"
L'algorithme infère des classes de similarité à partir de données "brutes" : "découverte" de structures sous-jacentes permettant de regrouper les données.
-> aucune donnée à annoter, fonctionne sur des tâches plus complexes, plus imprévisibles, interprétabilité plus faible
Exemple : depuis 2018, les (gros) modèles de langue tels que GPT, OpenAI, basés sur des réseaux de neurones, ont supplanté les modèles à base de n-grams qui consistaient à considérer que la probabilité d'apparition d'un mot ne dépendait que des (n-1) mots précédents.
#### Apprentissage "semi-supervisé"
On utilise à la fois des données annotées (peu) et non annotées (beaucoup)

Source [Wikipédia : Apprentissage semi-supervisé](https://fr.wikipedia.org/wiki/Apprentissage_semi-supervis%C3%A9)
-> moins de données à annoter, meilleure précision que le non supervisé complet
#### Apprentissage auto-supervisé (peu utilisé en NLP)
L'algorithme ajuste son modèle en fonction du résultat des décisions qu'il a prises (exemple : algorithme qui apprend à jouer à un jeu de plateau ou à un jeu vidéo, qui doit optimiser des décisions)
-----------------------------------------------------------
:question: Quelle est l'approche la plus gourmande en données selon vous ?
:question: Quelle est l'approche qui requiert le plus d'expertise linguistique selon vous ?
-----------------------------------------------------------
:::info
**Question 2** : On peut choisir l'approche qui nous semble la plus appropriée pour chaque tâche, mais en fonction de celle-ci on ne va pas s'intéresser aux mêmes "==observables==" : comment choisir ?
:::
## La notion de granularité en NLP
En fonction de la tâche à réaliser et de la méthode employée, on peut s'intéresser à différents niveaux de granularité :
:question: quels sont-ils ?
:::spoiler
caractère < n-grams de caractères < token < n-grams de tokens < phrase < fenêtres de phrases < paragraphe < document < corpus.
note : '-gram' = Du grec ancien γράμμα, grámma (« signe, écrit »). ([source](https://fr.wiktionary.org/wiki/-gram))
:::
### Exemple de tâche : l'identification de langue
##### Pierre de rosette

La **pierre de rosette** porte un texte de loi, écrit en deux langues, le grec et l'égyptien ancien, et trois écritures, grecque, égyptien démotique et hiéroglyphique.
Elle a permis à Jean-François Champollion de décrypter les hiéroglyphes. ([Voir la pierre](https://artsandculture.google.com/asset/the-rosetta-stone/DgH6pMM1guUUPA?ms=%7B%22x%22%3A0.5474523282432241%2C%22y%22%3A0.6541183090974514%2C%22z%22%3A9.5%2C%22size%22%3A%7B%22width%22%3A0.9253237106921882%2C%22height%22%3A0.6192138849030376%7D%7D))
##### Autre exemple de corpus parallèle

:question: quelle est la granularité la mieux adaptée à votre avis ?
#### niveau 'mot'
Idée : utiliser la loi de Zipf !
:::success
**La loi de Zipf :**
"*si on classe les mots par ordre de fréquences décroissantes, la fréquence du k -ème mot est approximativement proportionelle à 1/k*"
ex. : “the” représente près de **7 % du Brown Corpus** alors que près de la moitié du vocabulaire total du corpus sont des hapax.
Seuls **135 éléments** de vocabulaire sont nécessaires pour couvrir la **moitié du Brown Corpus**.

[source](https://members.loria.fr/KFort/files/fichiers_cours/IntroTAL.pdf)
:::
:::spoiler
1. on construit une base de données des "mots outils" pour toutes les langues
2. on compte leurs occurrences dans un texte donné
3. on compare avec notre BD
**Problèmes potentiels :**
- textes courts et code-switching :
*The sentence "j'ai mis ma gourde sur la table" is in French*
:::
#### niveau 'caractère' : utilisation des n-grams
:::spoiler
1. Pour chaque langue : rechercher la probabilité qu’un caractère C apparaisse après les deux précédents
2. Pour un texte : calculer la probabilité résultante pour chaque langue
**Problèmes :**
- Sarkozy mange. => polonais ou français ?
:::
:::info
Pour certaines tâches, le "grain caractère" suffit. Mais ce n'est pas le cas de toutes les tâches ! On va parfois avoir besoin de regarder
- les mots ou n-grams de mots (analyse morphosyntaxique),
- les phrases (analyse sémantique),
ex : "*Jamais vous ne m'entendrez dire : "ce produit est génial"*"
- les paragraphes (analyse en co-références)
**Question 3** : Comment est effectué ce découpage ?
:::
-----------------------------------------------------------
## S'atteler à notre tâche numéro 1 : le découpage en phrases - une tâche facile !
:question: Quelle est l'approche (règles ou apprentissage) la plus adaptée pour notre tâche n°1 : le découpage en phrases ?
:question: Quid du découpage en "mots" ?
### Démo librairie Spacy (python)

source : [https://spacy.io/api](https://spacy.io/api)
[Documentation pipeline nlp](https://spacy.io/usage/processing-pipelines)
:::danger
:warning: Ce n'est pas parce qu'une librairie existe et est joliment présentée qu'elle produit un résultat systématiquement correct.
ex : https://spacy.io/models/fr
:::
---
**Point analyse critique** : historique de l'intelligence artificielle

Amazon mechanical turk : plateforme web de production participative (crowdsourcing) qui vise à faire effectuer par des humains, contre (micro-)rémunération, des tâches plus ou moins complexes.
:question: quand participez vous vous-même à produire des données d'entraînement pour des algorithmes d'"IA" ?
[ChatGPT et les travailleurs Kenyans](https://usbeketrica.com/fr/observations/openai-est-accuse-d-avoir-fait-appel-a-des-travailleurs-kenyans-payes-deux-dollars-de-l-heure-pour-moderer-chatgpt)
---
#### Si il reste du temps : commencez à réfléchir à des expressions régulières pour reconnaître les phrases, puis les mots dans un texte.