Use word embeddings

Les tutoriels précédents (Binary categorization et Multi-class categorization ont permis de découvrir la Layer Embedding qui permet de créer un réseau de neurones spécifique à l’étude de texte. Les paramètres obligatoires d’embedding sont la taille du vocabulaire et la dimension de l’embedding.

Dans le contexte de word embeddings, les vecteurs d’embeddings sont créés à partir des données d’apprentissage.

Le tutoriel que nous commentons ici est Word embeddings sur le site de TensorFlow. Le jeu de données qui sert à l’apprentissage est IMDB movie reviews.

Les notions ont déjà été abordées dans les tutoriels précédents.

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

import tensorflow_datasets as tfds
tfds.disable_progress_bar()
(train_data, test_data), info = tfds.load(
    'imdb_reviews/subwords8k', 
    split = (tfds.Split.TRAIN, tfds.Split.TEST), 
    with_info=True, as_supervised=True)
Downloading and preparing dataset imdb_reviews/subwords8k/1.0.0 (download: 80.23 MiB, generated: Unknown size, total: 80.23 MiB) to /root/tensorflow_datasets/imdb_reviews/subwords8k/1.0.0...
Shuffling and writing examples to /root/tensorflow_datasets/imdb_reviews/subwords8k/1.0.0.incompleteXL77YS/imdb_reviews-train.tfrecord
Shuffling and writing examples to /root/tensorflow_datasets/imdb_reviews/subwords8k/1.0.0.incompleteXL77YS/imdb_reviews-test.tfrecord
Shuffling and writing examples to /root/tensorflow_datasets/imdb_reviews/subwords8k/1.0.0.incompleteXL77YS/imdb_reviews-unsupervised.tfrecord
Dataset imdb_reviews downloaded and prepared to /root/tensorflow_datasets/imdb_reviews/subwords8k/1.0.0. Subsequent calls will reuse this data.
encoder = info.features['text'].encoder
train_batches = train_data.shuffle(1000).padded_batch(10)
test_batches = test_data.shuffle(1000).padded_batch(10)
embedding_dim=16

model = keras.Sequential([
  layers.Embedding(encoder.vocab_size, embedding_dim),
  layers.GlobalAveragePooling1D(),
  layers.Dense(16, activation='relu'),
  layers.Dense(1)
])

model.summary()
model.compile(optimizer='adam',
              loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
              metrics=['accuracy'])

history = model.fit(
    train_batches,
    epochs=10,
    validation_data=test_batches, validation_steps=20)

A l’issue de l’apprentissage, on obtient 96% d’accuracy sur les données d’apprentissage et 83% sur les données de validation.

Les résultats peuvent être visualisés avec  Embedding Projector