Introduction aux modèles de langue

Réseaux de neurones récurrents (RNN) pour la modélisation du langage avec Keras

David Cecchini

Data Scientist

Probabilité d'une phrase

Beaucoup de modèles disponibles

  • Probabilité de « I loved this movie ».
  • Unigramme
    • $$P(\text{sentence}) = P(\text{I})P(\text{loved})P(\text{this})P(\text{movie})$$
  • N-gramme
    • N = 2 (bigramme) : $$P(\text{sentence}) = P(\text{I})P(\text{loved} | \text{I})P(\text{this} | \text{loved})P(\text{movie} | \text{this})$$
    • N = 3 (trigramme) : $$P(\text{sentence}) = P(\text{I})P(\text{loved} | \text{I})P(\text{this} | \text{I loved})P(\text{movie} | \text{loved this})$$
Réseaux de neurones récurrents (RNN) pour la modélisation du langage avec Keras

Probabilité d'une phrase (suite)

  • Skip-gram
    • $$P(\text{sentence}) = P(\text{context of I} | \text{I})P(\text{context of loved} | \text{loved}) \ $$ $$P(\text{context of this} | \text{this})P(\text{context of movie} | \text{movie})$$
  • Réseaux neuronaux
    • La probabilité de la phrase est donnée par une fonction softmax sur la couche de sortie du réseau
Réseaux de neurones récurrents (RNN) pour la modélisation du langage avec Keras

Lien avec les RNN

Les modèles de langue sont partout dans les RNN !

  • Le réseau lui-même

Les modèles RNN peuvent être vus comme un modèle de langue, puisqu'ils peuvent prédire le mot suivant.

Réseaux de neurones récurrents (RNN) pour la modélisation du langage avec Keras

Lien avec les RNN (suite)

  • Couche d'intégration (embedding)

Affiche une vue d'ensemble des couches d'un modèle. La couche d'intégration doit suivre la couche d'entrée et génère une représentation dense des mots.

Réseaux de neurones récurrents (RNN) pour la modélisation du langage avec Keras

Construire des dictionnaires de vocabulaire

# Get unique words
unique_words = list(set(text.split(' ')))
# Create dictionary: word is key, index is value
word_to_index = {k:v for (v,k) in enumerate(unique_words)}
# Create dictionary: index is key, word is value
index_to_word = {k:v for (k,v) in enumerate(unique_words)}
Réseaux de neurones récurrents (RNN) pour la modélisation du langage avec Keras

Prétraiter l'entrée

# Initialize variables X and y
X = []
y = []

# Loop over the text: length `sentence_size` per time with step equal to `step` for i in range(0, len(text) - sentence_size, step):
X.append(text[i:i + sentence_size]) y.append(text[i + sentence_size])
# Example (numbers are numerical indexes of vocabulary):
# Sentence is: "i loved this movie" -> (["i", "loved", "this"], "movie")
X[0],y[0] = ([10, 444, 11], 17)
Réseaux de neurones récurrents (RNN) pour la modélisation du langage avec Keras

Transformer de nouveaux textes

# Create list to keep the sentences of indexes
new_text_split = []

# Loop and get the indexes from dictionary for sentence in new_text:
sent_split = []
for wd in sentence.split(' '):
ix = wd_to_index[wd]
sent_split.append(ix)
new_text_split.append(sent_split)
Réseaux de neurones récurrents (RNN) pour la modélisation du langage avec Keras

Passons à la pratique !

Réseaux de neurones récurrents (RNN) pour la modélisation du langage avec Keras

Preparing Video For Download...