اذهب إلى المحتوى

السؤال

Recommended Posts

  • 2
نشر

تيح لنا طبقة التضمين تحويل كل كلمة إلى متجه بطول ثابت وبحجم محدد. المتجه الناتج هو متجه كثيف "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)

 

  • 1
نشر

هي الطبقة المسؤولة عن تحويل القيم المدخلة إلى المتجهات المقابلة لها في 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]   |
+------------+------------------------------+

يمكنك تخيل ناتج الطبقة الأولى كالجدول السابق، حيث كل قيمة رقمية تحولت إلى التمثيل المتجهي المقابل لها.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...