language agnostic - मैं एक साधारण चैट बॉट एआईआई प्रोग्राम कैसे कर सकता हूं?




language-agnostic artificial-intelligence (7)

मैं एक बॉट बनाना चाहता हूं जो जवाब के आधार पर कुछ सरल प्रश्न और शाखाएं पूछता है। मुझे लगता है कि मानव प्रतिक्रियाओं का अर्थ पार्सिंग चुनौतीपूर्ण होगा, लेकिन बातचीत के "राज्य" से निपटने के लिए आप किस कार्यक्रम को सेटअप करते हैं?

यह मानव और बॉट के बीच एक-एक-एक वार्तालाप होगा।

https://code.i-harness.com


अगर आप बस डब रहे हैं, तो मेरा मानना ​​है कि पिजिन आपको स्क्रिप्ट चैट शैली व्यवहार के लिए अनुमति देता है ढांचा का हिस्सा संभवतः उस स्थिति को हल करता है कि किसने संदेश भेजा, और आप पिछले एन संदेशों में से प्रत्येक के लिए अपनी बॉट की आंतरिक स्थिति का लॉग रखना चाहते हैं। पिछले राज्यों के निरीक्षण और हाल के कुछ संदेशों की सामग्री के आधार पर भविष्य के निर्णय को लेकर कठिन निर्णय हो सकता है। या आप ऐसा कुछ कर सकते हैं जैसे मार्कोव चेन पर विचार-विमर्श किया और इसका उपयोग पार्सिंग और सृजन करने के लिए किया गया।


अगर आपको सीखना बॉट की आवश्यकता नहीं है, तो एआईएमएल ( http://www.aiml.net/ ) का उपयोग करके आप जितने परिणाम चाहते हैं, उतना कम से कम बोट पार्सिंग इनपुट और उसके आधार पर जवाब देने के संबंध में।

आप एक्सएमएल ("एआईएम-प्रारूप" में) के बने "दिमाग" का पुन: उपयोग करेंगे या फिर उन्हें प्रोग्राम (पार्सर) में पार्स / रन करेंगे। चुनने के लिए कई अलग-अलग भाषाओं में पार्सर किए गए हैं, और जहां तक ​​मैं यह कह सकता हूं ज्यादातर मामलों में ओपन सोर्स लगता है।


प्रत्येक नोड या न्यूरॉन में पार्सिंग क्षमताओं के साथ एक तंत्रिका नेटवर्क की कल्पना करो नियमों और पार्सिंग परिणामों पर निर्भर करते हुए, न्यूरॉन्स आग। अगर कुछ न्यूरॉन्स आग लगते हैं, तो आपको विषय और विषय के बारे में अच्छा विचार मिलता है और इसलिए एक अच्छा जवाब दे सकता है।

मेमोरी एक सत्र में बोलने वाले विषयों को रखकर किया जाता है, अगले प्रश्न के लिए फायरिंग को जोड़ने और इसलिए अंत में संभव उत्तर की चयन प्रक्रिया का मार्गदर्शन करना।

ज्ञान के आधार पर अपने नियमों और प्रतिमानों को रखें, लेकिन प्रारंभिक समय में उन्हें स्मृति में संकलित करें, न्यूरॉन प्रति नियम के साथ। आप श्रोताओं या ईवेंट कार्यों की तरह कुछ का उपयोग कर संक्रमण कर सकते हैं।


मुझे यकीन नहीं है कि यह वही है जो आप चाहते हैं, लेकिन एलाजा नामक एक पुराने कार्यक्रम है, जो कि आप ने जो कुछ कहा और जो कुछ सरल शाब्दिक परिवर्तनों के बाद इसे वापस डालकर बातचीत कर सके।

अगर मुझे सही याद है, तो कई लोगों को यह आश्वस्त था कि वे एक वास्तविक व्यक्ति के साथ "बात कर रहे थे" और इसके साथ विस्तृत बातचीत हुई।


मैं Bayesian संभावनाओं को देख सुझाव होगा फिर बस अपने प्रायिकता के पेड़ को बनाने के लिए समय की अवधि के लिए चैट रूम की निगरानी करें।


मैं इस परियोजना को शुरू करने के लिए सोच रहा हूं, प्रश्नों के साथ एक डाटाबेस होना अच्छा होगा (एक पेड़ के रूप में संगठित) प्रत्येक नोड में एक या अधिक प्रश्न)। इन सवालों के जवाब "हाँ" या "नहीं" के साथ दिए जाएंगे।

यदि बॉट प्रश्न पूछना शुरू कर देता है, तो यह प्रारंभ प्रश्न के रूप में चिह्नित प्रश्नों के yuor डेटाबेस से किसी भी प्रश्न से शुरू हो सकता है। जवाब पेड़ में अगले नोड का रास्ता है।

संपादित करें: यहां रूबी में लिखी एक मशहूर एक है जिसे आप इसके साथ शुरू कर सकते हैं: rubyBOT


सहज चटबोट कार्यक्रम कोई पार्सिंग नहीं, कोई चतुरता, सिर्फ एक प्रशिक्षण फाइल और आउटपुट।

यह पहली बार एक पाठ पर खुद को प्रशिक्षित करता है और बाद में वार्तालाप के इनपुट के जवाब उत्पन्न करने के बाद उस प्रशिक्षण से डेटा का उपयोग करता है। प्रशिक्षण प्रक्रिया एक शब्दकोश बनाता है जहां प्रत्येक कुंजी एक शब्द है और मूल्य सभी शब्दों की एक सूची है जो उस पाठ का अनुक्रमिक रूप से कहीं भी प्रशिक्षण पाठ में का पालन करते हैं। यदि कोई शब्द इस सूची में एक से अधिक बार सूचीबद्ध करता है तो वह प्रतिबिंबित करता है और यह बॉट द्वारा चुना जाने की अधिक संभावना है, संभाव्य सामान की कोई ज़रूरत नहीं सिर्फ एक सूची के साथ करती है

बॉट आपके इनपुट से एक यादृच्छिक शब्द चुनता है और एक और यादृच्छिक शब्द चुनकर एक प्रतिक्रिया उत्पन्न करता है जिसे उसके आयोजित शब्द के उत्तराधिकारी माना गया है। यह तब उस वचन को उत्तराधिकारी ढूंढकर प्रक्रिया को दोहराता है और इसे फिर से ले जाता है जब तक यह नहीं सोचता कि यह पर्याप्त कहा गया है। यह उस पाठ पर पहुंचता है जो प्रशिक्षण पाठ में एक विराम चिह्न के पहले एक शब्द पर रोक द्वारा निष्कर्ष। यह फिर आपको इनपुट करने के लिए फिर से इनपुट मोड पर लौट आता है, और इसी तरह।

यह बहुत यथार्थवादी नहीं है, लेकिन मैं इसके द्वारा किसी को भी 71 लाइनों कोड में बेहतर करने के लिए चुनौती देता हूं !! किसी भी नवोदित पायथनिस्ट के लिए यह एक बड़ी चुनौती है, और मैं चाहता हूं कि मैं इस ब्लॉग पर आने वाले कम से कम आगंतुकों की तुलना में एक व्यापक दर्शकों की चुनौती को खोल सकता हूं। बॉट को कोडित करने के लिए हमेशा व्याकरण की गारंटी दी जाती है, निश्चित रूप से कई सौ लाइनों के करीब होनी चाहिए, मैं बस सरल नियम के बारे में सोचने की कोशिश कर रहा हूं, जिससे कंप्यूटर को कुछ कहने के लिए केवल एक चीज दे।

इसका जवाब कम से कम कहने के लिए प्रभावशाली है! इसके अलावा आपको एकल उद्धरण में क्या कहना है

मैंने अपने "कॉर्पस" के लिए युद्ध और शांति का इस्तेमाल किया, जो प्रशिक्षण चलाने के लिए कुछ घंटों का समय लेता है, यदि आप अधीर हो तो छोटी फाइल का उपयोग करें ...

यहाँ ट्रेनर है

#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

जब आप ऐसा कुछ कहते हैं जो आंशिक रूप से समझ में आता है तो आपको एक विलुप्त महसूस होने लगता है।





chatbot