جارٍ تحميل الدرس...
في نافذة الطباعة اختر «حفظ كملف PDF» كوجهة.
معالجة اللغة الطبيعية العربية - الدرس 6
لماذا يهم ترتيب الكلمات، وأربعة أشكال لمسائل المتتاليات، ومعماريات RNN وGRU وLSTM
Feed-Forward) تتعامل مع كل كلمة بشكل مستقل؛ فتفعيلها مجموع موزون ثابت للكلمات، بصرف النظر عن ترتيبهاRNN) تغذى بالمدخلات تباعا عبر الزمنHidden State) في كل خطوة تحسب من المدخل الحالي والحالة الخفية السابقة؛ لذا يهم ترتيب الكلمات<sos>
product
was
not
good
مسائل المتتاليات
واحد إلى متعدد
مولد أغان، مولد نصوص
متعدد إلى واحد
تحليل المشاعر، التحقق الصوتي
متعدد إلى متعدد متواز
التعرف على الكيانات المسماة، وسم أجزاء الكلام
متعدد إلى متعدد بمرمز-مفكك
الترجمة الآلية، الإجابة عن الأسئلة
RNN تحسب حالة خفية h_t من المدخل الحالي والحالة الخفية السابقةsigmoid/softmax، منتجة مخرجا إضافيا a_tthe product was very good with few problems ← 8 خطواتa good product (3 خطوات) يحشى برموز PAD ليطابق طول أطول متتالية: a good product <PAD> <PAD> <PAD> <PAD> <PAD>RNN تمثل كـتضمينات (Embeddings)، بنفس تقنيات التضمين التي غطيت سابقا (على مستوى الحرف أو الكلمة أو الجملة)Word2Vec وGloVe وAraVec)المدخل
الطبقة الأولى
خلايا RNN
الطبقة الثانية
تمثيل أغنى فوق الأولى
المخرج
BiRNN إنتاج مخرج حتى يتم تحميل المتتالية كاملة؛ بلا مخرجات متدفقة كلمة بكلمةtf.keras.datasets.imdb)100 وحدة لفظية) قبل التدريبmodel = tf.keras.models.Sequential([
tf.keras.layers.Embedding(input_dim=VOCAB_SIZE+1, output_dim=100),
tf.keras.layers.SimpleRNN(64),
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dense(1, activation='sigmoid')
])60% بعد خمس حقب؛ الـ SimpleRNN البسيطة تواجه صعوبة في هذه المهمةBidirectional يتيح للنموذج رؤية سياق الماضي والمستقبل معاmodel_bi = tf.keras.models.Sequential([
tf.keras.layers.Embedding(VOCAB_SIZE, 64),
tf.keras.layers.Bidirectional(tf.keras.layers.SimpleRNN(64)),
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dense(1, activation='sigmoid')
])SimpleRNN تميل إلى نسيان المعلومات التي رأتها في بداية المتتاليةUpdate Gate) تتيح للشبكة اختيار ما تحتفظ به من الحالة السابقةGamma_u = 0 تبقى الحالة دون تغيير؛ وإذا كانت Gamma_u = 1 تستبدل بالكامل بالقيمة المرشحةgru_bi = tf.keras.models.Sequential([
tf.keras.layers.Embedding(VOCAB_SIZE, 64),
tf.keras.layers.Bidirectional(tf.keras.layers.GRU(64, return_sequences=True)),
tf.keras.layers.Bidirectional(tf.keras.layers.GRU(64)),
tf.keras.layers.Dense(1, activation='sigmoid')
])الذاكرة المرشحة
C̃
الذاكرة الطويلة المدى
C_t
الذاكرة القصيرة المدى
a_t (المخرج)
LSTM الاحتفاظ بمعلومات من وقت أبعد في المتتالية، ما يحل مشكلة تلاشي التدرجاتRNN/GRU؛ فقط استبدل الخلية بخلية LSTMlstm_bi = tf.keras.models.Sequential([
tf.keras.layers.Embedding(VOCAB_SIZE, 64),
tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(64)),
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dense(1, activation='sigmoid')
])def predict(text, clf, word2idx, padding_size):
padded_text = np.zeros((padding_size))
padded_text[:len(text.split())] = [word2idx.get(w, 0) for w in text.split()]
return clf.predict(tf.expand_dims(padded_text, 0))
predict("the movie was super awesome!", lstm_bi, word2idx, lstm_padding)RNN تعالج المتتاليات خطوة بخطوة، لذا (على عكس الشبكات الأمامية التغذية) يغير ترتيب الكلمات المخرجاتRNNSimpleRNN البسيطة تعاني من تلاشي التدرجات وتنسى السياق المبكر في المتتاليات الطويلةGRU (ببوابة التحديث) وLSTM (ببوابات التحديث/النسيان/المخرج) هذه المشكلة، مع إضافة LSTM ذاكرة طويلة المدى صريحةMahmoud Abas|أنواع مسائل المتتاليات (Sequence Problems)