Domanda

Voglio costruire un bot, che chiede a qualcuno un paio di semplici domande e rami in base alla risposta.Mi rendo conto che l'analisi di significato umano, le risposte saranno difficili, ma come si fa a configurare il programma per affrontare lo "stato" della conversazione?

Sarà un one-to-one conversazione tra un uomo e bot.

È stato utile?

Soluzione

Probabilmente si vuole guardare in Catene Di Markov come le nozioni di base per il bot AI.Ho scritto qualcosa tempo fa (il codice a cui non sono fiero di tutti, e ha bisogno di qualche mod per funzionare su Python > 1.5) che può essere un utile punto di partenza per voi: http://sourceforge.net/projects/benzo/

EDIT:Ecco un esempio minimale in Python di una Catena di Markov che accetta input da stdin e uscite di testo basato sulle probabilità di parole succedutisi in ingresso.È ottimizzato per l'IRC in stile log di chat, ma l'esecuzione di qualsiasi buon testo di dimensioni attraverso di essa deve illustrare i concetti:

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()

È abbastanza semplice da qui plug in persistenza, IRC biblioteca e sono la base del tipo di bot di cui stai parlando.

Altri suggerimenti

La gente ha già accennato che informazioni sullo stato non è una grande componente di tipico chatbots:

  • un puro di Markov implementazioni possono esprimere molto sciolto sorta di stato se è in crescita il suo lessico e un tavolo in tempo reale—precedenti esternazioni umano interlocutore può ottenere rigurgitato per caso durante la conversazione—ma il modello di Markov non ha alcun meccanismo intrinseco per la selezione e la produzione di tali risposte.

  • un'analisi basata su bot (ad es.ELIZA) generalmente tenta di rispondere ad (alcune) contenuto semantico delle più recenti input da parte dell'utente, senza significative riguardo per prima gli scambi.

Detto questo, è certamente può aggiungere una certa quantità di stato per un chatbot, indipendentemente dall'input-l'analisi e la dichiarazione di sintesi del modello che si sta utilizzando.Come farlo dipende molto su che cosa si vuole realizzare con il vostro informazioni sullo stato, e che non è davvero chiaro dalla tua domanda.Un paio di idee generali, tuttavia:

  • Creare una parola chiave stack.Come umani, offre ingresso, analizzare le parole chiave da loro dichiarazioni/domande e gettare le parole chiave su una pila di qualche tipo.Quando il chatbot non riesce a venire con qualcosa di irresistibile per rispondere in ingresso più recente—o, forse, solo in modo casuale, a mescolare le cose, torna al tuo stack, afferrare una parola chiave precedente, e l'uso che per il seme tuo prossimo sintesi.Per i punti bonus, il bot riconosce esplicitamente che si tratta di tornare ad una precedente soggetto, ad es."Aspetta, UMANO, prima hai citato pippo.[Frase seminati da pippo]".

  • Costruire RPG-come il dialogo logica in bot.Come l'analisi input umano, attivare il flag specifico di conversazione prompt o contenuti da parte dell'utente e a determinate condizioni, modificare ciò che il chatbot può parlare, o il modo di fare comunicazione.Per esempio, un chatbot irto (o rimproveri, o ridere) a fallo lingua è abbastanza comune;un chatbot che otterrà het up, e condizionale rimangono così fino a che si è scusato, sarebbe un interessante stateful variazione su questo.Uscita di commutazione a TUTTE maiuscole, buttare in polemica retorica o richieste o a singhiozzare, etc.

Puoi chiarire un po ' quello che è stato per aiutarti a realizzare?

Immaginate una rete neurale con l'analisi di funzionalità in ogni nodo o di un neurone.A seconda delle regole e l'analisi dei risultati, il fuoco dei neuroni.Se alcuni neuroni fuoco, consente di farsi un'idea sull'argomento e semantica della domanda e, pertanto, può dare una buona risposta.

La memoria è fatta mantenendo argomenti parlato in una sessione, l'aggiunta di cottura per la domanda successiva, e quindi di guidare il processo di selezione delle possibili risposte alla fine.

Mantenere le vostre regole e schemi in una base di conoscenza, ma per inserirli in memoria all'avvio, con un neurone ogni regola.È possibile ingegnere sinapsi di utilizzare qualcosa come ascoltatori o funzioni di eventi.

Penso che si può guardare il codice per Kooky, e IIRC, utilizza anche le Catene di Markov.

Anche controllare il kooky preventivi, erano presenti Coding Horror non molto tempo fa, e alcuni sono esilaranti.

Penso di iniziare questo progetto, sarebbe bene avere un database con le domande (organizzato come un albero.In ogni nodo di una o più domande).A queste domande potrebbe essere risposto con un "sì" o "no".

Se il bot inizia a domanda, può iniziare con qualche domanda dal vostro database di domande contrassegnate come una start-domanda.La risposta è la via per il prossimo nodo dell'albero.

Edit:Qui è un somple uno scritto in ruby si può iniziare con: rubyBOT

ingenuo chatbot programma.Nessuna analisi, nessuna furbizia, solo un file di training e di uscita.

Prima di treni su un testo e poi utilizza i dati che la formazione per generare risposte dell'interlocutore di ingresso.Il processo di formazione crea un dizionario in cui ogni tasto è una parola e il valore è una lista di tutte le parole che seguono il verbo in sequenza ovunque nella formazione di testo.Se una parola si presenta più di una volta in questo elenco, quindi, che riflette ed è più probabilità di essere scelto dal bot, non c'è bisogno per probabilistica roba basta farlo con un elenco.

Il bot si sceglie una parola a caso l'input e genera una risposta scegliendo un'altra parola a caso che è stato visto per essere un successore alla sua tenuta di word.Si ripete quindi il processo di ricerca di un successore per la parola che a sua volta e portando a iterativamente fino a quando si pensa non è detto abbastanza.Si giunge a tale conclusione facendo sosta in una parola che è stata prima di un segno di punteggiatura nella formazione di testo.Si torna quindi in modalità di ingresso per consentire agli utenti di rispondere, e così via.

Non è molto realistico, ma sono con la presente a sfidare chiunque a fare di meglio in 71 righe di codice !!Questa è una grande sfida per qualsiasi erba Pythonists, e vorrei solo che ho potuto aprire la sfida a un pubblico più vasto il piccolo numero di visitatori a questo blog.Per il codice di un bot, che è sempre garantita grammaticali deve sicuramente essere più vicino a diverse centinaia di linee, che mi ha semplificato enormemente da solo cercando di pensare il più semplice regola per dare al computer un mero tentativo di avere qualcosa da dire.

Le sue risposte sono piuttosto impressionistico, per non dire altro !Inoltre devi mettere quello che si dice in apici.

Ho usato la Guerra e la Pace per la mia “corpus”, che ha preso un paio di ore per la formazione di esecuzione, utilizzare un file più breve se siete impazienti...

qui è l'allenatore

#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()

qui è il bot

#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

Si tendono ad avere una strana sensazione quando si dice qualcosa che sembra parzialmente ad avere un senso.

Vorrei suggerire Bayesiano probabilità.Poi basta monitorare la chat per un periodo di tempo per creare le vostre probabilità di albero.

Io non sono sicuro che questo è quello che stai cercando, ma c'è un vecchio programma chiamato ELIZA che potrebbe tenere una conversazione, prendendo quello che hai detto e sputare di nuovo a voi dopo l'esecuzione di alcune semplici trasformazioni testuali.

Se non ricordo male, molte persone erano convinte che "parlare" con una persona reale e aveva a lungo elaborato conversazioni con esso.

Se sei solo dilettarsi, credo Pidgin consente di creare lo script di chat stile di comportamento.Parte del quadro probabilmente chiodini lo stato di chi ha inviato il messaggio, e si desidera tenere un registro del vostro bot stato interno, per ciascuno degli ultimi N messaggi.Stato futuro le decisioni potrebbero essere hardcoded basata sull'ispezione di stati precedenti e i contenuti delle più recenti paio di messaggi.Oppure si potrebbe fare qualcosa di simile a catene di Markov discusso e usarlo sia per l'analisi e la generazione.

Se non si necessita di un apprendimento bot, utilizzando AIML (http://www.aiml.net/) sarà più probabile produrre il risultato desiderato, almeno per quanto riguarda il bot di analisi di input e di fornire risposte basate su di esso.

Sarebbe il riutilizzo o la creazione di "cervelli" di XML (in AIML-formato) e analizza/eseguire un programma (parser).Ci sono parser made in diverse lingue da scegliere, e, per quanto posso dire che il codice sembra essere open source nella maggior parte dei casi.

È possibile utilizzare "ChatterBot" e host locale mediante - 'pallone-chatterbot-master"

Link:

  1. [ChatterBot Installazione] https://chatterbot.readthedocs.io/en/stable/setup.html
  2. [Host Locale mediante pallone-chatterbot-master]: https://github.com/chamkank/flask-chatterbot

Ciao

Ratnakar

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top