آیا LSTM های سنتی که از ابتدا آموزش دیده اند ، می توانند با مدل های Bert تنظیم شده خوب رقابت کنند؟


نویسنده (ها): آیشواریا

در ابتدا منتشر شده در به سمت هوش مصنوعیبشر

در دوران دیجیتال امروز ، اخبار جعلی سریعتر از حقیقت پخش می شود، و عواقب آن می تواند جدی باشد. از تأثیرگذاری در انتخابات گرفته تا گسترش اطلاعات نادرست سلامت ، مقابله با اخبار جعلی از همیشه مهمتر است.

تشخیص اخبار جعلی ممکن است به نظر برسد کار مناسب برای مدل های ترانسفورماتور برش مانند Bert ، اما می تواند مدل های سنتی را دوست داشته باشد LSTM هنوز زمین خود را نگه دارید؟

اما این سوال فنی است:

کدام مدل در تشخیص اخبار جعلی بهتر است – یک کلاسیک LSTM یا یک ترانسفورماتور مدرن مانند برت؟

در این راهنما ، ما دو رویکرد را برای تشخیص اخبار جعلی با استفاده از آن مقایسه خواهیم کرد یادگیری عمیق:

1LSTM از ابتدا آموزش دیده است
2. با استفاده از Huggingface خوب تنظیم شده است

عکس توسط توماس منشور در بی تظاهر کردن

📦 مجموعه داده ها: مجموعه داده های خبری جعلی و واقعی

ما از محبوب استفاده خواهیم کرد مجموعه داده از کله زدن، که حاوی بیش از 44000 مقاله خبری، تقسیم به:

مجموعه داده پیوند: داده های جعلی و واقعی

واقعی: اخبار قانونی از منابع تأیید شده

جعل کردن: اخبار ساخته شده با محتوای گمراه کننده

هر ورودی شامل:

  1. عنوان: عنوان مقاله اخبار
  2. متن: متن بدن از اخبار
  3. موضوع: موضوع اخبار
  4. تاریخ: مقاله تاریخ اخبار را منتشر کنید

🔧 رویکرد 1: LSTM که از ابتدا آموزش دیده است

📥 مرحله 1: کتابخانه های واردات

بسته های اساسی برای کنترل داده ها ، پیش پردازش و مدل سازی.

import pandas as pd, numpy as np, re, nltk
import matplotlib.pyplot as plt
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, LSTM, Dense, Bidirectional, Dropout
from tensorflow.keras.callbacks import EarlyStopping

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

📂 مرحله 2: DataSet را بارگیری کنید

مجموعه داده های خبری جعلی و واقعی را بخوانید.

df_fake = pd.read_csv("Fake.csv")
df_real = pd.read_csv("True.csv")

🏷 مرحله 3: برچسب ها را اضافه کنید

برچسب جعلی به عنوان 0 و واقعی به عنوان 1.

df_fake['label'] = 0
df_real['label'] = 1

🔗 مرحله 4: ترکیب و جابجایی

هر دو مجموعه داده و تغییر را ادغام کنید.

df = pd.concat([df_fake, df_real], axis=0).sample(frac=1).reset_index(drop=True)

🧹 مرحله 5: متن را تمیز کنید

HTML ، نگارشی ، اعداد و کلمات را حذف کنید.

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['text']
df['text'] = df['text'].apply(clean_text)

🔠 مرحله 6: توکن و پد

متن را به سکانس ها تبدیل کنید و آنها را پد کنید.

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 = 500
padded_sequences = pad_sequences(sequences, maxlen=max_length, padding='post')

🧪 مرحله 7: تقسیم آزمون قطار

تقسیم به مجموعه داده های آموزش و اعتبار سنجی.

X = padded_sequences
y = df['label'].values
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)

🧠 مرحله 8: مدل LSTM را بسازید

یک مدل LSTM دو طرفه انباشته ایجاد کنید.

model = Sequential([
Embedding(input_dim=vocab_size, output_dim=128, input_length=max_length),
Bidirectional(LSTM(128, return_sequences=True)),
Bidirectional(LSTM(64)),
Dense(64, activation='relu'),
Dropout(0.5),
Dense(1, activation='sigmoid')
])

⚙ مرحله 9: کامپایل و آموزش

مدل را کامپایل کنید و آن را با توقف زود هنگام آموزش دهید.

model.compile(loss='binary_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])

📈 مرحله 10: دقت را تجسم کنید

آموزش طرح و صحت اعتبار سنجی.

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")
plt.show()

✅ مرحله 11: ارزیابی مدل

دقت اعتبار سنجی نهایی پس از آموزش.

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

خروجی:

✅ دقت اعتبار سنجی نهایی: 0.9125

🤖 رویکرد 2: تنظیم دقیق Bert با Huggingface

چرا وقتی می توانید یک مدل قدرتمند از قبل آموزش دیده را تنظیم کنید ، از ابتدا ساخته شده است؟

در این رویکرد ، ما از Bert-Base-Inspased ، یک مدل زبان با هدف کلی از بغل کردن استفاده می کنیم و آن را در مجموعه داده های خبری جعلی و واقعی تنظیم می کنیم. برت نحو و متن را درک می کند و آن را برای کارهای طبقه بندی مانند تشخیص اخبار جعلی ایده آل می کند.

چه چیزی برت را قدرتمند می کند؟

  • از قبل در یک جسد بزرگ (ویکی پدیا + کتابفروق) آموزش دیده است
  • روابط متنی بین کلمات را ضبط می کند
  • با پیش پردازش حداقل کار می کند

🛠 اجرای مرحله به مرحله

📦 1. نصب کتابخانه های مورد نیاز

pip install transformers datasets tensorflow

📥 2. مجموعه داده را بارگیری و آماده کنید

import pandas as pd
from sklearn.model_selection import train_test_split

df_fake = pd.read_csv("Fake.csv")
df_real = pd.read_csv("True.csv")

df_fake['label'] = 0
df_real['label'] = 1

df = pd.concat([df_fake, df_real], axis=0).sample(frac=1).reset_index(drop=True)

df['text'] = df['title'] + " " + df['text']

train_texts, val_texts, train_labels, val_labels = train_test_split(
df['text'].tolist(), df['label'].tolist(), test_size=0.2, random_state=42)

✂ 3. توکن سازی با Bert Tokenizer

from transformers import BertTokenizer
tokenizer = BertTokenizer.from_pretrained("bert-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 🧠. بار و تنظیم دقیق برت

from transformers import TFBertForSequenceClassification, AdamW
model = TFBertForSequenceClassification.from_pretrained("bert-base-uncased", num_labels=2)
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.9314

analysis تجزیه و تحلیل مقایسه ای: LSTM در مقابل برت

اکنون که هر دو مدل را اجرا و ارزیابی کرده ایم ، بیایید آنها را در کنار هم مقایسه کنیم:

تصویر توسط نویسنده

پایان: BERT به دلیل درک عمیق از متن ، LSTM را در دقت قرار می دهد. با این حال ، اگر در محاسبات کوتاه هستید یا یک مدل ساده تر می خواهید ، LSTM هنوز نتایج بسیار خوبی را ارائه می دهد.

⚖ چه موقع از LSTM در مقابل BERT استفاده کنید

انتخاب بین LSTM و BERT به اهداف و منابع شما بستگی دارد:

از LSTM استفاده کنید اگر:

  • شما در منابع محاسباتی محدود هستید
  • شما می خواهید برای اهداف آموزشی مدل هایی از ابتدا بسازید
  • مجموعه داده نسبتاً کوچک و خاص دامنه است

از BERT استفاده کنید اگر:

  • شما نیاز دارید دقت پیشرفته
  • شما با داده های متن بزرگ یا پر سر و صدا کار می کنید
  • شما می خواهید اهرم کنید انتقال یادگیری برای تعمیم بهتر

thoughts افکار نهایی

هر دو LSTM و BERT به خودی خود قدرتمند هستند. در حالی که برت با آگاهی از زمینه و قبل از آموزش حاکم است ، LSTM ها هنوز هم برای استقرار سریعتر و خطوط لوله ساده تر مرتبط هستند. در نبرد با اخبار جعلی ، انتخاب مدل مناسب فقط یک قسمت است – کلید استفاده از فناوری از نظر اخلاقی و مؤثر برای ارتقاء حقیقت است.

منتشر شده از طریق به سمت هوش مصنوعی



منبع: https://towardsai.net/p/machine-learning/can-traditional-lstms-trained-from-scratch-compete-with-fine-tuned-bert-models