جارٍ تحميل الدرس...
في نافذة الطباعة اختر «حفظ كملف PDF» كوجهة.
معالجة اللغة الطبيعية العربية - الدرس 4
بناء مصنف مشاعر عربي باستخدام Keras: التضمينات (Embeddings) القابلة للتدريب مقابل التضمينات المدربة مسبقا وطبقات LSTM
tensorflow، keras، numpy، pandas، scikit-learn، gensim، nltkISRIStemmer من NLTK!pip install tensorflow keras numpy pandas scikit-learn gensim requests tqdm nltk
import nltk
nltk.download('stopwords')
from nltk.stem.isri import ISRIStemmerSS2030)، تغريدات عربية موسومة بمشاعر ثنائيةGoogle Drive بصيغة CSV، مع حذف القيم المفقودةdf = pd.read_csv(csv_path, encoding="utf-8")
df = df.dropna()
# columns: text, Sentiment (1 = positive)تنظيف النص
إزالة الترقيم والأسطر الجديدة
تجزئة بالفراغات
إزالة كلمات التوقف
الاشتقاق
ISRIStemmer
stemmer = ISRIStemmer()
stop_words = set(stopwords.words("arabic"))
def preprocess_arabic_text(text):
text = text.replace("،", "").replace(".", "").replace("؟", "").replace("!", "")
words = text.split()
words = [stemmer.stem(w) for w in words if w not in stop_words]
return " ".join(words)Tokenizer في Keras تبني فهرس كلمات يقتصر على أعلى 10 آلاف كلمةtokenizer = Tokenizer(num_words=10000)
tokenizer.fit_on_texts(df["processed_text"])
X_sequences = tokenizer.texts_to_sequences(df["processed_text"])
X_padded = pad_sequences(X_sequences, maxlen=100)80/20 باستخدام train_test_splitالنموذج الأول
LSTMtrainable_model = Sequential([
Embedding(input_dim=10000, output_dim=300, trainable=True),
LSTM(64, return_sequences=True),
LSTM(32),
Dense(1, activation='sigmoid')
])
trainable_model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])النموذج الأول
Epochs)، بحجم دفعة 32Epoch 5/5 - accuracy: 0.9962 - val_accuracy: 0.8496
Trainable Embedding Model Accuracy: 0.85تضمينات مدربة مسبقا
AraVecAraVecWord2Vec مدرب مسبقا للعربية، تم تدريبه على بيانات تويتر (CBOW، 300 بعد)zip) ويفتح باستخدام gensimword2vec_model = gensim.models.Word2Vec.load(
'./aravec/full_grams_cbow_300_twitter.mdl')AraVecAraVec تبقى متجهات صفريةembedding_matrix = np.zeros((len(tokenizer.word_index) + 1, embedding_dim))
for word, i in tokenizer.word_index.items():
if word in word2vec_model.wv:
embedding_matrix[i] = word2vec_model.wv[word]
# Embedding matrix shape: (11710, 300)النموذج الثاني
LSTMAraVec وتكون مجمدة (trainable=False)LSTM مع Dropout، بالإضافة إلى طبقة Dense إضافيةpretrained_model = Sequential([
Embedding(input_dim=len(tokenizer.word_index) + 1, output_dim=300,
weights=[embedding_matrix], trainable=False),
LSTM(128, return_sequences=True),
Dropout(0.3),
LSTM(64),
Dense(32, activation='relu'),
Dense(1, activation='sigmoid')
])النموذج الثاني
32Epoch 5/5 - accuracy: 0.9760 - val_accuracy: 0.8555
Pretrained Word2Vec Model Accuracy: 0.86Trainable Embedding Model Accuracy: 0.85
Pretrained Word2Vec Model Accuracy: 0.86Dropout في النموذج الثاني تزيد من انتظام (Regularization) مكدس LSTM الأعمقمعالجة مسبقة
تجزئة/حشو
تضمين
LSTM
تصنيف
ISRIAraVec المدربة مسبقا (المجمدة) تنقل معرفة خارجية وترفع الدقة قليلاLSTM مع Dropout يساعد في بناء نماذج متتالية أعمق وأكثر انتظاماMahmoud Abas|مقدمة في الشبكات العصبية