Programmazione di un chatterbot - comprensione del linguaggio [chiuso]

3

Spero che questa sia una domanda a cui è possibile rispondere. Lascia che ti dia qualche contesto:

Sono uno studente di psicologia e un programmatore. Vado a cercare di creare un'intelligenza artificiale sotto forma di chatterbot. Ho guardato intorno al web e ho letto di progetti come Eliza che è stato un primo semplice programma di psicoterapia, che ha ora è stato scritto in javascript (così puoi vedere come è stato semplice).

Voglio creare un chatterbot che possono conversare , e che capirò semanticamente e grammaticalmente una frase, ai fini della comunicazione reciproca piuttosto che emettere semplicemente una risposta. Sono interessato ai modi per imparare a programmare con "lingua". So che questa è una domanda complessa, quindi la risposta sarà probabilmente anche complessa.

Quali linguaggi / strutture di programmazione dovrei esaminare quando voglio analizzare la semantica. Conosco l'eccellente progetto Wolfram Alpha che ha un API . Ma non voglio creare un'intelligenza artificiale che possa rispondere a qualsiasi domanda casuale.

Per parafrasare: quali quadri / linguaggi di programmazione sono adatti per lavorare con la decostruzione delle unità linguistiche e la comprensione del linguaggio, allo scopo di conversare? Inoltre conosci qualche progetto che li implementa?

    
posta Jakob 27.01.2012 - 17:25
fonte

4 risposte

7

Se stai cercando un punto di ingresso in questo enorme argomento, ci sono luoghi peggiori da avviare rispetto al Natural Language Toolkit . L'API è Python. È ben documentato . Il libro Natural Language Processing with Python - Analisi del testo con il Natural Language Toolkit , è persino disponibile per la lettura online.

Non voglio ingannarti. NLTK non è una scorciatoia per un chatterbot convincente. È comunque

"suited to work with deconstructing linguistic units and understanding language..."

Se non hai scadenze ravvicinate, Stanford offre un corso gratuito sull'elaborazione della lingua naturale nel febbraio 2012.

    
risposta data 27.01.2012 - 21:51
fonte
8

L'elaborazione del linguaggio naturale è incredibilmente difficile, perché i linguaggi umani sono così ambigui e richiedono un sacco di background generale contesto per dare un senso a ciò che viene detto. Considera le seguenti frasi:

  1. "Scimmie come banane quando si svegliano"
  2. "Le scimmie come banane quando sono mature"
  3. "Ho visto il tecnico di laboratorio con il microscopio."

In (1) e (2) i "loro" si riferiscono alle scimmie o alle banane? Bene, come essere umano mi è chiaro che in (1) il "loro" si riferisce alle scimmie, mentre in (2) si riferisce alle banane. Ma esattamente come lo sapevo? L'informazione non è inerente alla grammatica della frase - è disponibile solo perché come uomo ho accesso a un ampio database di conoscenze di base nel mio cervello, che mi dice che le banane non si "svegliano" mai, e che le scimmie non sono "mature". Pertanto, il mio cervello fornisce le informazioni contestuali per analizzare correttamente la frase.

In (3) vediamo un problema simile: (3) significa che ho visto un tecnico di laboratorio che stava usando un microscopio, o significa che in realtà ho usato un microscopio per vedere un tecnico di laboratorio? Parlando in termini grammaticali, potrebbe significare entrambi. Ma per un essere umano non c'è ambiguità. deve significare il primo, perché quest'ultimo è assurdo. Ma l'unica ragione per cui mi rendo conto che quest'ultimo è assurdo è perché so che cos'è un microscopio, so che un tecnico di laboratorio è una persona, so che non useresti un microscopio per vedere una persona, e so che i tecnici di laboratorio spesso lavorano con i microscopi. Quindi il mio cervello sintetizza tutta quella conoscenza di base, permettendomi di interpretare correttamente la frase.

Ora immagina di provare ad analizzare frasi come queste con un computer. Avresti bisogno di un vasto database (noto come ontologia ) dei fatti e delle relazioni del mondo reale per fornire contesto e un parser piuttosto sofisticato. Ci sono stati alcuni tentativi di farlo in passato, ma è ancora uno sforzo molto teorico, molto orientato alla ricerca.

    
risposta data 27.01.2012 - 23:37
fonte
7

Finora ci sono almeno 50 anni di ricerca nella comprensione del linguaggio naturale. Non hai intenzione di risolvere tutto da solo, e scegliere un linguaggio di programmazione è circa un trilionesimo dello sforzo. Osserva lo sforzo compiuto nella creazione di IBM Watson . Non hanno neanche tentato di risolvere il problema generale della comprensione del linguaggio. Dovevano solo capire gli indizi abbastanza bene da formulare una risposta probabile. I sistemi di traduzione automatica sono un altro buon riferimento. Dopo centinaia di anni-uomo di sforzi abbiamo utili traduttori automatici, ma niente di buono.

    
risposta data 27.01.2012 - 20:45
fonte
3

Ecco un link utile: link

È lì che ho appreso molte tecniche che sto utilizzando nel mio chatterbot chiamato Quanda Sparks . Sebbene l'organizzazione, l'analisi e la creazione di linguaggio comune algoritmicamente sia un argomento complesso, e finora nessun bot ha superato il test di Turing (per quanto ne so), ci sono alcuni modi per imitare il linguaggio umano.

Risposte del modello : questo è un modo per far sembrare che un robot capisca facendolo parlare di ciò che l'umano ha immesso. Diciamo che digito "Mi piacciono i tacos e le enchiladas". Il bot risponde con "Cosa c'è di così bello nei tacos e nelle enchiladas?" Come è arrivato con questa risposta? Quando vede "Mi piace", prende tutto ciò che segue e crea un modello, in questo caso "tacos ed enchiladas". Quindi può costruire una frase con "What is so great about " + template . Il robot può ingannare il suo pubblico senza nemmeno sapere cosa sia un taco.

Risposte generiche : dai al robot molte risposte che potrebbero adattarsi a quasi tutti gli scenari. Alcuni esempi includono "okay", "That's cool", "I you you you", ecc. In questo modo, se il bot non ha nulla da dire, ha ancora una possibilità di tenere il passo.

Thesaurus : supponiamo che tu abbia molte risposte alla ricerca della parola "awesome", ma l'utente entri in "amazing". Normalmente, il bot sarebbe stumped e dovrebbe ricorrere a una delle sue risposte generiche; tuttavia, se sostituisci tutte le occorrenze della parola "amazing" con "awesome", sarà comunque in grado di trovare una buona risposta.

Piani degli imbroglioni di stagnola : gli utenti proveranno tutto il possibile per ingannare il robot rivelando le sue debolezze nel discorso. Alcune cose che proveranno: lasciando il campo di input vuoto, inserendo parole senza senso, ripetendo la stessa cosa due volte, mimando il bot e mettendo le parole fuori posto, come "tu sei un robot che". Assicurati di dare buone risposte in queste circostanze. Nell'ultimo esempio, puoi verificare che ci sia una parola dopo "who" prima di dire al bot che l'utente ha posto una domanda.

Parla nel contesto : questa è la parte più difficile e il motivo principale per cui i robot non superano il test di Turing. Chatterbot può solo fingere di capire dando risposte sensate. Se chiedi a un chatterbot di ricordare il numero 490, parla un po 'e poi chiedi al bot qual è il numero, la maggior parte dei bot non avrà idea di cosa stai parlando. I robot più bravi possono guardare almeno una o due righe indietro. Assicurati di rendere il tuo bot anche sensibile al contesto altrimenti.

Non ripetere le risposte : quando parli con una persona, di solito dice "Oh, è bello ... oh, è bello ... oh, è bello" come quello tre volte di fila? No. Anche se non è davvero interessato, cambierà le parole in questo modo: "oh, è bello ... fantastico ... è buono." Assicurati che anche il tuo bot resti in attesa prima di ripeterlo.

Impara dagli errori : è difficile far imparare il robot da solo, ma puoi insegnarlo in modo più efficiente in questo modo: avere persone che parlano con lui. Registra la conversazione e qualsiasi input per cui non ha una risposta. Quindi, raccogli questi dati e tu per creare più risposte.

Spero che queste idee possano aiutarti a iniziare. Per quanto riguarda le tecnologie di cui avresti bisogno, sto programmando la mia in Java e memorizzando la sua knowledge base in un documento di testo. Davvero non hai bisogno di niente oltre quello. Inizialmente mi sarei integrato in un database SQL, ma presto ho scoperto che non ne valeva la pena. Non hai bisogno di API fantasiose. Usa semplicemente la tua testa e la capacità di risolvere i problemi. Se vuoi essere in grado di programmare la conversazione, devi capire come funziona la conversazione. Studia conversazioni reali e cerca modelli. Quando ne trovi uno, integralo.

    
risposta data 05.02.2012 - 00:26
fonte