Classification du texte avec CNNS: sont-ils morts après Transformers?

 Classification du texte avec CNNS: sont-ils morts après Transformers?

Auteur (s): S Aishwarya

Publié à l’origine sur Vers l’IA.

Dans le monde actuel axé sur l’IA, des modèles de transformateurs comme Bert, Roberta et GPT dominent le domaine de PNL. De l’alimentation des chatbots à la résumé des documents, les transformateurs semblent être l’étalon-or pour presque toutes les tâches liées au texte.

Photo de Mel Poole sur Désactiver

Compte tenu de leur succès, vous vous demandez peut-être:

Sont CNNS (Réseaux de neurones convolutionnels) Toujours pertinent pour la classification du texte – ou les transformateurs les ont-ils rendus obsolètes?

C’est la question technologique que nous explorons aujourd’hui.

Dans ce guide, nous comparerons deux approches pour la classification du texte:

CNNS formé à partir de zéro

Modèles de transformateur ajustés en étreinte

CNNS, traditionnellement célèbre pour la reconnaissance d’image, peut sembler un choix étrange pour la classification du texte en 2025. Mais ne les rejetez pas trop rapidement! Les CNN peuvent capturer des modèles locaux (comme les phrases et les n-grammes) exceptionnellement bien, et avec moins de frais de calcul que les transformateurs. Ils offrent une formation rapide, des architectures plus simples et des performances étonnamment compétitives sur de nombreuses tâches de classification de texte.

La construction d’un modèle de classification de texte basée sur CNN est simple et légère. Avec seulement quelques couches, vous pouvez entraîner un apprentissage en profondeur modèle pour classer le texte efficacement:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, Conv1D, GlobalMaxPooling1D, Dense

model = Sequential((
Embedding(input_dim=vocab_size, output_dim=128, input_length=max_length),
Conv1D(filters=128, kernel_size=5, activation='relu'),
GlobalMaxPooling1D(),
Dense(64, activation='relu'),
Dense(num_classes, activation='softmax')
))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=('accuracy'))
model.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_val, y_val))

Mais il y a plus à CNNS que la simple vitesse et la simplicité. Dans cet article, nous explorerons pourquoi CNNS peut toujours être un outil puissant pour la classification du texte, comment ils fonctionnent sous le capot, et s’ils peuvent toujours rivaliser avec les transformateurs modernes dans le monde réel PNL tâches.

📦 Ensemble de données: ensemble de données de classification AG News

Nous utiliserons le largement reconnu Actualités AG ensemble de données de Corpus d’Ag Articles de pressequi contient Plus de 120 000 articles d’information catégorisé en quatre classes majeures:

Ensemble de données LIEN: Ensemble de données AG News sur Kaggle

Les catégories sont:

  • Monde: Actualités internationales et événements mondiaux
  • Sportif: Actualités et événements sportifs
  • Entreprise: Les nouvelles commerciales, financières et économiques
  • SCI / Tech: Développements scientifiques et technologiques

Chaque entrée comprend:

  • Titre: Le titre de l’article de presse
  • Description: Un court résumé ou une description de l’article

Cet ensemble de données est idéal pour les tâches de classification du texte car il est équilibré, propre et couvre divers sujets, ce qui en fait un excellent repère pour comparer les CNN et les modèles basés sur les transformateurs.

🔧 Approche 1: CNN formé à partir de zéro

📥 Étape 1: Importer des bibliothèques

Packages essentiels pour la gestion des données, le prétraitement et la modélisation.

import pandas as pd, numpy as np
import matplotlib.pyplot as plt
import re, nltk
from sklearn.model_selection import train_test_split
from nltk.corpus import stopwords
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, Conv1D, GlobalMaxPooling1D, Dense, Dropout
from tensorflow.keras.callbacks import EarlyStopping

nltk.download('stopwords')
stop_words = set(stopwords.words('english'))

📂 Étape 2: Chargez un ensemble de données

Lisez l’ensemble de données AG News.

df = pd.read_csv("train.csv", header=None)
df.columns = ('Class Index', 'Title', 'Description')

🏷️ Étape 3: étiquettes de cartographie

Carte Index de classe numérique dans les catégories lisibles (facultative pour la clarté).

label_mapping = {1: "World", 2: "Sports", 3: "Business", 4: "Sci/Tech"}
df('Category') = df('Class Index').map(label_mapping)

🧹 Étape 4: Nettoyez le texte

Prétraitement en supprimant les caractères spéciaux et les mots d’arrêt.

def clean_text(text):
text = str(text).lower()
text = re.sub(r'<.*?>', '', text)
text = re.sub(r'(^ws)', '', text)
text = re.sub(r'd+', '', text)
text = " ".join((word for word in text.split() if word not in stop_words))
return text
df('text') = df('Title') + " " + df('Description')
df('text') = df('text').apply(clean_text)

🔠 Étape 5: Tokenize & Pad

Convertir le texte en séquences rembourrées.

tokenizer = Tokenizer(num_words=50000, oov_token="")
tokenizer.fit_on_texts(df('text'))
sequences = tokenizer.texts_to_sequences(df('text'))
word_index = tokenizer.word_index
vocab_size = len(word_index) + 1
max_length = 200
padded_sequences = pad_sequences(sequences, maxlen=max_length, padding='post')

🧪 Étape 6: division des tests de train

Se séparer en ensembles de formation et de validation.

df('Class Index') = pd.to_numeric(df('Class Index'), errors='coerce')

df.dropna(subset=('Class Index'), inplace=True)

df.reset_index(drop=True, inplace=True)

y = df('Class Index').astype(int).values - 1
X = padded_sequences(:len(df))

X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)

🧠 Étape 7: Construisez le modèle CNN

Créez un CNN simple mais puissant pour la classification du texte.

model = Sequential((
Embedding(input_dim=vocab_size, output_dim=128, input_length=max_length),
Conv1D(128, 5, activation='relu'),
GlobalMaxPooling1D(),
Dense(64, activation='relu'),
Dropout(0.5),
Dense(4, activation='softmax')
))

⚙️ Étape 8: compiler et s’entraîner

Compiler et ajuster le modèle CNN.

model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=('accuracy'))
early_stop = EarlyStopping(monitor='val_loss', patience=2, restore_best_weights=True)
history = model.fit(X_train, y_train, epochs=5, batch_size=64, validation_data=(X_val, y_val), callbacks=(early_stop))

📈 Étape 9: Visualiser la précision

Formation de l’intrigue vs précision de validation.

plt.plot(history.history('accuracy'), label='Train Accuracy')
plt.plot(history.history('val_accuracy'), label='Val Accuracy')
plt.xlabel('Epochs')
plt.ylabel('Accuracy')
plt.legend()
plt.title("Training vs Validation Accuracy (CNN)")
plt.show()

Étape 10: Évaluer le modèle

Vérifiez la précision de validation finale.

loss, acc = model.evaluate(X_val, y_val)
print(f"n✅ Final Validation Accuracy: {acc:.4f}")

Sortir:

Image par auteur

🤖 Approche 2: Distilbert Fineding avec des étreintes

Pourquoi construire un CNN à partir de zéro alors que vous pouvez affiner un transformateur léger comme Distilbert?

Distilbert est une version distillée de Bert – plus petite, plus rapide, moins chère – mais conserve 95% de son pouvoir de compréhension du langage, ce qui le rend idéal pour les environnements liés aux ressources.

🛠️ Implémentation étape par étape

📦 1. Installer les bibliothèques requises

pip install transformers datasets tensorflow

📥 2. Chargez et préparez l’ensemble de données

import pandas as pd
from sklearn.model_selection import train_test_split
df = pd.read_csv("train.csv", header=None)
df.columns = ('Class Index', 'Title', 'Description')
df('text') = df('Title') + " " + df('Description')
train_texts, val_texts, train_labels, val_labels = train_test_split(
df('text').tolist(), (df('Class Index') - 1).tolist(), test_size=0.2, random_state=42)

✂️ 3. Tokenisation avec tokenizer Distilbert

from transformers import DistilBertTokenizer
tokenizer = DistilBertTokenizer.from_pretrained("distilbert-base-uncased")
train_encodings = tokenizer(train_texts, truncation=True, padding=True, max_length=512)
val_encodings = tokenizer(val_texts, truncation=True, padding=True, max_length=512)

🧾 4. Préparer des ensembles de données TensorFlow

import tensorflow as tf
train_dataset = tf.data.Dataset.from_tensor_slices((
dict(train_encodings),
train_labels
)).shuffle(1000).batch(16)
val_dataset = tf.data.Dataset.from_tensor_slices((
dict(val_encodings),
val_labels
)).batch(16)

🧠 5. Distilbert de chargement et amende

from transformers import TFDistilBertForSequenceClassification, AdamW
model = TFDistilBertForSequenceClassification.from_pretrained("distilbert-base-uncased", num_labels=4)
model.compile(optimizer=AdamW(learning_rate=2e-5),
loss='sparse_categorical_crossentropy',
metrics=('accuracy'))
model.fit(train_dataset, validation_data=val_dataset, epochs=3)

6. Évaluer les performances du modèle

loss, accuracy = model.evaluate(val_dataset)
print(f"n✅ Final Validation Accuracy: {accuracy:.4f}")

Sortir:

✅ Précision de validation finale: 0,9452

📊 Analyse comparative: CNN vs Distilbert

Image par auteur

🎯 Conclusion

Les transformateurs comme Distilbert surpassent les CNN dans la précision globale en raison de leur capacité à comprendre profondément le contexte et la sémantique du langage. Cependant, les CNN sont toujours étonnamment solides – en particulier lorsque la vitesse, la simplicité et moins de ressources informatiques sont vos priorités.

Si vous créez des applications légères, des modèles éducatifs ou avez besoin d’une formation rapide sans accès à un matériel lourd, CNNS tient absolument du terrain.

⚖️ Quand utiliser CNN vs Distilbert

Utiliser CNN si:

  • Vous voulez des modèles plus simples pour une formation rapide
  • Vous avez des ressources de calcul limitées
  • Vous voulez un prototypage rapide pour les tâches de texte

Utiliser Distilbert si:

  • Vous avez besoin d’une précision plus élevée
  • Vos ensembles de données sont grands, bruyants ou diversifiés dans le langage.
  • Vous pouvez vous permettre une puissance légèrement plus calculaire

💡Réflexions finales

Les CNN sont pas mort Pour la classification du texte! Alors que les transformateurs dominent les références, CNNS propose plus rapide, moins cheret Plus facile Solutions – en particulier lorsque les données et les ressources sont limitées. Le choix du bon modèle dépend de vos besoins, pas seulement de la dernière tendance!

Publié via Vers l’IA



Source link

Related post