فهو يفهم أوامرك الصوتية، ويبحث في مصادر الأخبار والمعرفة، ويلخص المحتوى ويقرأه لك.
تحقق من الفيديو التجريبي.
عرضت مجلة Chatbots مقالتي عن Delbot ضمن أفضل 100 مقالة في مجلة Chatbots.
python app.py
في موجه الأوامر لبدء تشغيل خدمة الويب.تظل الروبوتات موضوعًا ساخنًا. الجميع يتحدث عنهم.
ماذا عن بناء واحدة من الصفر؟ البرنامج البسيط الذي سنبنيه اليوم سوف يفهم ويجيب على أسئلة مثل:
هدفنا هو برمجة الروبوت من الألف إلى الياء واستخدام معالجة اللغة الطبيعية (NLP) أثناء القيام بذلك.
بالإضافة إلى ذلك، سيكون الروبوت الخاص بنا مزودًا بالصوت ومعتمدًا على الويب إذا أكملت قسم تطبيق الويب أيضًا. أفضل ما في الأمر هو أننا لا نحتاج إلى القيام بأي شيء خيالي للتعرف على الكلام وتركيبه: سوف نستخدم القدرة المضمنة في متصفحات الويب الحديثة.
على مستوى عالٍ، نريد أن نكون قادرين على فهم نوعين واسعين من الاستعلامات. فيما يلي المخطط الانسيابي.
قد نسأل عن الأخبار . على سبيل المثال:
ما هو الأحدث في Fantastic Beasts في The Guardian؟
سيقوم الروبوت بالاستعلام عن واجهة برمجة التطبيقات (API) الخاصة بمصدر الأخبار المطلوب (نيويورك تايمز إذا لم يتم تحديد أي شيء) وتلخيص النتائج:
[...] إن مقارنة فيلم هاري بوتر الأول (هاري بوتر وحجر الفيلسوف لعام 2001) مع الفيلم الأخير (هاري بوتر والأقداس المهلكة الجزء الثاني لعام 2011) يشبه إلى حد ما مقارنة بامبي مع كلاب الخزان. التقينا به لأول مرة في عشرينيات القرن العشرين في نيويورك - أي قبل 60 عامًا تقريبًا من ولادة هاري - حيث كان [...]
(المصدر: https://www.theguardian.com/books/2016/nov/25/jk-rowling-fantastic-beasts-screenplay)
قد نطرح سؤال المعرفة . على سبيل المثال:
ما هي ثلاثية RDF؟
وسوف يجيب الروبوت:
الثلاثي الدلالي، أو الثلاثي ببساطة، هو كيان البيانات الذرية في إطار وصف الموارد .nيتيح هذا التنسيق تمثيل المعرفة بطريقة يمكن قراءتها بواسطة الآلة. على وجه الخصوص، يمكن معالجة كل جزء من ثلاثية RDF بشكل فردي عبر عناوين URL فريدة u2014 على سبيل المثال، قد يتم تمثيل العبارة الثانية أعلاه في RDF كـ http://example.name#BobSmith12 http://xmlns.com/foaf/0.1/ يعرف http://example.name#JohnDoe34.
(المصدر: https://en.wikipedia.org/wiki/Semantic_triple)
نحن نحدد قاعدة بسيطة لتصنيف المدخلات: إذا كان الاستعلام يحتوي على أي من الكلمات أخبار أو أحدث ، فهو استعلام أخبار . وإلا فهو استعلام معرفة .
تعد وظيفة predict
لفئة QueryAnalyzer
هي نقطة الدخول الرئيسية لروبوتنا. ينفذ التصنيف أعلاه. فإنه يدعو وظائف أخرى ل
وأخيرًا، تقوم بإرجاع الإخراج وعلامة تشير إلى ما إذا كان هناك أي خطأ.
نحن نفترض أن الإدخال يكون بأحد الأشكال التالية.
ما هي آخر الأخبار عن حرب النجوم في نيويورك تايمز؟
اقرأ لي آخر الأخبار عن خروج بريطانيا من الاتحاد الأوروبي.
أعطني أخبارًا عن أفلام Marvel Cinematic Universe لعام 2017 من صحيفة الغارديان.
رمز مميز | يعطي | أنا | ال | أحدث | أخبار | على | دونالد | ترامب | من | ال | جديد | يورك | مرات | . |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
نقاط البيع | الفعل | برون | ديت | أدج | اسم | شرطة أبوظبي | بروبن | بروبن | شرطة أبوظبي | ديت | بروبن | بروبن | بروبن | نقطة |
علامة | VB | بي آر بي | د.ت | JJS | ن.ن | في | ننب | ننب | في | د.ت | ننب | ننب | ننب | . |
هناك نمط في الجمل منظم على النحو الوارد أعلاه. وحروف الجر هي المفتاح.
موضوع البحث يقع بين حروف الجر الأولى والأخيرة. المصدر المطلوب في النهاية بعد حرف الجر الأخير. الجزء الأخير من الاسم هو المصدر.
وفي حالة عدم تحديد المصدر، كما في المثال الثاني، فإن كل ما بعد حرف الجر الأول يفترض أن يكون موضوع البحث.
حروف الجر ، ببساطة، هي حروف الجر وحروف الجر.
في اللغة التي تبدأ بالرأس مثل اللغة الإنجليزية، عادةً ما تسبق الإضافة العبارة الاسمية. على سبيل المثال شخصيات من عالم Marvel السينمائي. بينما في اللغة النهائية مثل الغوجاراتية، فإن الإضافة تتبع عبارة الاسم. هذه هي postpositions. على سبيل المثال માર્વેલ ચલચિત્ર જગત_ના_ પાત્રો، الذي يترجم كلمة بكلمة إلى: عالم Marvel السينمائي للشخصيات.
نقوم باستدعاء get_news_tokens
من فئة QueryExtractor
، التي تستخرج المصدر والاستعلام من الإدخال. داخليًا، يستدعي _split_text
لاستخراج أجزاء الاسم وأجزاء الكلام والنص الذي تم تحليله بالكامل من الإدخال. نحن lemmatize المصطلحات في الاستعلام.
بعد ذلك، نقوم باستدعاء الدالة get_news
باستخدام الاستعلام في إحدى فئات Aggregator
في media_aggregator.py بناءً على المصدر . يؤدي هذا إلى إرجاع قائمة بالمقالات الإخبارية التي تم إرسالها كرد بواسطة واجهة برمجة تطبيقات الأخبار. نحن ندعم حاليًا The Guardian API وThe New York Times API.
أخيرًا، نختار العنصر الأول (افتراضيًا) من قائمة الإجابات ونلخصه باستخدام وظيفة shorten_news
.
نحن نفترض أن الإدخال يكون بأحد الأشكال التالية.
جون دير
جان دارك
من هو دونالد ترامب؟
من كان جي آر آر تولكين؟
ما هو الكائن المسند الموضوع؟
أخبرني عن فيزياء الجسيمات.
رمز مميز | ماذا | يكون | ان | قوات الدفاع الرواندية | ثلاثية | ؟ |
---|---|---|---|---|---|---|
نقاط البيع | اسم | الفعل | ديت | بروبن | اسم | نقطة |
علامة | الفسفور الأبيض | VBZ | د.ت | ننب | ن.ن | . |
رمز مميز | يخبر | أنا | عن | هو | - | رجل | و | ال | سادة | ل | ال | الكون | . |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
نقاط البيع | الفعل | برون | شرطة أبوظبي | برون | نقطة | اسم | كونج | ديت | اسم | شرطة أبوظبي | ديت | اسم | نقطة |
علامة | VB | بي آر بي | في | بي آر بي | واصلة | ن.ن | نسخة | د.ت | NN | في | د.ت | ن.ن | . |
إذا وجدنا فعلًا مساعدًا، فإننا نتعامل مع كل شيء بعد حدوثه الأول على أنه استعلام. وبالتالي، في المثال 1 ، يكون الاستعلام RDF Triple .
بخلاف ذلك، فإننا نتعامل مع جميع الأجزاء الاسمية بعد الأولى باعتبارها استعلامًا. وهكذا، في المثال 2 ، يكون الاستعلام هو "الإنسان هو سيد الكون" .
نقوم باستدعاء get_knowledge_tokens
من فئة QueryExtractor
، التي تستخرج الاستعلام .
نقوم بتمرير هذا إلى الدالة get_gkg
، التي تستعلم عن واجهة برمجة تطبيقات ويكيبيديا من خلال حزمة ويكيبيديا بايثون وتقوم بإرجاع ملخص مكون من 5 جمل للنتيجة العليا.
لقد استخدمت فئة FrequencySummarizer
من تلخيص النص باستخدام NLTK. بدلا من ذلك، يمكنك استخدام سومي.
بالإضافة إلى الحزم re و bs4 والطلبات والمشغل والمجموعات و heapq و string و nltk ، سنستخدم ما يلي.
spaCy : يرجى إعداده كما هو موضح في تثبيت مستندات spaCy. سوف يساعدنا SpaCy في القيام ببعض البرمجة اللغوية العصبية السريعة. يمكننا استخدام NLTK ولكن spaCy سوف يجعلك تسير بشكل أسرع. نحن نستخدم spaCy في هذا المشروع.
ويكيبيديا : يساعد هذا في الاستعلام عن واجهة برمجة تطبيقات ويكيبيديا. يمكنك قراءة مستندات حزمة ويكيبيديا بايثون هنا.
الملخص : تم استعارة ما استخدمته من مدونة The Glowing Python التي كتبها JustGlowing. وهو يلخص المحتوى المطول. بدلا من ذلك، يمكنك استخدام سومي.
Flask-RESTful، Flask (اختياري) : هذه مخصصة لإنشاء تطبيق ويب وتشغيل الروبوت الخاص بنا من خلال خدمة ويب RESTful.
أضفنا صفحة ويب رائعة يمكنك من خلالها إطلاق الاستعلامات الصوتية وجعل المتصفح يقرأ محتوى الرد. نحن نستخدم Web Speech API لهذا الغرض.
لقد قمنا بإعداد خدمة الويب REST المستندة إلى Flask وتشغيلها في أقل من 20 سطرًا من التعليمات البرمجية. تتعامل فئة QueryService
مع الطلبات.
اعتبارًا من الآن، نحتاج فقط إلى مكالمة خدمة واحدة لإرسال المدخلات من تطبيق الويب الخاص بنا إلى الروبوت الخاص بنا. يتم ذلك من خلال وظيفة post
لفئة QueryService
. post
، بدوره، يستدعي وظيفة predict
، وهي نقطة الدخول الرئيسية كما ذكرنا أعلاه.
لقد قمت بإنشاء صفحة ويب أساسية لتوضيح الروبوت. يستخدم Web Speech API لتلقي الإدخال الصوتي وقراءة المحتوى. يمكنك العثور على ملف Index.html في مجلد القوالب. تأكد من تثبيت جميع الحزم والمكتبات المطلوبة، ومن تشغيل خدمة الويب قبل فتح موقع الويب.
يفهم الروبوت البسيط لدينا نطاقًا محدودًا من الطلبات. لا يمكنه فهم أنواع أخرى من الطلبات مثل ما يلي.
طلبات المعرفة ذات بنية مختلفة
اشرح لي ما هو تجميع bootstrap.
أخبرني شيئًا عن علم الأعصاب الحسابي.
طلبات الأخبار ذات بنية مختلفة
ماذا تقول صحيفة نيويورك تايمز عن مباراة روجر فيدرر الأخيرة؟
ماذا يحدث في عالم التنس؟
طلبات المعرفة بأنواع أخرى
كيف يتم صنع الجبن؟
أين ولدت جي كيه رولينج؟
هل يمكننا بناء مدينة سماوية على كوكب الزهرة؟
متى قامت الثورة الفرنسية؟
لماذا يمتلك كوكب المشتري البقعة الحمراء العظيمة؟
أسئلة المتابعة والسياق
اشرح لي ما هو تجميع bootstrap.
ومن ثم: ما علاقتها بالغابات العشوائية؟
إن فهم ما تشير إليه في سؤال المتابعة يأتي ضمن ما يعرف بقرار الجناس. كل ذلك جزء من سياق الفهم. الكلمات المختلفة تعني أشياء مختلفة في سياقات مختلفة. وفي حين أن لدى البشر فهمًا دقيقًا لهذه الأمور، إلا أنه من الصعب جدًا تعليم الآلات نفس الشيء.
لقد حققنا هدفنا المتمثل في بناء روبوت بناءً على بعض القواعد التي حددناها. لقد استخدمنا أيضًا بعض تقنيات البرمجة اللغوية العصبية. وأخيرًا، قمنا بنشر الروبوت الخاص بنا على تطبيق ويب. ومع ذلك، فإن الروبوت الخاص بنا محدود في أنواع الاستفسارات التي يمكنه فهمها والإجابة عليها. ولماذا يكون نطاق فهمها ضيقًا جدًا؟
بشكل عام، يعد جعل أجهزة الكمبيوتر تفهم اللغة حقًا مشكلة صعبة بالنسبة للذكاء الاصطناعي. هناك مجال يعرف باسم NLU (فهم اللغة الطبيعية) ضمن البرمجة اللغوية العصبية مخصص لهذا الغرض.
يمكننا تنفيذ حل قائم على التعلم الآلي حتى يتمكن الروبوت الخاص بنا من فهم نطاق أوسع بكثير من الطلبات.
يرجى التأكد من قراءة شروط استخدام واجهات برمجة التطبيقات المستخدمة هنا.