le NLP à l'ére de l'IA.
Pr .BEN LAHMAR EL Habib
Evolution
Le traitement du Langage naturel
1954
L'expérience Georgetown – IBM
Traduction automatique
le 7 janvier 1954
agent conversationnel
1964 -1966
Approche basée sur des règles
Analyse de la phrase
Transfert vers le langage destination
Génération du texte traduit
Nécessite des dictionnaires et des règles
J’ai vu Driss avec des jumelles
Approches statistiques
N-Gram
Machine Learning
Apprendre à modéliser un problème à partir des données
Apprentissage supervisé
Observer des exemples et produire des généralisation
Exemples en entrée
Généralisation sur
un nouveau cas
Classification de texte
Comment représenter du texte pour que l’algorithme puisse l’analyser ?
Sac des mots … Bag of Words
Représenter les mots ou les phrases d’un texte par des vecteurs de
nombres réels, décrits dans un modèle vectoriel (Vector Space Model).
One-Hot Encoding
Exemple
Phrase 1: Les mangues sont jaunes.
Phrase 2: Les pommes sont rouges.
[1,0,0,0,0,0] [0,1,0,0,0,0] [0,0,1,0,0,0]
Si les mots de notre corpus sont {Les, mangues, sont, jaune,
pommes, rouge}.
la phrase 1 sera représentée par [1,1,1,1,0,0]
et la phrase 2 sera [1,0,1,0,1,1].
Apprentissage supervisé
Observer des exemples et produire des généralisation
Exemples en entrée
Généralisation sur
un nouveau cas
Classification
Nouvelle phrase
Prédiction
DataSet labels
Modèles de classification
SVM
Régression logistique
Pré-traitement
Étiquetage
Lemmatisation
Fréquence
Mots-vide
…
NLP avec du Deep Learning
Deep learning = learning hierarchical
representations
It's deep if it has more than one stage of non-linear feature transformation
Low-level Mid-level High-level Trainable
feature feature feature classifier
Feature visualization of convolutional net trained on ImageNet from [Zeiler & Fergus 2 01 3 ]
Deep Learning
ANN
2008 - Multi-task learning
L'apprentissage multitâche est une méthode générale pour
partager des paramètres entre des modèles formés sur
plusieurs tâches.
2013 - Word embeddings
Hypothèse de base :
Des mots qui apparaissent dans un contexte similaire ont
tendance à avoir une signification similaire
2013 - Word embeddings
Idée de base
Créer une tâche difficile
Pour la résoudre le réseau doit
apprendre une bonne
représentation
Par exemple : à partir d’un mot
prédire son contexte !?
=> word2vec skip-gram
Word2vec
[Link]
Similarité
[Link]
word2Vec
opérations algébriques
Bag-of-words : Limites
Exemple
Je recommande ce produit qui n’est pas mauvais
même vecteur
Je ne recommande pas ce produit qui est pas mauvais
L’information temporelle très importante
Un texte => une séquence temporelle de longueur variable
2013 - Neural networks for NLP
Recurrent neural networks
RNN
Apprendre des dépendances à long terme
= Propager le gradient loin dans le temps
LSTM
Avec LSTM
Avec LSTM
CNN
CNN
2014 - Sequence-to-sequence models
Réseau de neurones récurrent qui convertit une séquence de
données d'un domaine en entrée vers une nouvelle séquence
de données dans un autre domaine en sortie.
Deux réseaux de neurones récurrents, un premier réseau est
un encodeur et le second est un décodeur
Sutskever, I., Vinyals, O., & Le, Q. V. (2014). Sequence to sequence learning with neural
networks. In Advances in Neural Information Processing Systems
Seq2seq
Le modèle seq2seq a normalement une architecture codeur-
décodeur, composée de:
Un encodeur traite la séquence d'entrée et compresse les
informations dans un vecteur de contexte (également connu sous
le nom d'incorporation de phrases ou vecteur «pensé»/ sentence
embedding or “thought” vector) d'une longueur fixe . Cette
représentation devrait être un bon résumé de la signification de
la séquence source entière .
Un décodeur est initialisé avec le vecteur de contexte pour
émettre la sortie transformée. Les premiers travaux utilisaient
uniquement le dernier état du réseau de codeurs comme état
initial du décodeur.
L'encodeur et le décodeur sont tous deux des réseaux de neurones
récurrents, c'est-à-dire utilisant des unités LSTM ou GRU .
Encodeur – Décodeur
Encodeur – Décodeur (exemple )
Pourquoi ?
Une critique et un inconvénient et apparent de cette
conception de vecteur de contexte de longueur fixe est
l'incapacité de se souvenir des phrases longue.
Souvent, il a oublié la première partie une fois qu'il a terminé
le traitement de la totalité de l'entrée.
Le mécanisme d'attention est né ( Bahdanau et al., 2015 )
pour résoudre ce problème.
Attention
2015 - Attention
Un mécanisme d’attention permet à un
RNN de porter son attention sur
différentes parties de son entrée [x0 , …,
xT ].
1. Chaque élément de l’entrée est comparé à
l’état courant ht-1, pour générer des
coefficients de pondération αi .
2. La sortie ct (contexte) est une somme
pondérée de tous les éléments de l’entrée
(« Soft Attention »).
Bahdanau, D., Cho, K., & Bengio,Y. (2015). Neural Machine Translation by Jointly
Learning to Align and Translate. In ICLR 2015.
Attention
Soit une séquence source X de longueur n et essayez de sortir
une séquence cible Y de longueur m:
L'encodeur est un RNN bidirectionnel (ou tout autre type de
réseau récurrent) avec un état caché vers l'avant et un h
en arrière. Une concaténation simple de deux représente
l'état du codeur. La motivation est d'inclure les mots
précédents et suivants dans l'annotation d'un mot.
Formalisme
Le réseau du décodeur a un état caché
pour le mot de sortie à la position t, t=1,…,m
où le vecteur de contexte ct est un somme d'états masqués de la
séquence d'entrée, pondérée par les scores d'alignement:
Attention
l'attention dans le deep learning peut être largement interprétée
comme un vecteur de poids d'importance: afin de prédire
ou de déduire un élément, tel qu'un pixel dans une image ou un
mot dans une phrase, nous estimons à l'aide du vecteur d'attention
comment il est fortement corrélé avec (ou « assiste à » comme
vous avez pu le lire dans de nombreux articles) d'autres éléments
et prend la somme de leurs valeurs pondérées par le vecteur
d'attention comme approximation de la cible.
One word “attends” to other words in the same sentence differently.
Attention
1) Global attention: Uses all hidden states from the encoder to compute the context
vector. This is computationally costly as all words from source are considered for each
target word.
2) Local attention: Chooses a position in the source sentence to determine the window of
words to consider
3) Two-way attention: The same model attends to the hypothesis and premise, and both
representations are concatenated. However, this model can’t differentiate that the
alignment between stop words is less important than alignment between content words.
4) Self-attention: A mechanism relating different positions of a single sequence to
compute its internal representation.
5) Key-value attention: Output vectors are separated into keys to calculate attention and
values to encode the next-word distribution and context representation.
6) Hierarchical-nested attention: Two attention levels - first at the word level and
second at the sentence level. This highlights the highly informative components of a
document.
Attention
aij
Comment peuvent être calculés les aij. ?
(Il en existe pas mal) trois grandes familles
L'attention stricte (hard attention), qui focalise sur un seul
élément du contexte et qui est stochastique (pas de notion de
dérivée, la sélection de l'élément "élu" et la rétro-propagation se
font via des méthodes statistiques, échantillonnages, distributions)
L'attention "molle" (soft attention), la plus classique.
L'attention locale qui ne sélectionne que quelques éléments
proches sur lesquels porter l'attention. C'est un hybride entre la
soft et la hard attention.
Soft attention
[Link]
Attention
Attention
Les traits blues en gras montrent où le RNN mauve (décodeur)
porte son attention dans la séquence générée par le RNN vert
(encodeur).
Modèle profond pré-entraîné : la
révolution de 2018
Nouvelle approche est similaire à celle utilisée dans le
domaine de la vision par ordinateur
Entraîner un modèle complet à réaliser une tâche avec
beaucoup de données.
Puis, se servir de ce modèle pré-entraîné pour réaliser
d’autres tâches, en bénéficiant de l’apprentissage précédent.
C’est ce que l’on appelle le transfert d’apprentissage.
Transfer Learning
self-attention
Les mécanismes d'auto-attention (self-attention) sont
similaires, sauf qu'au lieu de s'opérer entre les éléments de
l'encodeur et du décodeur, ils s'opèrent sur les éléments
de l'input entre eux (le présent regarde le passé et le futur) et
de l'output entre eux aussi (le présent regarde le passé, vu que
le futur est encore à générer).
L’architecture Transformer
« Attention is All You Need ! » 2017
La motivation des concepteurs
du Transformer était de pallier
un des principaux inconvénients
des RNN à savoir l’impossibilité
de paralléliser leurs
traitements en raison du
caractère séquentiel des calculs
qu’ils effectuent.
« The animal did not cross the street because it was wide. » ou
« The animal did not cross the street because it was tired. »,
Modèle profond pré-entraîné
ULMFiT en janvier 2018.
ELMo en février 2018.
GPT-2 d’OpenAI en juin 2018.
BERT de Google en octobre 2018.
Algorithmes basés sur BERT (les plus
connus)
RoBERTa par Facebook,
MT-DNN par Microsoft
XLNet and ALBERT par Google et Toyota. Sorti en septembre
2019
BERT-mtl par IBM
Google T5 par Google
DistilBERT est une version plus petite, légère et rapide de BERT
FastBERT est une version plus rapide de BERT
CamemBERT est une version française développée Facebook AI,
Inria et Université de Sorbonne 2019 (trained on 138GB of
French text), dérivée de RoBERTa
BERT
BERT c'est pour Bidirectional Encoder Representations from Transformers.
L’utilisation de deux nouvelles tâches pour le pré-entraînement,
l’une au niveau des mots et l’autre au niveau des phrases.
BERT
BERT apprend de façon non supervisée
le modèle va apprendre à prédire ce mot masqué.
Entrée = [CLS] the man went to [MASK] store [SEP]
Entrée = [CLS] the man [MASK] to the store [SEP]
le modèle doit déterminer si la séquence suivante (suivant la
séparation[SEP]) est bien la séquence suivante.
Entrée = [CLS] the man went to [MASK] store [SEP]
he bought a gallon [MASK] milk [SEP]
Label = IsNext
Entrée = [CLS] the man [MASK] to the store [SEP]
penguin [MASK] are flight ##less birds [SEP]
Label = NotNext
BERT
BERT
Conclusion
Est-il possible d’apprendre une langue entièrement à partir
d’un corpus de texte
« Grounded Language Learning »(Y. Bengio)
apprendre un langage par expérience sensorielle plutôt que
par la seule lecture….
Part 2:
Outils
Bonne pratique
Outils
spacy
conda install -c conda-forge spacy
python -m spacy download en
import spacy
nlp = [Link]('en_core_web_sm')
Tag Description
.text The original word text
.lemma_ The base form of the word
.pos_ The simple part-of-speech tag
.tag_ The detailed part-of-speech tag
.shape_ The word shape – capitalization, punctuation,
digits
.is_alpha Is the token an alpha character?
.is_stop Is the token part of a stop list, i.e. the most
common words of the language?
Exemple
doc = nlp('"Let\'s go to N.Y.!"')
for token in doc:
print([Link])
Bni mellal
Bni ---- mellal
If you need → dict → tokens
Ngram
Bigram
If; yo ; ou; ne ; ee; ed
nee ; eed ; ees
nee d/s
Exemple
Named Entities with spaCy
sentence = nlp(u'Google's monthly revenue is $6 million')
for token in sentence:
print([Link], end=' | ')
print('
_______________________________________________
_______')
for ent in [Link]:
print([Link]+' - '+ent.label_+' -
'+str([Link](ent.label_)))
Visualizing named entity
from spacy import displacy
doc = nlp(u'Over last few years USA generates $6
million revenue.')
[Link](doc, style='ent', jupyter=True)
Visualizing the dependency
from spacy import displacy
document = nlp(u'Bangladesh is a beautiful country')
[Link](document, style='dep', jupyter=True,
options={'distance': 110})
Stemming with NLTK
import nltk
from [Link] import *
p_stemmer = PorterStemmer()
words =
['run','runner','running','ran','runs','easily','fairly']
for word in words:
print(word+' --> '+p_stemmer.stem(word))
Snowball Stemmer
from [Link] import SnowballStemmer
s_stemmer = SnowballStemmer(language='english')
words = ['run','runner','running','ran','runs','easily','fairly']
for word in words:
print(word+' --> '+s_stemmer.stem(word))
Lemmatization and POS tagging with
spaCy
doc = nlp(u"He is a runner running in a competition because
he loves to run since he ran today")
for token in doc:
print(f'{[Link]:{12}} {token.pos_:{6}}
{[Link]:<{22}} {token.lemma_}')
Stop Words with spaCy
import spacy
nlp = [Link]('en_core_web_sm')
print([Link].stop_words)
Checking a specific token whether it is
a stop word or not.
[Link]['myself'].is_stop
[Link]['mystery'].is_stop
A suivre