Meezo ML نشر 10 يوليو 2021 أرسل تقرير نشر 10 يوليو 2021 ماهي طبقة التضمين Embedding في Keras وكيف نقوم باستخدامها؟ اقتباس
2 Ali Haidar Ahmad نشر 10 يوليو 2021 أرسل تقرير نشر 10 يوليو 2021 تيح لنا طبقة التضمين تحويل كل كلمة إلى متجه بطول ثابت وبحجم محدد. المتجه الناتج هو متجه كثيف "Dense" له قيم حقيقية بدلاً من 0 و 1 فقط كما في الترميز One-Hot. يساعدنا الطول الثابت لمتجهات الكلمات على تمثيل الكلمات بطريقة أفضل وأكثر فعالية مع أبعاد مخفضة. وهذه المتجهات تكون ممثلة في فضاء Vector space مهيكل ويعكس المعاني الدلالية لكل كلمة وهذا مايجعل هذا التمثيل فعال للغاية. إن أفضل فهم لطبقة التضمين هو اعتبارها كقاموس يقوم بربط أعداد صحيحة (كل كلمة ترمز في البداية كعدد صحيح) بمتجه كثيف. أي أنها تأخذ كدخل أعداد صحيحة ثم تبحث في هذا القاموس على المتجه الذي يقابله في القاموس الداخلي، ويعيد هذا القاموس. Word index --> Embedding layer --> Corresponding word vector في كيراس نستخدمها كأول طبقة من طبقات النماذج التي تتعامل مع مهام NLP. هذه الطبقة تأخذ وسيطين على الأقل الأول هو عدد ال tokens (المفردات) الموجودة في بياناتك أي (1 + maximum word index) والثاني هو dimensionality of the embeddings أي أبعاد التضمين. وفي حالة كانت الطبقة التالية هي طبقة flatten ثم Dense فيجب عليك استخدام وسيط ثالث هو input_length أي طول مدخلاتك أو بمعنى أوضح، طول السلاسل النصية التي تعالجها. وفي كيراس لها الشكل التالي: keras.layers.Embedding( input_dim, output_dim, input_length=None, ) هذه الطبقة تأخذ كمدخلات مصفوفة 2D من الشكل:(batch_size, input_length) وتعيد مصفوفة من الشكل: (batch_size, input_length, output_dim) مثال: >>> model = tf.keras.Sequential() # طول السلاسل هو 120 وأبعاد التضمين 128 وعدد الكلمات 10000 >>> model.add(tf.keras.layers.Embedding(10000, 128, input_length=120)) >>> input_array = np.random.randint(1000, size=(32, 10)) >>> model.compile('rmsprop', 'mse') >>> output_array = model.predict(input_array) >>> print(output_array.shape) # (32, 10, 64) 2 اقتباس
1 ريم المهدي نشر 11 يوليو 2021 أرسل تقرير نشر 11 يوليو 2021 هي الطبقة المسؤولة عن تحويل القيم المدخلة إلى المتجهات المقابلة لها في vector space، لذلك تلك الطبقة تستقبل الحجم كمدخل، لنقوم بشرح هذا بمثال: import numpy as np from keras.models import Sequential from keras.layers import Embedding input_array = np.random.randint(5, size=(1, 5)) model = Sequential() model.add(Embedding(5, 2, input_length=5)) model.compile('rmsprop', 'mse') model.predict(input_array) بعد إستيراد المكتبات اللازمة، قمنا بتعريف مصفوفة مدخلات input_array والتي تحتوي على صف واحد و 5 أعمدة، و من ثم عرفنا النموذج كsequential model و أضفنا طبقة embedding والتي تأخذ حجم المدخلات input_length (5) بالإضافة للحجم المتوقع للمتجهات المنتجة (2) embedding vector size و بمعدل تمثيلين لكل قيمة مدخلة، قمنا بعد ذلك بتجميع النموذج و من التوقع والناتج كان عبارة عن المتجهات التي تحتوي على تمثيل القيم المدخلة. Embedding شائع الإستخدام في تطبيقات معالجة النصوص، لكن لنقوم بإستخدامه يجب تحويل الكلمات لمقابلها الرقمي، يمكننا فعل ذلك بإسناد قيمة رقمية لكل كلمة مفردة و ذلك لتمريرها للنموذج، لاحظ تمرير 5 كأول قيمة في embedding layer و هي تعني 5 كلمات بدون تكرار. +------------+------------------------------+ | index | Embedding | +------------+------------------------------+ | 0 | [-0.02694855, 0.01748547] | | 4 | [-0.03002046, 0.0154268 ] | | 2 | [-0.02694855, 0.01748547] | | 1 | [-0.02694855, 0.01748547] | | 5 | [-0.02694855, 0.01748547] | +------------+------------------------------+ يمكنك تخيل ناتج الطبقة الأولى كالجدول السابق، حيث كل قيمة رقمية تحولت إلى التمثيل المتجهي المقابل لها. اقتباس
السؤال
Meezo ML
ماهي طبقة التضمين Embedding في Keras وكيف نقوم باستخدامها؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.