تضمين الكلمات ونموذج Word2Vec مع مثال

ما هو تضمين الكلمات؟

كلمة التضمين هو نوع من تمثيل الكلمات يسمح لخوارزميات التعلم الآلي بفهم الكلمات ذات المعاني المتشابهة. إنها تقنية نمذجة اللغة وتعلم الميزات لرسم الكلمات في متجهات من الأرقام الحقيقية باستخدام الشبكات العصبية أو النماذج الاحتمالية أو تقليل الأبعاد على مصفوفة التكرار المشترك للكلمات. بعض نماذج تضمين الكلمات هي Word2vec (Google) و Glove (Stanford) و fastest (Facebook).

يُسمى تضمين الكلمات أيضًا بالنموذج الدلالي الموزع أو مساحة المتجهات الممثلة أو الدلالية الموزعة أو نموذج مساحة المتجهات. أثناء قراءتك لهذه الأسماء، تصادفك كلمة دلالية والتي تعني تصنيف الكلمات المتشابهة معًا. على سبيل المثال، يجب وضع الفواكه مثل التفاح والمانجو والموز بالقرب من بعضها بينما تكون الكتب بعيدة عن هذه الكلمات. بمعنى أوسع، سيؤدي تضمين الكلمات إلى إنشاء ناقل الفاكهة الذي سيتم وضعه بعيدًا عن التمثيل المتجه للكتب.

أين يتم استخدام تضمين الكلمات؟

يساعد تضمين الكلمات في إنشاء الميزات وتجميع المستندات وتصنيف النصوص ومهام معالجة اللغة الطبيعية. دعنا نذكرها ونناقش كلًا منها.

  • حساب الكلمات المتشابهة: يتم استخدام تضمين الكلمات لاقتراح كلمات مشابهة للكلمة التي يتم إخضاعها لنموذج التنبؤ. وإلى جانب ذلك، فإنه يقترح أيضًا كلمات مختلفة، بالإضافة إلى الكلمات الأكثر شيوعًا.
  • إنشاء مجموعة من الكلمات ذات الصلة: يتم استخدامه للتجميع الدلالي الذي يجمع الأشياء ذات الخصائص المتشابهة معًا والمختلفة بعيدًا.
  • ميزة تصنيف النص: يتم تعيين النص إلى صفائف من المتجهات التي يتم تغذيتها للنموذج للتدريب وكذلك للتنبؤ. لا يمكن تدريب نماذج المصنفات المستندة إلى النص على السلسلة، لذلك سيؤدي هذا إلى تحويل النص إلى نموذج قابل للتدريب آليًا. مزيد من ميزاته لبناء المساعدة الدلالية في التصنيف القائم على النص.
  • تجميع المستندات: هو تطبيق آخر حيث يتم استخدام Word Embedding Word2vec على نطاق واسع
  • معالجة اللغة الطبيعية: هناك العديد من التطبيقات التي يكون فيها تضمين الكلمات مفيدًا ويتفوق على مراحل استخراج الميزات مثل أجزاء من علامات الكلام والتحليل العاطفي والتحليل النحوي. الآن حصلنا على بعض المعرفة حول تضمين الكلمات. يتم أيضًا إلقاء بعض الضوء على نماذج مختلفة لتنفيذ تضمين الكلمات. يركز هذا البرنامج التعليمي الكامل لـ Word Embedding على أحد النماذج (Word2vec).

ما هو Word2vec؟

Word2vec هي تقنية/نموذج لإنتاج تضمين الكلمات لتمثيل أفضل للكلمات. إنها طريقة لمعالجة اللغة الطبيعية تلتقط عددًا كبيرًا من علاقات الكلمات النحوية والدلالية الدقيقة. إنها شبكة عصبية ضحلة ذات طبقتين يمكنها اكتشاف الكلمات المترادفة واقتراح كلمات إضافية للجمل الجزئية بمجرد تدريبها.

قبل المضي قدمًا في هذا البرنامج التعليمي Word2vec، يرجى الاطلاع على الفرق بين الشبكة العصبية الضحلة والعميقة كما هو موضح في الرسم التخطيطي لمثال تضمين Word أدناه:

تتكون الشبكة العصبية الضحلة من الطبقة المخفية الوحيدة بين الإدخال والإخراج بينما تحتوي الشبكة العصبية العميقة على طبقات مخفية متعددة بين الإدخال والإخراج. يخضع الإدخال إلى العقد بينما تحتوي الطبقة المخفية وطبقة الإخراج على خلايا عصبية.

التعلم الضحل مقابل التعلم العميق
التعلم الضحل مقابل التعلم العميق

Word2vec عبارة عن شبكة مكونة من طبقتين حيث توجد طبقة مخفية واحدة للإدخال والإخراج.

تم تطوير Word2vec من قبل مجموعة من الباحثين برئاسة توماس ميكولوف في Google. يعد Word2vec أفضل وأكثر كفاءة من نموذج التحليل الدلالي الكامن.

لماذا Word2vec؟

يمثل Word2vec الكلمات في تمثيل الفضاء المتجهي. يتم تمثيل الكلمات في شكل متجهات ويتم وضعها بطريقة تظهر بها الكلمات ذات المعنى المتشابه معًا وتقع الكلمات غير المتشابهة بعيدًا. يُطلق على هذا أيضًا علاقة دلالية. لا تفهم الشبكات العصبية النص بدلاً من ذلك، فهي تفهم الأرقام فقط. يوفر تضمين الكلمات طريقة لتحويل النص إلى متجه رقمي.

يقوم Word2vec بإعادة بناء السياق اللغوي للكلمات. قبل المضي قدمًا، دعونا نفهم، ما هو السياق اللغوي؟ في سيناريو الحياة العامة عندما نتحدث أو نكتب للتواصل، يحاول الآخرون معرفة الهدف من الجملة. على سبيل المثال، "ما هي درجة حرارة الهند"، هنا السياق هو أن المستخدم يريد معرفة "درجة حرارة الهند" وهو السياق. باختصار، الهدف الرئيسي للجملة هو السياق. تساعد الكلمة أو الجملة المحيطة باللغة المنطوقة أو المكتوبة (الإفصاح) في تحديد معنى السياق. يتعلم Word2vec تمثيل المتجهات للكلمات من خلال السياقات.

ما يفعله Word2vec؟

قبل تضمين الكلمات

من المهم معرفة الطريقة المستخدمة قبل تضمين الكلمات وما هي عيوبها ثم سننتقل إلى موضوع كيفية التغلب على العيوب عن طريق تضمين الكلمات باستخدام طريقة Word2vec. وأخيرا، سوف ننتقل إلى كيفية عمل Word2vec لأنه من المهم أن نفهم أنه يعمل.

نهج للتحليل الدلالي الكامن

هذا هو النهج الذي تم استخدامه قبل تضمين الكلمات. لقد استخدم مفهوم حقيبة الكلمات حيث يتم تمثيل الكلمات في شكل ناقلات مشفرة. وهو عبارة عن تمثيل متجه متناثر حيث يكون البعد مساوياً لحجم المفردات. إذا وردت الكلمة في القاموس تحسب وإلا فلا. لفهم المزيد، يرجى الاطلاع على البرنامج أدناه.

مثال Word2vec

مثال Word2vec

from sklearn.feature_extraction.text import CountVectorizer

vectorizer = CountVectorizer()
data_corpus = ["guru99 is the best site for online tutorials. I love to visit guru99."]
vocabulary = vectorizer.fit(data_corpus)
X = vectorizer.transform(data_corpus)

print(X.toarray())
print(vectorizer.get_feature_names_out())

الإخراج:

[[1 2 1 1 1 1 1 1 1 1]]

[u'best', u'guru99', u'is', u'love', u'online', u'sitefor', u'the', u'to', u'tutorials', u'visit']

شرح الكود

  1. CountVectorizer هي الوحدة المستخدمة لتخزين المفردات بناءً على ملاءمة الكلمات الموجودة فيها. يتم استيراد هذا من sklearn.
  2. اصنع الكائن باستخدام فئة CountVectorizer.
  3. اكتب البيانات في القائمة التي سيتم تركيبها في CountVectorizer.
  4. تم احتواء البيانات في الكائن الذي تم إنشاؤه من فئة CountVectorizer.
  5. قم بتطبيق منهج حقيبة الكلمات لحساب الكلمات في البيانات باستخدام المفردات. إذا لم تكن الكلمة أو الرمز المميز متاحًا في المفردات، فسيتم تعيين موضع الفهرس هذا على الصفر.
  6. يتم تحويل المتغير في السطر 5 وهو x إلى مصفوفة (الطريقة متاحة لـ x). سيوفر هذا عدد كل رمز مميز في الجملة أو القائمة المقدمة في السطر 3.
  7. سيُظهر هذا الميزات التي تعد جزءًا من المفردات عند تركيبها باستخدام البيانات الموجودة في السطر 4.

في النهج الدلالي الكامن، يمثل الصف كلمات فريدة بينما يمثل العمود عدد الوقت الذي تظهر فيه تلك الكلمة في المستند. إنه تمثيل للكلمات في شكل مصفوفة الوثيقة. يتم استخدام تكرار المصطلح معكوس تكرار المستند (TFIDF) لحساب تكرار الكلمات في المستند وهو تكرار المصطلح في المستند/تكرار المصطلح في المجموعة بأكملها.

قصور طريقة حقيبة الكلمات

  • ويتجاهل ترتيب الكلمة، مثلاً هذا سيء = سيء هو هذا.
  • يتجاهل سياق الكلمات. لنفترض أنني إذا كتبت الجملة "كان يحب الكتب. أفضل ما يمكن العثور عليه هو التعليم في الكتب ". سيؤدي ذلك إلى إنشاء متجهين أحدهما لعبارة "كان يحب الكتب" والآخر لعبارة "التعليم أفضل ما يوجد في الكتب". من شأنه أن يعامل كلاهما بشكل متعامد مما يجعلهما مستقلين، لكن في الواقع، فإنهما مرتبطان ببعضهما البعض

للتغلب على هذه القيود، تم تطوير تضمين الكلمات ويعتبر Word2vec أسلوبًا لتنفيذ ذلك.

كيف يعمل Word2vec؟

يتعلم Word2vec الكلمة من خلال التنبؤ بالسياق المحيط بها. على سبيل المثال، لنأخذ كلمة "هو". يحب كرة القدم."

نريد حساب Word2vec للكلمة: يحب.

افترض

loves =  Vin. P(Vout / Vin) is calculated	
where,	
Vin is the input word. 	
P is the probability of likelihood.	
Vout is the output word. 	

كلمة يحب يتحرك على كل كلمة في الجسم. يتم ترميز العلاقة النحوية والدلالية بين الكلمات. وهذا يساعد في العثور على الكلمات المتشابهة والقياسية.

جميع الميزات العشوائية للكلمة يحب تم حسابه. يتم تغيير هذه الميزات أو تحديثها فيما يتعلق بكلمات الجوار أو كلمات السياق بمساعدة ملف التكاثر الخلفي الأسلوب.

طريقة أخرى للتعلم هي أنه إذا كان سياق كلمتين متشابهين أو أن كلمتين لهما ميزات متشابهة، فإن هذه الكلمات مرتبطة ببعضها البعض.

Word2vec Architecture

هناك نوعان من الهندسة المعمارية المستخدمة بواسطة Word2vec:

  1. حقيبة الكلمات المستمرة (CBOW)
  2. تخطي غرام

قبل التعمق أكثر في هذا البرنامج التعليمي الخاص بـ Word2vec، دعنا نناقش سبب أهمية هذه البنيات أو النماذج من وجهة نظر تمثيل الكلمات. إن تعلم تمثيل الكلمات يتم بشكل غير خاضع للإشراف في الأساس، ولكن هناك حاجة إلى أهداف/علامات لتدريب النموذج. يحول Skip-gram وCBOW التمثيل غير الخاضع للإشراف إلى شكل خاضع للإشراف لتدريب النموذج.

في CBOW، يتم التنبؤ بالكلمة الحالية باستخدام نافذة نوافذ السياق المحيطة. على سبيل المثال، إذا كانت الكلمة الحاليةI-1,wI-2,wأنا + 1,wأنا + 2يتم إعطاء الكلمات أو السياق، وهذا النموذج سوف يوفر ثi

يؤدي Skip-Gram عكس CBOW مما يعني أنه يتنبأ بالتسلسل أو السياق المحدد من الكلمة. يمكنك عكس المثال لفهمه. إذا ثi نظرا، وهذا سوف يتنبأ بالسياق أو ثI-1,wI-2,wأنا + 1,wأنا+2.

يوفر Word2vec خيارًا للاختيار بين CBOW (حقيبة الكلمات المستمرة) وskim-gram. يتم توفير مثل هذه المعلمات أثناء تدريب النموذج. يمكن للمرء أن يختار استخدام أخذ العينات السلبية أو طبقة softmax الهرمية.

حقيبة الكلمات المستمرة

دعونا نرسم مثالًا تخطيطيًا بسيطًا لـ Word2vec لفهم الحقيبة المستمرة لهندسة الكلمات.

حقيبة مستمرة من الكلمات Architecture

حقيبة مستمرة من الكلمات Architecture

دعونا نحسب المعادلات رياضيا. لنفترض أن V هو حجم المفردات وN هو حجم الطبقة المخفية. يتم تعريف الإدخال كـ {xI-1، Xط -2 ، xأنا+1, xأنا + 2}. نحصل على مصفوفة الوزن عن طريق ضرب V * N. يتم الحصول على مصفوفة أخرى عن طريق ضرب متجه الإدخال بمصفوفة الوزن. يمكن فهم ذلك أيضًا من خلال المعادلة التالية.

ح=الحادي عشرtW

حيث الحادي عشرt؟ W هما متجه الإدخال ومصفوفة الوزن على التوالي،

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

u=التمثيل المتوقع*h

حيث يتم الحصول على التمثيل المتوقع للنموذج؟ح في المعادلة أعلاه.

نموذج تخطي جرام

يتم استخدام أسلوب Skip-Gram للتنبؤ بجملة معينة بكلمة إدخال. لفهم ذلك بشكل أفضل، دعونا نرسم المخطط كما هو موضح في مثال Word2vec أدناه.

نموذج تخطي جرام

نموذج تخطي جرام

يمكن للمرء التعامل معها على أنها عكس نموذج الحقيبة المستمرة للكلمات حيث يكون الإدخال هو الكلمة والنموذج يوفر السياق أو التسلسل. يمكننا أيضًا أن نستنتج أن الهدف يتم تغذيته إلى طبقة الإدخال والإخراج ويتم تكراره عدة مرات لاستيعاب العدد المختار من كلمات السياق. يتم تلخيص ناقل الخطأ من كل طبقة الإخراج لضبط الأوزان عبر طريقة الانتشار العكسي.

أي نموذج تختار؟

يعد CBOW أسرع بعدة مرات من Skip gram ويوفر ترددًا أفضل للكلمات المتكررة بينما يحتاج Skip gram إلى كمية صغيرة من بيانات التدريب ويمثل حتى الكلمات أو العبارات النادرة.

العلاقة بين Word2vec وNLTK

نلتك Word2vec هي مجموعة أدوات للغة الطبيعية. تُستخدم لمعالجة النص مسبقًا. يمكن للمرء القيام بعمليات مختلفة مثل وضع علامات على أجزاء الكلام، والتحليل، والتجذير، وإزالة الكلمات المتوقفة، وإزالة الكلمات النادرة أو الأقل استخدامًا. تساعد في تنظيف النص وكذلك تساعد في إعداد الميزات من الكلمات الفعالة. من ناحية أخرى، تُستخدم Word2vec للمطابقة الدلالية (العناصر ذات الصلة الوثيقة معًا) والنحوية (التسلسل). باستخدام Word2vec، يمكن للمرء العثور على كلمات متشابهة وكلمات مختلفة وتقليل الأبعاد والعديد من الميزات الأخرى. ميزة مهمة أخرى لـ WordXNUMXvec هي تحويل التمثيل ذي الأبعاد الأعلى للنص إلى متجهات ذات أبعاد أقل.

أين يمكن استخدام NLTK وWord2vec؟

إذا كان على المرء إنجاز بعض المهام ذات الأغراض العامة كما هو مذكور أعلاه مثل الترميز، فيجب استخدام علامات POS والتحليل لاستخدام NLTK بينما للتنبؤ بالكلمات وفقًا لبعض السياق أو نمذجة الموضوع أو تشابه المستندات، يجب على المرء استخدام Word2vec.

العلاقة بين NLTK وWord2vec بمساعدة الكود

يمكن استخدام NLTK وWord2vec معًا للعثور على تمثيل الكلمات المتشابهة أو المطابقة النحوية. يمكن استخدام مجموعة أدوات NLTK لتحميل العديد من الحزم التي تأتي مع NLTK ويمكن إنشاء نموذج باستخدام Word2vec. يمكن بعد ذلك اختباره على الكلمات في الوقت الفعلي. دعنا نرى مزيجًا من الاثنين في الكود التالي. قبل المعالجة الإضافية، يرجى إلقاء نظرة على مجموعات النصوص التي يوفرها NLTK. يمكنك التنزيل باستخدام الأمر

nltk(nltk.download('all'))

علاقة NLTK وWord2vec

تم تنزيل Corpora باستخدام NLTK

يرجى الاطلاع على لقطة الشاشة للرمز.

import nltk
import gensim
from nltk.corpus import abc

model= gensim.models.Word2Vec(abc.sents())
X= list(model.wv.vocab)
data=model.most_similar('science')
print(data)

العلاقة بين NLTK وWord2vec بمساعدة التعليمات البرمجية

الإخراج:

[('law', 0.9415997266769409), ('practice', 0.9276568293571472), ('discussion', 0.9259148836135864), ('agriculture', 0.9257254004478455), ('media', 0.9232194423675537), ('policy', 0.922248125076294), ('general', 0.9166069030761719), ('undertaking', 0.916458249092102), ('tight', 0.9129181504249573), ('board', 0.9107444286346436)]

شرح الكود

  1. يتم استيراد مكتبة nltk والتي يمكنك من خلالها تنزيل مجموعة ABC التي سنستخدمها في الخطوة التالية.
  2. الجينسيم مستورد . إذا لم يتم تثبيت Gensim Word2vec، فيرجى تثبيته باستخدام الأمر "pip3 install gensim". يرجى الاطلاع على لقطة الشاشة أدناه.
تثبيت Gensim باستخدام PIP

تثبيت Gensim باستخدام PIP
  1. قم باستيراد مجموعة ABC التي تم تنزيلها باستخدام nltk.download('abc').
  2. قم بتمرير الملفات إلى نموذج Word2vec الذي يتم استيراده باستخدام Gensim كجمل.
  3. يتم تخزين المفردات في شكل متغير.
  4. يتم اختبار النموذج على عينة من الكلمات العلمية حيث أن هذه الملفات مرتبطة بالعلم.
  5. هنا يتنبأ النموذج بكلمة "علم" مماثلة.

المنشطات وWord2Vec

تحدد وظيفة تنشيط الخلية العصبية الناتج عن هذه الخلية العصبية عند مجموعة من المدخلات. مستوحاة بيولوجيًا من نشاط في أدمغتنا حيث يتم تنشيط الخلايا العصبية المختلفة باستخدام محفزات مختلفة. دعنا نفهم وظيفة التنشيط من خلال الرسم التخطيطي التالي.

وظيفة التنشيط في Word2vec

فهم وظيفة التنشيط

هنا x1,x2,..x4 هي عقدة الشبكة العصبية.

w1، w2، w3 هو وزن العقدة،

؟ هو مجموع كل الوزن وقيمة العقدة التي تعمل كوظيفة التنشيط.

لماذا وظيفة التنشيط؟

إذا لم يتم استخدام دالة التنشيط، فسيكون الناتج خطيًا، لكن وظيفة الدالة الخطية محدودة. لتحقيق وظائف معقدة مثل اكتشاف الكائنات وتصنيف الصور وكتابة النص باستخدام الصوت والعديد من المخرجات غير الخطية الأخرى، يلزم تحقيق ذلك باستخدام دالة التنشيط.

كيف يتم حساب طبقة التنشيط في تضمين الكلمات (Word2vec)

طبقة Softmax (الدالة الأسية الطبيعية) هي دالة طبقة الإخراج التي تنشط أو تشغل كل عقدة. هناك نهج آخر مستخدم وهو Softmax الهرمي حيث يتم حساب التعقيد بواسطة O(log2V) حيث يكون softmax هو O(V) حيث V هو حجم المفردات. والفرق بينهما هو تقليل التعقيد في طبقة softmax الهرمية. لفهم وظيفتها (softmax الهرمية)، يرجى إلقاء نظرة على مثال تضمين Word أدناه:

هيكل Softmax الهرمي الشبيه بالشجرة

هيكل هرمي يشبه شجرة سوفت ماكس

لنفترض أننا نريد حساب احتمالية ملاحظة الكلمة حب نظرا لسياق معين. سيكون التدفق من الجذر إلى العقدة الورقية هو الخطوة الأولى إلى العقدة 2 ثم إلى العقدة 5. لذا، إذا كان لدينا حجم مفردات يبلغ 8، فستكون هناك حاجة إلى ثلاث عمليات حسابية فقط. لذلك يسمح بتحليل وحساب احتمال كلمة واحدة (حب).

ما هي الخيارات الأخرى المتاحة غير Hierarchical Softmax؟

إذا كان التحدث بشكل عام عن خيارات تضمين الكلمات المتاحة، فهي Softmax المتمايزة، وCNN-Softmax، وأخذ عينات الأهمية، وأخذ عينات الأهمية التكيفية، وتقديرات تباين الضوضاء، وأخذ العينات السلبية، والتطبيع الذاتي، والتطبيع غير المتكرر.

بالحديث تحديدًا عن Word2vec، لدينا عينات سلبية متاحة.

أخذ العينات السلبية هو وسيلة لأخذ عينات من بيانات التدريب. إنه يشبه إلى حد ما النسب التدرج العشوائي، ولكن مع بعض الاختلاف. تبحث العينات السلبية فقط عن أمثلة التدريب السلبية. وهو يعتمد على تقدير الضوضاء المتباين وأخذ عينات عشوائية من الكلمات، وليس في السياق. إنها طريقة تدريب سريعة وتختار السياق بشكل عشوائي. إذا ظهرت الكلمة المتوقعة في السياق الذي تم اختياره عشوائيًا، يكون كلا المتجهين قريبين من بعضهما البعض.

ما الاستنتاج الذي يمكن استخلاصه؟

تعمل المنشطات على إطلاق الخلايا العصبية تمامًا كما يتم إطلاق الخلايا العصبية لدينا باستخدام المحفزات الخارجية. تعد طبقة Softmax واحدة من وظائف طبقة الإخراج التي تطلق الخلايا العصبية في حالة تضمين الكلمات. في Word2vec لدينا خيارات مثل Softmax الهرمي والعينة السلبية. باستخدام المنشطات، يمكن للمرء تحويل الدالة الخطية إلى دالة غير خطية، ويمكن تنفيذ خوارزمية تعلم آلي معقدة باستخدام ذلك.

ما هو جينسيم؟

جينسيم عبارة عن مجموعة أدوات مفتوحة المصدر لنمذجة المواضيع ومعالجة اللغة الطبيعية والتي يتم تنفيذها في Python و سيثون. تتيح مجموعة أدوات Gensim للمستخدمين استيراد Word2vec لنمذجة الموضوع لاكتشاف البنية المخفية في نص النص. لا يوفر Gensim تطبيق Word2vec فحسب، بل يوفر أيضًا تطبيق Doc2vec وFastText أيضًا.

يدور هذا البرنامج التعليمي حول Word2vec لذا سنلتزم بالموضوع الحالي.

كيفية تنفيذ Word2vec باستخدام Gensim

حتى الآن ناقشنا ما هو Word2vec، وبنياته المختلفة، ولماذا هناك تحول من حقيبة الكلمات إلى Word2vec، والعلاقة بين Word2vec وNLTK مع الكود المباشر ووظائف التنشيط.

فيما يلي طريقة خطوة بخطوة لتنفيذ Word2vec باستخدام Gensim:

الخطوة 1) جمع البيانات

الخطوة الأولى لتنفيذ أي نموذج للتعلم الآلي أو تنفيذ معالجة اللغة الطبيعية هي جمع البيانات

يرجى ملاحظة البيانات لبناء روبوت محادثة ذكي كما هو موضح في مثال Gensim Word2vec أدناه.

[{"tag": "welcome",
"patterns": ["Hi", "How are you", "Is any one to talk?", "Hello", "hi are you available"],
"responses": ["Hello, thanks for contacting us", "Good to see you here"," Hi there, how may I assist you?"]

        },
{"tag": "goodbye",
"patterns": ["Bye", "See you later", "Goodbye", "I will come back soon"],
"responses": ["See you later, thanks for visiting", "have a great day ahead", "Wish you Come back again soon."]
        },

{"tag": "thankful",
"patterns": ["Thanks for helping me", "Thank your guidance", "That's helpful and kind from you"],
"responses": ["Happy to help!", "Any time!", "My pleasure", "It is my duty to help you"]
        },
        {"tag": "hoursopening",
"patterns": ["What hours are you open?", "Tell your opening time?", "When are you open?", "Just your timing please"],
"responses": ["We're open every day 8am-7pm", "Our office hours are 8am-7pm every day", "We open office at 8 am and close at 7 pm"]
        },

{"tag": "payments",
"patterns": ["Can I pay using credit card?", " Can I pay using Mastercard?", " Can I pay using cash only?" ],
"responses": ["We accept VISA, Mastercard and credit card", "We accept credit card, debit cards and cash. Please don’t worry"]
        }
   ]

هذا ما نفهمه من البيانات

  • تحتوي هذه البيانات على ثلاثة أشياء: العلامة والنمط والاستجابات. العلامة هي القصد (ما هو موضوع المناقشة).
  • البيانات بتنسيق JSON.
  • النمط هو سؤال سيطرحه المستخدمون على الروبوت
  • الاستجابات هي الإجابة التي سيقدمها روبوت المحادثة للسؤال/النمط المقابل.

الخطوة 2) المعالجة المسبقة للبيانات

من المهم جدًا معالجة البيانات الأولية. إذا تم تغذية البيانات المنظفة إلى الجهاز، فسوف يستجيب النموذج بشكل أكثر دقة وسيتعلم البيانات بشكل أكثر كفاءة.

تتضمن هذه الخطوة إزالة الكلمات المتوقفة، والكلمات المتفرعة، والكلمات غير الضرورية، وما إلى ذلك. قبل المضي قدمًا، من المهم تحميل البيانات وتحويلها إلى إطار بيانات. يرجى الاطلاع على الكود أدناه لمثل هذا

import json
json_file =’intents.json'
with open('intents.json','r') as f:
    data = json.load(f)

شرح الكود:

  1. نظرًا لأن البيانات في شكل تنسيق json ومن ثم يتم استيراد json
  2. يتم تخزين الملف في المتغير
  3. الملف مفتوح ومحمل في متغير البيانات

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

import pandas as pd
df = pd.DataFrame(data)
df['patterns'] = df['patterns'].apply(', '.join) 

شرح الكود:

1. يتم تحويل البيانات إلى إطار بيانات باستخدام الباندا التي تم استيرادها أعلاه.

2. سيتم تحويل القائمة في أنماط الأعمدة إلى سلسلة.

from nltk.corpus import stopwords
from textblob import Word
stop = stopwords.words('english')
df['patterns'] = df['patterns'].apply(lambda x:' '.join(x.lower() for x in x.split()))
df['patterns't']= df['patterns''].apply(lambda x: ' '.join(x for x in x.split() if x not in string.punctuation)
df['patterns']= df['patterns'].str.replace('[^\w\s]','')
df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if  not x.isdigit()))
df['patterns'] = df['patterns'].apply(lambda x:' '.join(x for x in x.split() if not x in stop))
df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()]))

شرح الكود:

1. يتم استيراد كلمات التوقف الإنجليزية باستخدام وحدة كلمات التوقف من مجموعة أدوات nltk

2. يتم تحويل جميع كلمات النص إلى أحرف صغيرة باستخدام وظيفة الشرط ولامدا. وظيفة لامدا هي وظيفة مجهولة.

3. يتم فحص كافة صفوف النص في إطار البيانات بحثًا عن علامات الترقيم، ويتم تصفيتها.

4. تتم إزالة الأحرف مثل الأرقام أو النقاط باستخدام تعبير عادي.

5. Digiتتم إزالة نهاية الخبر من النص.

6. تتم إزالة كلمات التوقف في هذه المرحلة.

7. تتم الآن تصفية الكلمات، وإزالة الأشكال المختلفة لنفس الكلمة باستخدام lemmatization. وبهذا نكون قد انتهينا من المعالجة المسبقة للبيانات.

الإخراج:

, patterns, responses, tag
0,hi one talk hello hi available,"['Hello, thanks for contacting us', 'Good to see you here', ' Hi there, how may I assist you?']",welcome
1,bye see later goodbye come back soon,"['See you later, thanks for visiting', 'have a great day ahead', 'Wish you Come back again soon.']",goodbye
2,thanks helping thank guidance thats helpful kind,"['Happy to help!', 'Any time!', 'My pleasure', 'It is my duty to help you']",thankful
3,hour open tell opening time open timing please,"[""We're open every day 8am-7pm"", 'Our office hours are 8am-7pm every day', 'We open office at 8 am and close at 7 pm']",hoursopening
4,pay using credit card pay using mastercard pay using cash,"['We accept VISA, Mastercard and credit card', 'We accept credit card, debit cards and cash. Please don’t worry']",payments

الخطوة 3) بناء الشبكة العصبية باستخدام Word2vec

حان الوقت الآن لبناء نموذج باستخدام وحدة Gensim Word2vec. يتعين علينا استيراد Word2vec من Gensim. دعونا نفعل ذلك، وبعد ذلك سوف نقوم بالبناء وفي المرحلة النهائية سوف نتحقق من النموذج على البيانات في الوقت الحقيقي.

from gensim.models import Word2Vec

الآن في هذا البرنامج التعليمي Gensim Word2vec، يمكننا بناء النموذج بنجاح باستخدام Word2Vec. الرجاء الرجوع إلى السطر التالي من التعليمات البرمجية لمعرفة كيفية إنشاء النموذج باستخدام Word2Vec. يتم توفير النص للنموذج على شكل قائمة لذلك سنقوم بتحويل النص من إطار البيانات إلى القائمة باستخدام الكود أدناه

Bigger_list=[]
for i in df['patterns']
     li = list(i.split(""))
     Bigger_list.append(li)	
Model= Word2Vec(Bigger_list,min_count=1,size=300,workers=4)

شرح الكود:

1. تم إنشاء القائمة الأكبر حيث تم إلحاق القائمة الداخلية. هذا هو التنسيق الذي يتم تغذيته للنموذج Word2Vec.

2. يتم تنفيذ الحلقة، ويتم تكرار كل إدخال في عمود الأنماط في إطار البيانات.

3. يتم تقسيم كل عنصر من عناصر أنماط الأعمدة وتخزينه في القائمة الداخلية

4. يتم إلحاق القائمة الداخلية بالقائمة الخارجية.

5. يتم توفير هذه القائمة لنموذج Word2Vec. دعونا نفهم بعض المعلمات المقدمة هنا

الحد الأدنى_للعدد: وسوف يتجاهل كل الكلمات ذات التردد الإجمالي الأقل من هذا.

المقاس : إنه يحكي أبعاد ناقلات الكلمة.

عمال: هذه هي المواضيع لتدريب النموذج

هناك أيضًا خيارات أخرى متاحة، وبعض الخيارات المهمة موضحة أدناه

نافذة: الحد الأقصى للمسافة بين الكلمة الحالية والمتوقعة داخل الجملة.

سان جرمان: إنها خوارزمية تدريب و1 لـ skip-gram و0 لحقيبة الكلمات المستمرة. لقد ناقشنا هذه بالتفصيل أعلاه.

النظام المنسق: إذا كان هذا هو 1، فإننا نستخدم SoftMax الهرمي للتدريب، وإذا كان 0، فسيتم استخدام أخذ العينات السلبية.

ألفا: معدل التعلم الأولي

دعونا نعرض الكود النهائي أدناه:

#list of libraries used by the code
import string
from gensim.models import Word2Vec
import logging
from nltk.corpus import stopwords
from textblob import Word
import json
import pandas as pd
#data in json format
json_file = 'intents.json'
with open('intents.json','r') as f:
    data = json.load(f)
#displaying the list of stopwords
stop = stopwords.words('english')
#dataframe
df = pd.DataFrame(data)

df['patterns'] = df['patterns'].apply(', '.join)
# print(df['patterns'])
#print(df['patterns'])
#cleaning the data using the NLP approach
print(df)
df['patterns'] = df['patterns'].apply(lambda x:' '.join(x.lower() for x in x.split()))
df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if x not in string.punctuation))
df['patterns']= df['patterns'].str.replace('[^\w\s]','')
df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if  not x.isdigit()))
df['patterns'] = df['patterns'].apply(lambda x:' '.join(x for x in x.split() if not x in stop))
df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()]))
#taking the outer list
bigger_list=[]
for i in df['patterns']:
    li = list(i.split(" "))
    bigger_list.append(li)
#structure of data to be taken by the model.word2vec
print("Data format for the overall list:",bigger_list)
#custom data is fed to machine for further processing
model = Word2Vec(bigger_list, min_count=1,size=300,workers=4)
#print(model)

الخطوة 4) حفظ النموذج

يمكن حفظ النموذج على شكل بن وشكل النموذج. Bin هو التنسيق الثنائي. يرجى الاطلاع على الأسطر أدناه لحفظ النموذج

model.save("word2vec.model")
model.save("model.bin")

شرح الكود أعلاه

1. يتم حفظ النموذج في شكل ملف .model.

2. يتم حفظ النموذج في شكل ملف .bin

سنستخدم هذا النموذج لإجراء اختبارات في الوقت الفعلي مثل الكلمات المتشابهة والكلمات غير المتشابهة والكلمات الأكثر شيوعًا.

الخطوة 5) تحميل النموذج وإجراء الاختبار في الوقت الحقيقي

يتم تحميل النموذج باستخدام الكود أدناه:

model = Word2Vec.load('model.bin')

إذا كنت ترغب في طباعة المفردات منه، فيمكنك استخدام الأمر أدناه:

vocab = list(model.wv.vocab)

يرجى الاطلاع على النتيجة:

['see', 'thank', 'back', 'thanks', 'soon', 'open', 'mastercard', 'card', 'time', 'pay', 'talk', 'cash', 'one', 'please', 'goodbye', 'thats', 'helpful', 'hour', 'credit', 'hi', 'later', 'guidance', 'opening', 'timing', 'hello', 'helping', 'bye', 'tell', 'come', 'using', 'kind', 'available']

الخطوة 6) فحص معظم الكلمات المشابهة

فلننفذ الأمور عمليا:

similar_words = model.most_similar('thanks')	
print(similar_words)	

يرجى الاطلاع على النتيجة:

[('kind', 0.16104359924793243), ('using', 0.1352398842573166), ('come', 0.11500970274209976), ('later', 0.09989878535270691), ('helping', 0.04855936020612717), ('credit', 0.04659383371472359), ('pay', 0.0329081267118454), ('thank', 0.02484947443008423), ('hour', 0.0202352125197649), ('opening', 0.018177658319473267)]

الخطوة 7) لا يطابق كلمة من الكلمات المقدمة

dissimlar_words = model.doesnt_match('See you later, thanks for visiting'.split())
print(dissimlar_words)

لقد زودنا الكلمات "إلى اللقاء لاحقًا، شكرًا لزيارتك". هذه الإرادة اطبع الكلمات الأكثر اختلافًا عن هذه الكلمات. دعونا نقوم بتشغيل هذا الكود ونجد النتيجة

النتيجة بعد تنفيذ الكود أعلاه:

Thanks

الخطوة 8) إيجاد التشابه بين كلمتين

وهذا سيخبرنا بالنتيجة في احتمال التشابه بين كلمتين. يرجى الاطلاع على الكود أدناه حول كيفية تنفيذ هذا القسم.

similarity_two_words = model.similarity('please','see')
print("Please provide the similarity between these two words:")
print(similarity_two_words)

نتيجة الكود أعلاه هي على النحو التالي

0.13706

يمكنك أيضًا العثور على كلمات مماثلة عن طريق تنفيذ الكود أدناه

similar = model.similar_by_word('kind')
print(similar)

إخراج الكود أعلاه:

[('credit', 0.11764447391033173), ('cash', 0.11440904438495636), ('one', 0.11151769757270813), ('hour', 0.0944807156920433), ('using', 0.0705675333738327), ('thats', 0.05206916481256485), ('later', 0.04502468928694725), ('bye', 0.03960943967103958), ('back', 0.03837274760007858), ('thank', 0.0380823090672493)] 

وفي الختام

  • تضمين الكلمات هو نوع من تمثيل الكلمات الذي يسمح بفهم الكلمات ذات المعنى المماثل بواسطة خوارزميات التعلم الآلي
  • يتم استخدام تضمين الكلمات لحساب الكلمات المتشابهة، وإنشاء مجموعة من الكلمات ذات الصلة، وميزة تصنيف النصوص، وتجميع المستندات، ومعالجة اللغة الطبيعية
  • وأوضح Word2vec: Word2vec هو نموذج شبكة عصبية سطحية مكونة من طبقتين لإنتاج تضمينات للكلمات من أجل تمثيل أفضل للكلمات
  • يمثل Word2vec الكلمات في تمثيل الفضاء المتجه. يتم تمثيل الكلمات في شكل متجهات ويتم التنسيب بطريقة تظهر الكلمات ذات المعنى المتشابه معًا وتقع الكلمات غير المتشابهة في أماكن بعيدة
  • تستخدم خوارزمية Word2vec بنيتين: حقيبة الكلمات المستمرة (CBOW) وتخطي الجرام
  • يعد CBOW أسرع بعدة مرات من Skip gram ويوفر ترددًا أفضل للكلمات المتكررة بينما يحتاج Skip gram إلى كمية صغيرة من بيانات التدريب ويمثل حتى الكلمات أو العبارات النادرة.
  • يمكن استخدام NLTK وWord2vec معًا لإنشاء تطبيقات قوية
  • تحدد وظيفة التنشيط للخلية العصبية مخرجات تلك الخلية العصبية بالنظر إلى مجموعة من المدخلات. في Word2vec. طبقة Softmax (الدالة الأسية المقيسة) هي وظيفة طبقة الإخراج التي تقوم بتنشيط أو إطلاق كل عقدة. يتوفر لدى Word2vec أيضًا عينات سلبية
  • Gensim عبارة عن مجموعة أدوات لنمذجة المواضيع يتم تنفيذها في لغة بايثون