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