نویسنده (ها): آیشواریا
در ابتدا منتشر شده در به سمت هوش مصنوعیبشر
در دنیای AI محور امروز ، مدل های ترانسفورماتور مانند Bert ، Roberta و GPT بر حوزه حاکم هستند NLPبشر از نیروگاه های چت بابات گرفته تا خلاصه اسناد ، به نظر می رسد ترانسفورماتورها تقریباً برای هر کار مرتبط با متن استاندارد طلا هستند.
با توجه به موفقیت آنها ، ممکن است تعجب کنید:
هستند CNNS (شبکه های عصبی حلقوی) هنوز هم برای طبقه بندی متن مرتبط است – یا ترانسفورماتور آنها را منسوخ کرده است؟
این سوال فنی است که امروز در حال بررسی آن هستیم.
در این راهنما ، دو رویکرد را برای طبقه بندی متن مقایسه خواهیم کرد:
CNN هایی که از ابتدا آموزش دیده اند
مدل های ترانسفورماتور با بغل کردن خوب تنظیم شده اند
CNN ها ، که به طور سنتی برای تشخیص تصویر مشهور است ، ممکن است یک انتخاب عجیب برای طبقه بندی متن در سال 2025 به نظر برسد. اما آنها را خیلی سریع رد نکنید! CNN ها می توانند الگوهای محلی (مانند عبارات و N-Grams) را به خوبی و با سربار محاسباتی کمتری نسبت به ترانسفورماتورها ضبط کنند. آنها آموزش سریع ، معماری ساده تر و عملکرد شگفت آور رقابتی را در بسیاری از کارهای طبقه بندی متن ارائه می دهند.
ساختن یک مدل طبقه بندی متن مبتنی بر CNN ساده و سبک است. فقط با چند لایه می توانید آموزش دهید یادگیری عمیق مدل برای طبقه بندی کارآمد متن:
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, Conv1D, GlobalMaxPooling1D, Densemodel = 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))
اما بیشتر از سرعت و سادگی برای CNN وجود دارد. در این مقاله ، ما بررسی خواهیم کرد که چرا CNN ها هنوز هم می توانند ابزاری قدرتمند برای طبقه بندی متن ، نحوه کار آنها در زیر کاپوت باشند و اینکه آیا آنها هنوز هم می توانند با ترانسفورماتورهای مدرن در دنیای واقعی رقابت کنند NLP وظایف
📦 مجموعه داده ها: مجموعه داده طبقه بندی اخبار AG
ما از آنها به طور گسترده شناخته شده استفاده خواهیم کرد اخبار AG مجموعه داده از مقاله های اخبار AG، که حاوی بیش از 120،000 مقاله خبری طبقه بندی شده به چهار کلاس اصلی:
مجموعه داده پیوند: مجموعه داده های اخبار AG در Kaggle
دسته ها عبارتند از:
- جهان: اخبار بین المللی و رویدادهای جهانی
- ورزش: اخبار و رویدادهای ورزشی
- تجارت: اخبار تجاری ، امور مالی و اقتصادی
- SCI/TECH: تحولات علمی و فناوری
هر ورودی شامل:
- عنوان: عنوان مقاله اخبار
- توضیحات: خلاصه یا توضیحات کوتاه مقاله
این مجموعه داده برای کارهای طبقه بندی متن ایده آل است زیرا متعادل ، تمیز و مباحث متنوعی را در بر می گیرد و آن را به یک معیار عالی برای مقایسه CNN ها و مدل های مبتنی بر ترانسفورماتور تبدیل می کند.
🔧 رویکرد 1: CNN که از ابتدا آموزش دیده است
📥 مرحله 1: کتابخانه های واردات
بسته های اساسی برای کنترل داده ها ، پیش پردازش و مدل سازی.
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 EarlyStoppingnltk.download('stopwords')
stop_words = set(stopwords.words('english'))
📂 مرحله 2: بارگیری مجموعه داده
مجموعه داده های اخبار AG را بخوانید.
df = pd.read_csv("train.csv", header=None)
df.columns = ['Class Index', 'Title', 'Description']
🏷 مرحله 3: برچسب های نقشه
فهرست کلاس عددی را به دسته های قابل خواندن (اختیاری برای وضوح) نقشه کنید.
label_mapping = {1: "World", 2: "Sports", 3: "Business", 4: "Sci/Tech"}
df['Category'] = df['Class Index'].map(label_mapping)
🧹 مرحله 4: متن را تمیز کنید
پیش پردازش با از بین بردن کاراکترهای خاص و کلمات توقف.
def clean_text(text):
text = str(text).lower()
text = re.sub(r'<.>', '', text)
text = re.sub(r'[^\w\s]', '', 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)
🔠 مرحله 5: Tokenize & Pad
تبدیل متن به توالی های خالی.
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')
🧪 مرحله ششم: تقسیم آزمون قطار
تقسیم به مجموعه های آموزش و اعتبار سنجی.
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)
🧠 مرحله 7: مدل CNN را بسازید
یک CNN ساده و در عین حال قدرتمند برای طبقه بندی متن ایجاد کنید.
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')
])
⚙ مرحله 8: کامپایل و قطار
مدل 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])
📈 مرحله 9: دقت را تجسم کنید
آموزش نقشه در مقابل دقت اعتبار سنجی.
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()
✅ مرحله 10: مدل را ارزیابی کنید
دقت اعتبار سنجی نهایی را بررسی کنید.
loss, acc = model.evaluate(X_val, y_val)
print(f"\n✅ Final Validation Accuracy: {acc:.4f}")
خروجی:
🤖 رویکرد 2: تنظیم دقیق Distilbert با بغل کردن
چرا می توانید یک ترانسفورماتور سبک مانند یک CNN را از ابتدا بسازید دبستان؟
Distilbert یک نسخه مقطر از برت-کوچکتر ، سریعتر ، ارزان تر است-اما 95 ٪ از قدرت درک زبان خود را حفظ می کند و آن را برای محیط های محدود شده از منابع ایده آل می کند.
🛠 اجرای گام به گام
📦 1. نصب کتابخانه های مورد نیاز
pip install transformers datasets tensorflow
📥 2. مجموعه داده را بارگیری و آماده کنید
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. توکن سازی با توکینیزر 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. داده های 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 را بارگیری کنید و تنظیم کنید
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. عملکرد مدل را ارزیابی کنید
loss, accuracy = model.evaluate(val_dataset)
print(f"\n✅ Final Validation Accuracy: {accuracy:.4f}")
خروجی:
✅ دقت اعتبار سنجی نهایی: 0.9452
📊 تجزیه و تحلیل تطبیقی: CNN در مقابل Distilbert
🎯 نتیجه گیری
ترانسفورماتورهایی مانند Distilbert به دلیل توانایی آنها در درک عمیق متن و معناشناسی زبان ، از CNN های کلی بهتر عمل می کنند. با این حال ، CNN ها هنوز هم به طرز حیرت انگیزی از مدعیان قوی هستند – به ویژه هنگامی که سرعت ، سادگی و منابع محاسباتی کمتری اولویت های شما هستند.
اگر در حال ساخت برنامه های سبک وزن ، مدل های آموزشی هستید یا بدون دسترسی به سخت افزار سنگین به آموزش سریع نیاز دارید ، CNN ها کاملاً زمینه خود را دارند.
⚖ چه زمانی از CNN vs Distilbert استفاده کنید
استفاده کردن CNN if:
- شما برای آموزش سریع مدل های ساده تری می خواهید
- شما منابع محاسباتی محدود دارید
- شما می خواهید نمونه سازی سریع برای کارهای متنی
استفاده کردن دبستان if:
- شما به دقت بیشتری احتیاج دارید
- مجموعه داده های شما از نظر زبان بزرگ ، پر سر و صدا یا متنوع است.
- شما می توانید قدرت محاسباتی کمی بیشتر داشته باشید
💡افکار نهایی
CNN ها هستند مرده نیست برای طبقه بندی متن! در حالی که ترانسفورماتورها حاکم بر معیارها هستند ، CNN ها ارائه می دهند سریعتربا ارزانوت ساده تر راه حل ها – به ویژه هنگامی که داده ها و منابع محدود هستند. انتخاب مدل مناسب به نیازهای شما بستگی دارد ، نه فقط آخرین روند!
منتشر شده از طریق به سمت هوش مصنوعی