للتعرف على ربط الكيان المسمى (named entity linking) فلناخذ المثال التالي.
ضع في اعتبارك سيناريو نعمل فيه مع فريق علم البيانات لإحدى الصحف الكبيرة (على سبيل المثال ، The New York Times). نحن مكلفون بمهمة بناء نظام يقوم بإنشاء تمثيل مرئي للقصص الإخبارية من خلال ربط الكيانات المختلفة المذكورة في القصص بما يشيرون إليه في العالم الحقيقي ، كما هو موضح في الشكل أدناه.
القيام بذلك يتطلب معرفة العديد من مهام إستخراج المعلومات بخلاف ما رأيناه مع التعرف على الكيانات المسماة (named entity recognition) و استخراج الكلمات الرئيسية أو المفاتيح (keyword or keyphrase extraction ) . كخطوة أولى ، علينا أن نعرف ما تشير إليه هذه الكيانات أو الكلمات الرئيسية بالفعل في العالم الحقيقي.
لنأخذ مثالًا آخر لتوضيح سبب صعوبة ذلك. تأمل هذه الجملة: “لينكولن يقود لينكولن أفياتور ويعيش على طريق لينكولن.” تشير جميع الإشارات الثلاثة لـ “لينكولن” هنا إلى كيانات مختلفة وأنواع مختلفة من الكيانات: أول لينكولن هو شخص ، والثاني هو مركبة ، والثالث هو موقع. كيف يمكننا أن نربط بشكل موثوق كيانات لينكولن الثلاثة بصفحات ويكيبيديا الصحيحة الخاصة بهم كما في الشكل أعلاه
يشير توضيح الكيان المُسمى (Named entity disambiguation ) أو (NED) إلى مهمة معالجة اللغة الطبيعية لتحقيق هذا بالضبط: وهو تعيين هوية فريدة للكيانات المذكورة في النص.
إنها أيضًا الخطوة الأولى في الانتقال نحو مهام أكثر تعقيدًا لمعالجة السيناريو المذكور أعلاه من خلال تحديد العلاقات بين الكيانات. يُعرف NER و NED معًا باسم ربط الكيان المسمى (named entity linking) أو (NEL).
تتضمن بعض تطبيقات معالجة اللغة الطبيعية الأخرى التي قد تحتاج إلى NEL الإجابة على الأسئلة وإنشاء قواعد معرفية كبيرة للأحداث والكيانات المرتبطة ، مثل Google Knowledge Graph.
لذا ، كيف نبني نظام إستخراج المعلومات لأداء ربط الكيان المسمى (NEL) ؟ تمامًا كما يحدد التعرف على الكيانات المسماة (NER) الكيانات وامتدادها باستخدام المعلومات السياقية المشفرة بواسطة مجموعة من السمات، يعتمد ربط الكيان المسمى ( NEL) أيضًا على السياق.
ومع ذلك ، فإنه يتطلب أكثر من علامات جزء الكلام من حيث المعالجة المسبقة المطلوبة. كحد أدنى ، يحتاج NEL إلى شكل من أشكال التحليل لتحديد العناصر اللغوية مثل الموضوع والفعل والموضوع.
بالإضافة إلى ذلك ، قد يحتاج أيضًا إلى دقة المرجع المشترك (Coreference Resolution) لحل وربط مراجع متعددة لنفس الكيان (على سبيل المثال ، ألبرت أينشتاين ، والعالم ، وآينشتاين ، وما إلى ذلك) إلى نفس المرجع في قاعدة معارف موسوعية كبيرة (على سبيل المثال ، ويكيبيديا). يتم تصميم هذا عادةً على أنه مشكلة تعلم الخاضعة للإشراف ويتم تقييمها من حيث الدقة والاسترجاع ودرجات F1 على مجموعات الاختبار القياسية.
يستخدم ربط الكيان المسمى (NEL) المتطور مجموعة من معماريات الشبكات العصبية المختلفة . من الواضح أن تعلم نموذج ربط الكيان المسمى (NEL) يتطلب وجود مجموعة بيانات كبيرة مشروحة بالإضافة إلى نوع من الموارد الموسوعية للارتباط بها.
من الشائع أكثر استخدام الخدمات الجاهزة للدفع حسب الاستخدام التي يقدمها كبار المزودين مثل IBM (Watson) و Microsoft (Azure) لـ مهام ربط الكيان المسمى (NEL) بدلاً من تطوير خدمات داخلية النظام. لنلق نظرة على مثال على استخدام إحدى هذه الخدمات.
مهام ربط الكيان المسمى باستخدام Azure API
تعد Azure Text Analytics API إحدى واجهات برمجة التطبيقات الشائعة لـ NEL كما أن ، DBpedia Spotlight أداة متاحة مجانًا للقيام بالمثل. سنقوم بإستخدام Azure API للقيام بمهمة ربط الكيان المسمى NEL
الحصول على مفتاح Azure API
للحصول على المفتاح نتبع الخطوات التالية :
أولا: من الواجهة الرئيسية لخدمات مايكروسوفت أزور نختار الخدمات المعرفية
ثانياً : من صفحة الخدمات المعرفية نقوم بإنشاء خدمة جديدة
ثالثاً : نختار خدمة تحليل النص
رابعا : نقوم بتعبئة بيانات الخدمة
خامساً : من صفحة الخدمات المنشورة نقوم بالضغط على تفاصيل الخدمة
سادساً : هنا نجد تفاصيل المفتاح
يوضح مقتطف الكود التالي كيفية الوصول إلى Azure API لتنفيذ ربط الكيان في نص.
import requests import pprint # مقتاح الخدمة key = "" # رابط الخدمة #https://docs.microsoft.com/en-us/azure/cognitive-services/text-analytics/how-tos/text-analytics-how-to-entity-linking?tabs=version-3 endpoint = "https://nel01.cognitiveservices.azure.com/text/analytics/v3.0/entities/linking" def print_entities(text): url = endpoint documents = {'documents':[{'id':'1', 'language':'en', 'text':text}]} headers = {'Ocp-Apim-Subscription-Key': key} response = requests.post(url, headers=headers, json=documents) entities = response.json() return entities entities = print_entities(mytext) #طباعة الناتج for document in entities["documents"]: pprint.pprint(document["entities"])
تظهر نتيجة تشغيل هذا الكود باستخدام Azure API أدنا حيث يسرد الكيانات في النص إلى جانب روابط ويكيبيديا الخاصة بهم حيثما كان ذلك متاحًا.
{'dataSource': 'Wikipedia', 'id': 'San Francisco', 'language': 'en', 'matches': [{'confidenceScore': 0.17, 'length': 13, 'offset': 0, 'text': 'SAN FRANCISCO'}], 'name': 'San Francisco', 'url': 'https://en.wikipedia.org/wiki/San_Francisco'}, {'dataSource': 'Wikipedia', 'id': 'After (2019 film)', 'language': 'en', 'matches': [{'confidenceScore': 0.04, 'length': 5, 'offset': 16, 'text': 'After'}], 'name': 'After (2019 film)', 'url': 'https://en.wikipedia.org/wiki/After_(2019_film)'}, {'dataSource': 'Wikipedia', 'id': 'Facebook', 'language': 'en', 'matches': [{'confidenceScore': 0.45, 'length': 8, 'offset': 104, 'text': 'Facebook'}, {'confidenceScore': 0.56, 'length': 8, 'offset': 677, 'text': 'Facebook'}, {'confidenceScore': 0.56, 'length': 8, 'offset': 893, 'text': 'Facebook'}, {'confidenceScore': 0.56, 'length': 8, 'offset': 1068, 'text': 'Facebook'}], 'name': 'Facebook', 'url': 'https://en.wikipedia.org/wiki/Facebook'}, {'dataSource': 'Wikipedia', 'id': 'Thursday (band)', 'language': 'en', 'matches': [{'confidenceScore': 0.08, 'length': 8, 'offset': 116, 'text': 'Thursday'}], 'name': 'Thursday (band)', 'url': 'https://en.wikipedia.org/wiki/Thursday_(band)'}, {'dataSource': 'Wikipedia', 'id': 'Alex Jones', 'language': 'en', 'matches': [{'confidenceScore': 0.52, 'length': 10, 'offset': 344, 'text': 'Alex Jones'}], 'name': 'Alex Jones', 'url': 'https://en.wikipedia.org/wiki/Alex_Jones'}, {'dataSource': 'Wikipedia', 'id': 'InfoWars', 'language': 'en', 'matches': [{'confidenceScore': 0.89, 'length': 8, 'offset': 395, 'text': 'Infowars'}], 'name': 'InfoWars', 'url': 'https://en.wikipedia.org/wiki/InfoWars'}, {'dataSource': 'Wikipedia', 'id': 'Louis Farrakhan', 'language': 'en', 'matches': [{'confidenceScore': 0.8, 'length': 15, 'offset': 466, 'text': 'Louis Farrakhan'}], 'name': 'Louis Farrakhan', 'url': 'https://en.wikipedia.org/wiki/Louis_Farrakhan'}, {'dataSource': 'Wikipedia', 'id': 'Antisemitism', 'language': 'en', 'matches': [{'confidenceScore': 0.5, 'length': 12, 'offset': 567, 'text': 'anti-Semitic'}], 'name': 'Antisemitism', 'url': 'https://en.wikipedia.org/wiki/Antisemitism'}, {'dataSource': 'Wikipedia', 'id': 'Silicon Valley', 'language': 'en', 'matches': [{'confidenceScore': 0.2, 'length': 14, 'offset': 610, 'text': 'Silicon Valley'}], 'name': 'Silicon Valley', 'url': 'https://en.wikipedia.org/wiki/Silicon_Valley'}, {'dataSource': 'Wikipedia', 'id': 'Instagram', 'language': 'en', 'matches': [{'confidenceScore': 0.63, 'length': 9, 'offset': 690, 'text': 'Instagram'}], 'name': 'Instagram', 'url': 'https://en.wikipedia.org/wiki/Instagram'}]
نرى أن سان فرانسيسكو هي موقع ، لكنها موقع محدد ، والذي يشار إليه من خلال صفحة ويكيبيديا الخاصة بها. أليكس جونز ليس أي أليكس جونز آخر ، ولكنه مضيف برنامج تلفزيوني أمريكي ، كما يمكن رؤيته من صفحة ويكيبيديا. من الواضح أن هذا أكثر إفادة من من إستخدام التعرف على الكيانات المسماة (named entity recognition) فقط ، ويمكن استخدامه لاستخراج معلومات أفضل. يمكن بعد ذلك استخدام هذه المعلومات لفهم العلاقة بين هذه الكيانات .
ختاماً
مناهج ربط الكيان المسمى (NEL) الحالية ليست مثالية ، ومن غير المرجح أن تحقق نتائج جيدة مع الأسماء الجديدة أو المصطلحات الخاصة بالنطاق. نظرًا لأن NEL يتطلب أيضًا مزيدًا من المعالجة اللغوية ، بما في ذلك التحليل النحوي ، فإن دقته تتأثر أيضًا بمدى نجاح خطوات المعالجة المختلفة.
كما هو الحال مع مهام إستخراج المعلومات الأخرى ، تؤثر الخطوة الأولى في أي خط إنتاج معالجة اللغة العربية – استخراج النص وتنظيفه – على ما نراه ناتجًا في نواتج ربط الكيان المسمى (NEL) أيضًا. عندما نستخدم خدمات جهات خارجية ، فإننا لا نملك سوى القليل من التحكم في تكييفها مع مجالنا ، إذا لزم الأمر ، أو فهم طريقة عملها الداخلية لتعديلها وفقًا لاحتياجاتنا.
إضافة تعليق