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

لم أر شيئًا معقدًا في هذا ، لذا تمت كتابة نص من هذا النوع بسرعة:
إذن -> قراءة الرسائل -> تحليل وتوليد استجابة -> استجابةتم كل ذلك باستخدام
Callback API VK v.5.80 (
لا شيء جديد )
وكانت أصعب نقطة هي "تحليل الاستجابة والاستجابة لها". في الواقع ، هذا هو الشيء الأكثر أهمية.
ولكن الحقيقة هي أنني أردت إنشاء "روبوت ذكي أكثر أو أقل" مما سيؤدي ببساطة إلى إصدار عبارة عشوائية من القاموس.
"كيف فعلت ذلك وفعلت ذلك؟" - يرجى قراءة ...
لذلك ، دعونا نبدأ!
من حيث المبدأ ، فإن الروبوت لديه وظيفة بسيطة إلى حد ما ، لكنه بسيط بشكل سطحي فقط. إذا تعمقت ، فسيكون كل شيء أكثر تعقيدًا ، لأننا
سنكتب PHP (
)
أكرر أنني لا أحتاج إلى مولد اقتباس فقط ، لذلك قررت أن أطلب من الروبوت بعض المنطق. ومع ذلك ، لا أحتاج أيضًا إلى شبكة عصبية ، لأن التدريب مهمة مخيفة.
لقد حلت مشكلة الإبداع عندما حاولت إحياء الفيلسوف العظيم في القرن التاسع عشر - فريدريش نيتشه.
نعم ، نيتشه هو الذي سيكون في دور الروبوت ، وبالتالي فإن الاقتباسات العشوائية ستبدو أكثر ذكاءً.
لكنني أردت توحيد المحاور والروبوت بطريقة أو بأخرى ، وإنشاء اتصال بينهما ...
لذلك ، تم أخذ عبارة المحاور كأساس ، والتي تم تحويلها عن طريق المرشحات إلى كلمات رئيسية ، والتي تم العثور على جمل من قاعدة أعدت مسبقا.
هكذا ، كما لو أن إجابة سؤال السائل قد تشكلت.
تلقيت رسالة جديدة من المستخدم مثل هذا:
ثم قام بإحضار الرسالة في نموذج مناسب لتسليط الضوء على الكلمات الأساسية وإدخالها في بحث في قاعدة البيانات.
أولاً ، لقد تخلصت تمامًا من النهايات "
a ، و ، s ، am ، yami ، ah ، oh ... " وهكذا ... أزلت علامات الترقيم وشخصيات أخرى.
ثانيا ، أنا لم تأخذ في الاعتبار حروف الجر. أولاً ، قصرت الكلمات على طولها - حتى 3 أحرف. لكن هذا كان خطأ ، لأن فلسفات نيتشه كانت تتميز بعبارات مثل: "
الله ، العالم ، الصخرة ، القرن ، إلخ ". بالإضافة إلى ذلك ، بعد تصفية كلمات من أربعة أحرف ، كانت هناك كلمات من ثلاثة أحرف ، لأنه تم تجاهل النهايات. بعد ذلك قصرت بحثي على كلمات مثل: "
انتهى ، ماذا ، حول ، كيف ، أين ، إلخ ".
ثالثًا ، كتب نيتشه أكثر من ذلك في كتبه بمفرده ، لذلك استبدل الكلمات الواردة مثل "
كلماتك ، كلماتك ، أنت ، الحب ، يمكنك" بعبارة "لي ، أنا ، أنا أحب ، يمكنني ، " على التوالي.
وبالتالي ، يتم الحصول على نوع من الحوار.
علاوة على ذلك - كان من الضروري إنشاء قاعدة ، معجم للعبارات / اقتباسات / عبارات من مقتطفات من كتب نيتشه.
قمت بتنزيل كتب نيتشه بتنسيق
txt من لتر. تجمعهم معًا ثم تمت تصفيتها:
1 اقتباس = جملة واحدة (
تستخدم المحدد كـ "." ، "!" ، "؟" )
اتضح أن القاعدة تدور حول هذا النوع:
- , , -
, , , ,
, , : ,
,
حسنًا ، هناك قاعدة بيانات ورسالة تمت تصفيتها من المستخدم.
: ", ?"
: " "
يبقى أن يربط نظام البحث. كان الأمر صعبًا ، لأن الإعدادات المختلفة أعطت نتائج مختلفة. وإذا أعطى رمز واحد الإجابة الصحيحة ، فإن الطلب الآخر لم يقدم ما هو مطلوب.
تقرر عدم استخدام تعبيرات عادية ، ولكن لاستخدامها مع وظائف مدمجة مثل:
substr
stripos
substr_count
وميزات النص الأخرى ...
بمساعدة ظروف المقارنة الطويلة والدورات الطويلة بشكل لا نهائي ، حققت النتيجة المرجوة تقريبًا.
منطق البحث هو شيء من هذا القبيل: انتقل من خلال كل جملة والعثور على الكلمات من الرسالة الواردة الموجودة في هذه الجملة.
إذا تم العثور على الكلمة ، فسيتم إضافة +1 كـ "وزن المتغير".
لذلك ، كلما تم العثور على مزيد من الكلمات في الجملة ، كلما زاد "وزن المتغير".
يشير هذا إلى أنه إذا تم العثور على الكلمات "الأخلاق والحياة" في بعض الجملة من قاعدة البيانات ، فهذا يمثل إجابة 100٪ سيتم إصدارها.
ولكن إذا كانت الكلمات حول الموضوع وأنتجت الكثير من النتائج بنسبة 100٪ ، فإن الطريقة العشوائية () تم إصدارها بواسطة طريقة rand ().
بالإضافة إلى ذلك ، لم تكن هذه جمل صغيرة دائمًا ، لذا اضطررت لتقليص الإجابة ، تقريبًا من قبل هؤلاء النظاميين:
preg_match('/(?:^|\.\s+)([^\.]*?'.$wordpattern.'[^\.]*?\.+)\s+/i', $text , $matches);
ثم كل شيء تلقائي:
ارسال رسالة
$request_params = array( 'message' => $matches[1],
على وجه التحديد لم أقم بتحميل جميع الشفرات ، لكنها صغيرة نسبيًا. كان الهدف هو إنشاء محرك استجابة عند الطلب ، بدلاً من الذكاء المدرَّب بشكل مصطنع.
يمكنك اختبار الروبوت في
هذا الرابط . فقط اكتب له رسالة. من المهم أن تعرف أنه في بداية الجملة تحتاج إلى وضع عبارة "Nietzsche" ، كما لو كنت تشير إليها ، عندها فقط سوف يستجيب الروبوت.
هذه نسخة تجريبية ، وبالتالي فهي غير مكتملة ، لذلك ، الحصير ، اللغة العامية للشباب ، الأخطاء في الكلمات ، إلخ. - الروبوت لا يأخذ في الاعتبار والقاعدة هي فقط 10000 جملة.
كأمثلة ، يمكنني إعطاء مربعات الحوار:






الخلاصة: نعم ، ليس لدى الروبوت اتصال ثنائي الاتجاه مع المستخدم - إنه ليس ذكاءً اصطناعيًا. ولكن في محادثة من عدد كبير من المشاركين ، سيصبح الروبوت "محاوراً جيداً".