سؤال

أريد بناء بوت أن يسأل شخص ما بعض الأسئلة البسيطة والفروع بناء على الجواب.أدرك تحليل المعنى من الإنسان الردود سوف تكون صعبة ، ولكن كيف يمكنك إعداد البرنامج للتعامل مع "الدولة" من الحوار ؟

وسوف تكون واحدة من المحادثة بين الإنسان و بوت.

هل كانت مفيدة؟

المحلول

ربما كنت تريد أن ننظر إلى سلاسل ماركوف كما أساسيات بوت منظمة العفو الدولية.كتبت شيئا منذ وقت طويل (رمز التي لا أفتخر في كل شيء ، يحتاج تعديل لتعمل على الثعبان > 1.5) التي قد تكون نقطة بداية مفيدة لك: http://sourceforge.net/projects/benzo/

تحرير:هنا الحد الأدنى سبيل المثال في بيثون من سلسلة ماركوف أن يقبل مدخلات من stdin و النواتج النص على أساس احتمالات الكلمات خلفا واحد آخر في المدخلات.هو الأمثل للمركز على غرار سجلات الدردشة, ولكن تشغيل أي لائقة بحجم النص من خلال ذلك أن تثبت المفاهيم:

import random, sys

NONWORD = "\n"
STARTKEY = NONWORD, NONWORD
MAXGEN=1000

class MarkovChainer(object):
    def __init__(self):
        self.state = dict()

    def input(self, input):
        word1, word2 = STARTKEY
        for word3 in input.split():
            self.state.setdefault((word1, word2), list()).append(word3)
            word1, word2 = word2, word3 
        self.state.setdefault((word1, word2), list()).append(NONWORD)

    def output(self):
        output = list()
        word1, word2 = STARTKEY
        for i in range(MAXGEN):
            word3 = random.choice(self.state[(word1,word2)])
            if word3 == NONWORD: break
            output.append(word3)
            word1, word2 = word2, word3
        return " ".join(output)

if __name__ == "__main__":
    c = MarkovChainer()
    c.input(sys.stdin.read())
    print c.output()

فإنه من السهل جدا من هنا إلى المكونات في استمرار و IRC المكتبة ويكون أساس نوع بوت كنت تتحدث عن.

نصائح أخرى

الناس قد ذكرت بالفعل أن statefulness ليس كبير مكون من نموذجية chatbots:

  • نقية ماركوف تطبيقات قد صريحة جدا فضفاضة نوعا من الدولة إذا كان ينمو معجمها الجدول في الوقت الحقيقي—في وقت سابق التصريحات من قبل الإنسان المحاور قد تحصل على متقيا عن طريق الصدفة في وقت لاحق في المحادثة—ولكن نموذج ماركوف لا يملك أي المتأصلة آلية اختيار أو إنتاج مثل هذه الردود.

  • التوزيع على أساس بوت (مثلا ، إليزا) عموما محاولات للرد على (بعض) المحتوى الدلالي الأخيرة المدخلات من المستخدم دون كبير اعتبار قبل التبادلات.

بأن قال: أنت بالتأكيد يمكن إضافة بعض كمية من الدولة إلى chatbot ، بغض النظر عن المدخلات-تحليل و بيان-تخليق نموذج تستخدمه.كيف تفعل ذلك يعتمد كثيرا على ما تريد تحقيقه مع statefulness و هذا ليس واضحا من سؤالك.بضعة أفكار عامة ، ومع ذلك:

  • إنشاء الكلمة المكدس.كما الإنسان يقدم مساهمة, تحليل تخرج الكلمات من بياناتهم/أسئلة و رمي تلك الكلمات على كومة من نوع ما.عندما chatbot فشل أن يأتي بشيء مقنعة للاستجابة في أحدث المدخلات أو ربما فقط عشوائيا ، إلى خلط الأمور—العودة إلى كومة الخاص بك ، والاستيلاء على الكلمة السابقة واستخدام تلك البذور الخاص بك المقبل التوليف.للحصول على نقاط المكافأة ، بوت يعترف صراحة أنه يعود إلى سابق هذا الموضوع ، على سبيل المثال"انتظر, الإنسان, وفي وقت سابق ذكرت فو.[الجملة المصنف من قبل فو]".

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

هل من الممكن أن توضح قليلا ما تريد الدولة أن تساعدك على إنجاز ؟

تخيل الشبكة العصبية مع تحليل قدرات في كل عقدة أو الخلايا العصبية.اعتمادا على القواعد و تحليل النتائج العصبية النار.إذا كانت بعض الخلايا العصبية النار ، يمكنك الحصول على فكرة جيدة عن الموضوع الدلالي من السؤال وبالتالي يمكن أن تعطي إجابة جيدة.

الذاكرة يتم عن طريق حفظ المواضيع تحدثت عنها في الدورة ، إضافة إلى إطلاق النار على السؤال التالي ، وبالتالي توجيه عملية اختيار الإجابات المحتملة في نهاية المطاف.

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

أعتقد أنك يمكن أن ننظر إلى رمز Kooky, و IIRC كما تستخدم سلاسل ماركوف.

أيضا التحقق من ونقلت kooky, كانوا ظهرت على الترميز الرعب منذ وقت ليس ببعيد و بعض فرحان.

أعتقد أن نبدأ هذا المشروع سيكون من الجيد أن لدينا قاعدة بيانات الأسئلة (تنظيم مثل شجرة.في كل عقدة واحدة أو أكثر من الأسئلة).هذه الأسئلة sould أن تكون الإجابة ب "نعم" أو "لا".

إذا كان بوت يبدأ السؤال ، يمكن أن تبدأ مع أي سؤال من يور قاعدة البيانات من الأسئلة علامة بداية السؤال.الجواب هو الطريق إلى العقدة التالية في الشجرة.

تحرير:هنا هو somple واحدة مكتوبة في روبي يمكنك أن تبدأ مع: rubyBOT

من السذاجة chatbot البرنامج.لا تحليل لا ذكاء فقط التدريب ملف الإخراج.

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

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

أنها ليست واقعية جدا ولكن أنا هنا أتحدى أي شخص أن نفعل ما هو أفضل في 71 خطوط من التعليمات البرمجية !!وهذا يشكل تحديا كبيرا لأي مهدها Pythonists و أتمنى أن أستطيع فتح التحدي إلى جمهور أوسع من عدد صغير من الزوار أحصل على هذا بلوق.إلى رمز بوت الذي يضمن دائما أن يكون النحوية بالتأكيد يجب أن يكون أقرب إلى عدة مئات من السطور .. مبسطة بشكل كبير من قبل مجرد محاولة التفكير في أبسط قاعدة أن تعطي الكمبيوتر مجرد طعنة في وجود شيء أقول.

ردوده بل انطباعي على أقل تقدير !أيضا عليك أن تضع ما تقول في علامات الاقتباس المفردة.

لقد استخدمت الحرب والسلام لبلدي "كوربوس" الذي استغرق بضع ساعات التدريب على تشغيل واستخدام أقصر الملف إذا كنت غير صبور...

هنا هو المدرب

#lukebot-trainer.py
import pickle
b=open('war&peace.txt')
text=[]
for line in b:
    for word in line.split():
        text.append (word)
b.close()
textset=list(set(text))
follow={}
for l in range(len(textset)):
    working=[]
    check=textset[l]
    for w in range(len(text)-1):
        if check==text[w] and text[w][-1] not in '(),.?!':
            working.append(str(text[w+1]))
    follow[check]=working
a=open('lexicon-luke','wb')
pickle.dump(follow,a,2)
a.close()

هنا هو بوت

#lukebot.py
import pickle,random
a=open('lexicon-luke','rb')
successorlist=pickle.load(a)
a.close()
def nextword(a):
    if a in successorlist:
        return random.choice(successorlist[a])
    else:
        return 'the'
speech=''
while speech!='quit':
    speech=raw_input('>')
    s=random.choice(speech.split())
    response=''
    while True:
        neword=nextword(s)
        response+=' '+neword
        s=neword
        if neword[-1] in ',?!.':
            break
    print response

كنت تميل إلى الحصول على شعور غريب عندما يقول شيء يبدو جزئيا إلى معنى.

أود أن أقترح النظر في الاحتمالات النظرية الافتراضية.ثم رصد غرفة الدردشة لفترة من الوقت لإنشاء شجرة الاحتمالات.

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

إذا كنت أتذكر بشكل صحيح, كثير من الناس كانوا مقتنعين بأنهم "الحديث" شخص حقيقي طالما وضع المحادثات معها.

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

إذا كنت لا تحتاج إلى التعلم بوت باستخدام AIML (http://www.aiml.net/) من المرجح أن تنتج النتيجة التي تريدها ، على الأقل فيما يتعلق بوت تحليل المدخلات والإجابة على أساس ذلك.

يمكنك إعادة استخدام أو إنشاء "العقل المدبر" مصنوعة من XML (في AIML-تنسيق) و تحليل/تشغيلها في برنامج (محلل).هناك موزعي في عدة لغات مختلفة للاختيار من بينها ، وبقدر ما أستطيع أن أقول رمز يبدو أن المصدر المفتوح في معظم الحالات.

يمكنك استخدام "المحادثة الآلية" ، مضيف محليا باستخدام - 'قارورة-المحادثة الآلية-ماستر"

الروابط:

  1. [المحادثة الآلية التثبيت] https://chatterbot.readthedocs.io/en/stable/setup.html
  2. [المضيف محليا باستخدام - قارورة-المحادثة الآلية-ماجستير]: https://github.com/chamkank/flask-chatterbot

الهتافات ،

Ratnakar

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top