Traitement des données textuelles TensorFlow

En tant que l'un des frameworks d'apprentissage profond les plus populaires aujourd'hui, TensorFlow offre de puissantes capacités de traitement de données textuelles. Cet article détaillera comment utiliser TensorFlow pour traiter des données textuelles, y compris les étapes clés telles que le prétraitement du texte, la vectorisation et l'entrée du modèle.

Les données textuelles sont l'un des types de données les plus courants en apprentissage automatique, mais les ordinateurs ne peuvent pas comprendre directement le texte brut, il doit donc être converti sous forme numérique. TensorFlow fournit une série d'outils et d'API pour simplifier ce processus.


Bases du prétraitement de texte

Pourquoi le prétraitement de texte est nécessaire

Les données textuelles brutes contiennent généralement beaucoup de bruit et d'incohérences, telles que :

  • Utilisation incohérente des majuscules et minuscules
  • Ponctuation
  • Mots vides (tels que "the", "is", etc.)
  • Caractères spéciaux
  • Erreurs d'orthographe

L'objectif du prétraitement est de convertir le texte brut en un format propre et cohérent, ce qui facilite l'extraction ultérieure des caractéristiques et l'entraînement du modèle.


Outils de traitement de texte TensorFlow

TensorFlow fournit plusieurs modules pour le traitement de texte :

  1. tf.strings: Opérations de base sur les chaînes de caractères
  2. tf.keras.layers.TextVectorization: Couche de vectorisation de texte
  3. tf.data.TextLineDataset: Créer des jeux de données à partir de fichiers texte
  4. tensorflow_text: Bibliothèque avancée de traitement du texte (nécessite une installation séparée)

Installation des bibliothèques requises

Exemple

import tensorflow as tf
from tensorflow.keras.layers import TextVectorization
import tensorflow_text as tf_text  # Optionnel, pour un traitement avancé

Opérations textuelles de base

1. Opérations de base sur les chaînes de caractères

de TensorFlowtf.stringsmodule fournit des opérations courantes sur les chaînes :

Exemple

# Créer des tenseurs de chaînes
text = tf.constant(["TensorFlow Text Processing", Deep Learning Natural Language Processing])

# Convertir en minuscules
lower_case = tf.strings.lower(text)
# Sortie : ['tensorflow text processing', 'deep learning natural language processing']

# Diviser la chaîne
words = tf.strings.split(text)
# Sortie : [['TensorFlow', 'Text Processing'], ['Deep Learning', 'Natural Language Processing']]

# Longueur de chaîne
length = tf.strings.length(text)
# Sortie : [10, 11]

2. Traitement des expressions régulières

Exemple

# Supprimer la ponctuation
def remove_punctuation(text):
    return tf.strings.regex_replace(text, '[%s]' % re.escape(string.punctuation), '')

text = tf.constant("Hello, World!")
clean_text = remove_punctuation(text)
# Sortie : "Hello World"

Vectorisation de texte

La conversion du texte en représentation numérique est une étape essentielle du traitement de texte. TensorFlow fournitTextVectorizationune couche pour mettre en œuvre cette fonctionnalité.

1. Création d'une couche de vectorisation

Exemple

# Définir la couche de vectorisation de texte
vectorize_layer = TextVectorization(
    max_tokens=10000,        # Taille maximale du vocabulaire
    output_mode='int',       # Indices entiers de sortie
    output_sequence_length=50  # Longueur de séquence uniforme
)

# Exemple de données textuelles
text_dataset = tf.data.Dataset.from_tensor_slices([
    "Ceci est la première phrase",
    Ceci est une autre phrase différente.,
    "Ajoutez une troisième phrase d'exemple"
])

# Adapter les données et construire le vocabulaire
vectorize_layer.adapt(text_dataset)

2. Vectorisation du texte

Exemple

# Vectoriser une phrase unique
vectorized_text = vectorize_layer("Ceci est une phrase d'exemple")
print(vectorized_text)
# Sortie similaire à : [5, 3, 10, 8, 0, 0, ...] (complétée avec des zéros jusqu'à une longueur de 50)

# Obtenir le vocabulaire
vocab = vectorize_layer.get_vocabulary()
print(vocab[:10])  # Afficher les 10 premiers éléments du vocabulaire

3. Options du mode de vectorisation

TextVectorizationLa couche prend en charge plusieurs modes de sortie :

Mode Description Scénario d'application
'int' Indices des mots en sortie Entrée de la couche d'embedding
'binary' Encodage multi-hot Classification de petit vocabulaire
'count' Comptage de fréquence des mots Modèle de sac de mots
'tf-idf' Poids TF-IDF Récupération d'informations

Traitement avancé du texte

Pour des besoins de traitement de texte plus complexes, vous pouvez utilisertensorflow_textbibliothèque :

1. Tokeniseur

Exemple

# Installer tensorflow_text (si nécessaire)
# !pip install tensorflow-text

import tensorflow_text as tf_text

# Créer un tokeniseur
tokenizer = tf_text.WhitespaceTokenizer()

# Tokeniser
tokens = tokenizer.tokenize(["TensorFlow Text Processing", "Deep learning NLP"])
print(tokens)
# Sortie : [['TensorFlow', 'text processing'], ['deep learning', 'NLP']]

2. Tokenisation en sous-mots

Exemple

# Utiliser le tokeniseur BERT
bert_tokenizer = tf_text.BertTokenizer(
    vocab_lookup_table="path/to/vocab.txt",
    token_out_type=tf.int32
)

tokens = bert_tokenizer.tokenize(["Le traitement du langage naturel est très intéressant"])
print(tokens)

Construction de pipelines de traitement de texte

Le traitement complet du texte implique généralement plusieurs étapes, qui peuvent être effectuées viatf.dataet des couches de prétraitement pour construire un pipeline:

Exemple

def preprocess_text(text):
    # Convertir en minuscules
    text = tf.strings.lower(text)
    # Supprimer la ponctuation
    text = tf.strings.regex_replace(text, '[^a-zA-Z0-9\u4e00-\u9fa5]', ' ')
    return text

# Créer un pipeline de traitement
def make_text_pipeline(text_ds, batch_size=32):
    # Prétraiter
    text_ds = text_ds.map(preprocess_text)
    # Vectoriser
    text_ds = text_ds.map(vectorize_layer)
    # Traitement par lots
    text_ds = text_ds.batch(batch_size)
    return text_ds

# Utiliser le pipeline
processed_ds = make_text_pipeline(text_dataset)

Exemples d'applications pratiques

Traitement des données d'analyse de sentiments

Exemple

# 1. Charger les données
(train_text, train_labels), (test_text, test_labels) = tf.keras.datasets.imdb.load_data()

# 2. Créer une couche de vectorisation
max_features = 10000
sequence_length = 250

vectorize_layer = TextVectorization(
    max_tokens=max_features,
    output_mode='int',
    output_sequence_length=sequence_length
)

# 3. Adapter les données (construire le vocabulaire en utilisant uniquement les données d'entraînement)
text_ds = tf.data.Dataset.from_tensor_slices(train_text).batch(128)
vectorize_layer.adapt(text_ds)

# 4. Construire le modèle
model = tf.keras.Sequential([
    vectorize_layer,
    tf.keras.layers.Embedding(max_features, 16),
    tf.keras.layers.GlobalAveragePooling1D(),
    tf.keras.layers.Dense(1, activation='sigmoid')
])

# 5. Compiler et entraîner le modèle
model.compile(optimizer='adam',
              loss='binary_crossentropy',
              metrics=['accuracy'])
model.fit(train_text, train_labels, epochs=10)

Bonnes pratiques et problèmes courants

Bonnes pratiques

  1. Taille du vocabulaire: Choisissez une taille de vocabulaire appropriée en fonction de la taille du jeu de données ; généralement 10,000-50,000 suffisent.
  2. Longueur de séquence: Analysez la distribution des longueurs de texte et choisissez une longueur qui couvre la plupart des échantillons.
  3. Cohérence du prétraitement: Assurez-vous que les mêmes étapes de prétraitement sont utilisées pendant l'entraînement et l'inférence.
  4. Optimisation de la mémoire: Pour les grands jeux de données, utilisez des générateurs ou les fonctionnalités de mise en cache de tf.data.

Problèmes courants

1. Gestion des mots hors vocabulaire (OOV):

Exemple

vectorize_layer = TextVectorization(
    max_tokens=10000,
    output_mode='int',
    output_sequence_length=50,
    pad_to_max_tokens=True  # Garantir que toutes les longueurs de sortie soient cohérentes
)

2. Traitement du texte multilingue:

  • Encoder uniformément en UTF-8
  • Envisager un prétraitement spécifique à la langue (par exemple, la segmentation des mots en chinois)

3. Optimisation des performances:

  • Utilisertf.dataPréchargement et mise en cache de ⟦0⟧
  • Envisager un prétraitement hors ligne pour les grands ensembles de données

Résumé

TensorFlow fournit une chaîne d'outils complète de traitement de texte, allant des opérations de base sur les chaînes de caractères aux techniques avancées de vectorisation. En utilisant correctement ces outils, vous pouvez convertir efficacement du texte brut en représentations numériques adaptées à l'entrée d'un modèle d'apprentissage profond. Les étapes clés comprennent :

  1. Nettoyage et normalisation du texte
  2. Choisir une stratégie de vectorisation appropriée
  3. Création de pipelines de traitement réutilisables
  4. Intégration au flux de travail d'entraînement du modèle

La maîtrise de ces compétences jettera des bases solides pour les tâches de traitement du langage naturel.

Autres extensions