صفحة ١٧٢
انظر إلى أعلى الصفحة، نحن في الدرس الثالث وعنوانه توليد النص، والفرع هنا هو توليد اللغات الطبيعية الذي يختصر بـ NLG. هذا الفرع مسؤول عن جعل الحاسوب ينتج نصوصاً مكتوبة أو منطوقة بلغة بشرية سليمة دون تدخل بشري دائم. انظر إلى مخطط فين في الشكل 3.25، فهو يوضح كيف يتقاطع الذكاء الاصطناعي مع علوم الحاسوب وعلم اللغويات لتكوين مجال معالجة اللغات الطبيعية NLP، ومن داخله يخرج توليد النص NLG. أما في الجدول 3.2 أسفل الصفحة، فتأمل فوائد هذا التوليد الآلي؛ فهو يختصر الوقت بإنتاج المقالات والتقارير الإخبارية تلقائياً، ويحسن خدمة العملاء عبر روبوتات الدردشة التي ترد بردود طبيعية، كما يساعد ذوي الإعاقة أو ذوي الحواجز اللغوية على التواصل مع الآلات ببساطة تامة وبطريقة تشبه تواصل البشر.
صفحة ١٧٣
انظر إلى أعلى الصفحة، ستجد أن لتوليد اللغات الطبيعية أربعة أنواع رئيسية نبدأ باثنين منها. الأول هو توليد اللغات الطبيعية المبني على القوالب Selection-Based NLG، وهنا نستخدم مجموعة قوالب محددة مسبقاً لتحديد بنية ومحتوى النص الناتج. خذ مثال حالة الطقس: عندما يكون لديك قاعدة بيانات فيها متغيرات مثل المدينة والطقس ودرجة الحرارة، فإن النظام يدمجها في القالب الجاهز ليخرج نصاً مثل: اليوم في المدينة حار بالخارج، ودرجة الحرارة هي درجة مئوية وحالة الطقس. النوع الثاني هو توليد اللغات الطبيعية المبني على القواعد Rule-Based NLG، وهنا يعتمد النظام على قواعد لغوية مدربة مسبقاً لتجميع الكلمات بالترتيب الصحيح مثل الفاعل والفعل والمفعول به. انظر إلى الشكل 3.26 أسفل الصفحة، فهو يوضح وسوم أقسام الكلام POS مثل الضمير PRON والفعل VERB ومحدد الكلمة DET والصفة ADJ والاسم NOUN، وكيف تُرتب في الجملة مثل جملة أريد شراء مبكر ليحلل الحاسوب بنية النص بدقة.
صفحة ١٧٤
انظر إلى أعلى الصفحة، لكي تضمن أن القوالب تولد لغوية سليمة، يجب أن تفهم تحليل بناء الجمل أو ما يسمى Syntax Analysis. يتضمن هذا التحليل معرفة أجزاء الجملة وعلاقاتها، وأهمها ثلاثة عناصر رئيسية: الفعل Predicate وهو ما يعبر عما يفعله الفاعل وما يحدث، والفاعل Subject وهو من يقوم بالفعل، والمفعول به Direct Object وهو الاسم أو الضمير الذي يقع عليه الفعل مباشرة. انظر إلى المقطع البرمجي باستخدام مكتبة وندرووردز Wonderwords في منتصف الصفحة، ستجد أن النظام يستخدم قوالب جاهزة مثل دمج الفاعل والفعل معاً لتوليد جملة مثل القط يركض، أو إضافة صفة ومفعول به لتوليد جملة مثل الأسد الصغير يركض أرنب. وفي نهاية الصفحة، يخبرنا النص أنه بدلاً من بناء قوالب لكل جملة بشكل يدوي، نستخدم دالة تسمى paraphrase لإعادة صياغة الجملة وتغيير كلماتها ديناميكياً.
صفحة ١٧٥
انظر إلى دالة paraphrase في أعلى الصفحة. هذه الدالة تأخذ نصاً وتقسمه إلى كلمات، ثم تبحث عن كل كلمة في نموذج التشابه الدلالي WordVector الذي درسناه سابقاً لتقييم مدى تقارب الكلمات دلالياً. مثلاً، إذا كان لديك كلمة تفاحة، فالدالة تبحث عن كلمات أخرى مشابهة لها مثل تفاح، ولتجنب الأخطاء، تستخدم مكتبة تسمى fuzzywuzzy لتقييم التشابه السطحي بين الكلمات الأصلية والبديلة. انظر إلى الكود البرمجي الموضح في باقي الصفحة، فهو يبدأ أولاً بتحديد الكلمات المتوقف عنها stop words، ثم يحمل نموذج الـ WordVector، ويبدأ حلقة تكرارية تفحص كل كلمة في النص، وتقارنها بالكلمات البديلة المحتملة عبر حساب التشابه الدلالي والسطحي، فإذا انخفض التشابه عن الحد المسموح lexical_sim_lbound تتوقف الدالة وتختار البديل المناسب، لتبدأ عملية استبدال الكلمات بذكاء ودقة تامة.
صفحة ١٧٦
انظر إلى أعلى الصفحة، هنا يكتمل الجزء الأخير من دالة paraphrase. إذا كان التشابه الدلالي للكلمة البديلة أقل من الحد الأدنى المطلوب، تحتفظ الدالة بالكلمة الأصلية نفسها، وإلا فإنها تستبدل الكلمة بالبديل الجديد، ثم تجمع الكلمات معاً لتخرج بالنص الجديد المعاد صياغته. انظر إلى المقطع البرمجي الموجود في المربع الأبيض أدناه، فهو تطبيق عملي كامل؛ حيث يستورد مكتبة جينسيم gensim لتحميل نموذج الـ WordVector المسبق التدريب، ويستورد مكتبة nltk لتقطيع النص وإزالة الكلمات المتوقفة غير المهمة مثل حروف الجر باللغة الإنجليزية، ثم يمرر النص الأصلي الذي يتحدث عن تناول العشاء في المطعم إلى الدالة paraphrase مع تحديد حدود التشابه بدقة وهما الرقمان 80 و 0.5. انظر إلى النتيجة أسفل الكود كيف تغيرت بعض الكلمات بمرونة مثل تحول العشاء إلى فطور وبدون إخلال بالمعنى العام للجملة.
صفحة ١٧٧
انظر إلى أعلى الصفحة، سننتقل الآن لاستخدام توليد اللغات الطبيعية المبني على الاختيار باستخدام نموذج الكلمات المتشابهة دلالياً WordVector ومكتبة Networkx الخاصة بإنشاء ومعالجة شبكات البيانات. افترض أن لديك مقالة إخبارية عن مباراة نهائية لكأس العالم 2022، والنص المعروض يظهر أول مئة حرف منها باستخدام أمر بايثون برمجياً. بعد ذلك، نستخدم مكتبة re للتعبير النمطي لتقطيع النص واستخراج الكلمات المفيدة فقط وتخزينها في متغير مفردات vocab. انظر إلى الشكل 3.27 في أسفل الصفحة، وهو مثال على مخطط موزن لشبكة Networkx؛ تجد أن كل كلمة تمثل عقدة، وكل خط يصل بين عقدتين يسمى حواف، وعليه أرقام تعبر عن قوة العلاقة والارتباط الدلالي بين المفاهيم مثل العلاقة بين مطعم وعشاء أو منزل وموقع، وهو ما يساعد النظام لاحقاً على تحديد الجملة الأكثر ملاءمة لقواعد البيانات بناءً على قوة الروابط.
صفحة ١٧٨
انظر إلى أعلى الصفحة، حيث توجد دالة build_graph المصممة خصيصاً لإنشاء المخطط باستخدام مكتبة Networkx. تقوم هذه الدالة بإنشاء عقدة واحدة لكل كلمة فريدة في المفردات، ثم ترسم حافة بين كل كلمتين، ويكون وزن هذه الحافة مساوياً للتشابه الدلالي المحسوب عبر أداة Doc2Vec أو نموذج WordVector. انظر إلى مخرجات الكود البرمجي في منتصف الصفحة عندما نطلب معرفة وزن الحافة بين كلمتي حكم وحارس مرمى، فتجد النتيجة تقارب 0.406، وهذا يدل على وجود ارتباط دلالي متوسط بينهما. انظر إلى الفقرة أسفل الكود والشكل 3.28، ستجد أنه بالنظر إلى المخطط المبني على الكلمات، يمكن تجميع الكلمات المتشابهة دلالياً في صورة عناقيد متصلة معاً بواسطة حواف عالية الوزن، وتسمى عناقيد العقد هذه بالمجتمعات Communities، وتُلون بألوان مختلفة لتمييزها عن بعضها داخل المخطط.
صفحة ١٧٩
انظر إلى أعلى الصفحة، لتنظيم وتحليل هذا المخطط والبحث عن المجتمعات، نستخدم خوارزمية لوفان Louvain Algorithm، وهي واحدة من أكثر خوارزميات Networkx فعالية؛ حيث تعيد تحريك العقد بين المجتمعات حتى تجد البنية المثلى التي تمثل الربط الأفضل في الشبكة الضمنية. انظر إلى دالة get_communities في وسط الصفحة، هذه الدالة تستخدم خوارزمية لوفان للبحث عن المجتمعات المبنية على الكلمات، وتحسب مؤشر الأهمية لكل مجتمع على حدة وتضعه في صورة قاموس. يشمل هذا الحساب معامل word_to_community الذي يربط الكلمة بالمجتمع، ومعامل community_scores الذي يربط المجتمع بدرجة أهميته الكلية. يوضح لك المثال في النص: إذا كان المجتمع يتضمن ثلاث كلمات تظهر 5 و 6 و 8 مرات في النص، فإن مؤشر الأهمية لهذا المجتمع يساوي مجموع تكراراتها وهو 19، وبذلك يعبر هذا المؤشر عن مدى قوة وثقل المفهوم الذي يضمه هذا المجتمع داخل النص.