كيف تصمم أنظمة بحث مخصصة في خدماتك لتعمل بكفاءة مع اللغة العربية ؟

أثناء تصفحي اليومي لإحد مواقع النقاش المفضلة لي صادفت أحد الأشخاص يطرح إستفسارًا عن كيفية البحث في قاعدة بيانات عن كلمة في اللغة العربية ، في الحقيقة هذا السؤال طُرح عليه أثناء مقابلة عمل أجراها كمطور تطبيقات ويب في إحدى شركات تكنولوجيا المعلومات ، وبالتحديد ، كان السؤال كيف يمكن لمستخدم موقعك الإلكتروني البحث عن كلمة electron على الرغم أنها ليست مخزنة في قاعدة البيانات ، بل يوجد كلمة “إلكترون” في العربية فقط ، كانت إجابة الشخص بعمل mapping بين كل حرف في كلمة electron ونظيره باللغة العربية ، هذه الطريقة قد تعمل وتنجح ، لكنها ليست فعّالة بالقدر الكافي ، لأنها ستعمل فقط مع الكلمات الموحدة في كلا اللغتين ، بمعنى أصح ، ستعمل مع كلمة “إلكترون” لإن الترجمة باللغة الإنجليزية هي مشابهة لتلك بالعربية ، وكذا الحال مع كلمة “كمبيوتر” على سبيل المثال.

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

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

إذًا ، كيف يمكننا الاستفادة من خواص علوم معالجة اللغات الطبيعية NLP لنحقق وسيلة جيدة لإسترجاع البيانات ، وماذا نعني بـ NLP أساسًا ؟

معالجة اللغات الطبيعية NLP هي مجال علوم الحاسوب و اللغويات المعنية بالتفاعلات بين الحاسوب واللغات الطبيعية والتي بدأت كفرع من الذكاء الاصطناعي والتي بدورها متفرعة من المعلوماتية

هذه الخطوات هي ما أقوم بتطبيقها لتحسين إسترجاع الفقرات والنصوص التي يصل عدد الكلمات فيها إلى 2500-4000 كلمة :

أولًا ، في هذه الحالة ولتسريع عملية البحث يجب علينا إيجاد عدد قليل من الكلمات التي قد تصف هذا الموضوع ، فليس من المنطقي عند قيام مستخدم ما بالبحث عن كلمة معينة أن نقوم بمعالجة مقالة من 4000 كلمة لإيجاد أن كانت تطابق مدخلات المستخدم أم لا ، وفي حال كان هنالك الآف المقالات لك أن تتخيل سوء الأمر ، لذا يجب علينا إيجاد من 6 إلى 10 كلمات تصف الموضوع ، فمثلًا لو كانت الموضوع يتحدث عن الكتب ، إذا يجب أن تكون كلمة كتب إحدى الكلمات التي تصف الموضوع ، هذا الأمر يتطلب معالجة للنص قبل إدخاله إلى قاعدة البيانات ولكن كيف يمكنني إيجاد الكلمات التي يتحمور عنها الموضوع ( والتي أسميها glowing words ) بشكل آلي ؟

يوجد طرق عدة لفعل ذلك ، واحدة من أكثر الطرق المستخدمة هي إجراء إختبار التوزع التكراري على الكلمات ، ببساطة ، قم بإجراء عد للكلمات وأختر اكثر الكلمات تكرارًا في النص كـ Tags ، لذلك دعونا نطبق هذا الموضوع على مقال من 2500 كلمة يتحدث عن الكتب ؟

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

في الحقيقة ، ولإتمام هذه العملية ، سنحتاج إلى إستثناء مجموعة من الحروف أثناء إجراء إختبار الجمع التكراري على الكلمات ، وفي العادة يتم إزالة هذه الحروف في مجموعة من تطبيقات معالجة اللغات الطبيعية NLP ، هذه الحروف تسمى الحروف الشائعة stop words ويتم إزالتها للحصول على القيم الحقيقة المهمة ، دعونا الآن نقوم بإزالة هذه الحروف وننظر إلى النتيجة :

وبالفعل ، بدأنا نحصل على نتائج إيجابية جدًا عن محتوى الموضوع وبشكل آلي ، لذلك يمكننا الآن إعتبار الـكلمات الـ 6 الأكثر تكرارًا ككلمات محورية أو Tags ، لذلك يمكننا أن نتصور جدول قاعدة البيانات الذي يحتوي على هذه المقالة كالتالي :

نوع البيانات المحتوى
أسم المقالة – string مقدمة في علم المكتبات
نص المقالة - string يوجد في عالمنا الحاضر ملايين الكتب ….2500 كلمة
الكلمات المفتاحية - string مكتبة ، تقرير ، كتاب ، مصدر ، نسخ

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

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

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

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

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

نظرة متقدمة : المصححات الإملائية

يمكن اليوم الإستفادة من علوم الذكاء الإصطناعي وتعلم الآلة لتوقع الأنماط المعقدة وإيجادها ، كذلك الأمر مع التصحيح الإملائي ، لكي تحصل على نظام بحث وإسترجاع قوي ، يجب ان تتوقع من المستخدم إدخالات مختلفة ، منها الصالح والطالح 😊 ، لذلك على موقعك أو نظامك إرجاع بيانات متعلقة وصحيحة حتى لوكانت المدخلات خاطئة ( بشكل طفيف ) إملائيًا ، الحديث عن آلية عمل المصححات الإملائية يطول وسنشرحه في تدوينات قادمة ، لكن يمكنك إستخدام أدوات مُعدة مسبقًا للتصحيح الإملائي ، وتعجبني ادوات عربي 1 بهذا الأمر ، مثلاً لو كان المدخل كلمة (بالثربية ) سيفشل نظامك في تجذيعها ،وبالتالي يفشل في إيجاد تطابق مع الكلمات المفتاحية ، الحل هو التشييك على صحتها ، مثلًا في أدوات عربي ستكون النتيجة [بالتربية, بالحربية, بالعربية, بالغربية] ومن هنا يمكنك تجذيع هذه الكلمات والبحث عنها ومطابقتها مع الكلمات المفتاحية الخاصة بك .

لكن ، إلى الآن لم نجب على سؤال المقابلة ! ماذا لو كان المدخل إلكترون ويوجد لدي كلمة electron في قاعدة البيانات ؟ عرفنا أن الإجابة لن تكون في عمل mapping للحروف ، لكن الإجابة تكمن في إستخدام إحدى الواجهات البرمجية API لخدمات الترجمة المتوفرة حاليا لترجمة الكلمات الأعجمية إلى اللغة العربية ، ترجمة حرفية وأخرى معنوية ، مثلًا في ترجمة جوجل يمكنك الحصول على النتائج التالية :

المدخل إلى خدمة الترجمة هو ( electron ) المخرجات هي ( الإلكترون , إلكترون , الإلكترونات ( وعلى صعيد الترجمة الحرفية ستكون النتيجة (al’iilktarunat ) ومن هنا يمكننا الإستفادة من هذا الأمر وتخزينها وإكمال الأجراءات الأخرى ،

في التدوينة المقبلة :

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

1

كُتب في 27/01/2019