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 :
tf.strings: Opérations de base sur les chaînes de caractèrestf.keras.layers.TextVectorization: Couche de vectorisation de textetf.data.TextLineDataset: Créer des jeux de données à partir de fichiers textetensorflow_text: Bibliothèque avancée de traitement du texte (nécessite une installation séparée)
Installation des bibliothèques requises
Exemple
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
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
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
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
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
# !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
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
# 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
(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
- 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.
- Longueur de séquence: Analysez la distribution des longueurs de texte et choisissez une longueur qui couvre la plupart des échantillons.
- 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.
- 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
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:
- Utiliser
tf.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 :
- Nettoyage et normalisation du texte
- Choisir une stratégie de vectorisation appropriée
- Création de pipelines de traitement réutilisables
- 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