Come addestrare un chatbot


10

Volevo iniziare a sperimentare con la rete neurale e come problema giocattolo volevo addestrarne uno a chattare, cioè implementare un bot di chat come Cleverbot. Non così intelligente comunque.

Ho cercato un po 'di documentazione e ho trovato molti tutorial su attività generali, ma pochi su questo argomento specifico. Quello che ho trovato ha appena esposto i risultati senza fornire approfondimenti sull'implementazione. Quelli che l'hanno fatto, lo hanno fatto piuttosto superficialmente (la pagina della documentazione di tensorflow su seq2seq manca di imho).

Ora, sento di aver compreso il principio più o meno, ma non sono sicuro e non sono nemmeno sicuro di come iniziare. Spiegherò quindi come affronterei il problema e vorrei un feedback su questa soluzione, che mi dicesse dove mi sbaglio e possibilmente abbia un collegamento a spiegazioni dettagliate e conoscenze pratiche sul processo.

  1. Il set di dati che userò per l'attività è il dump di tutta la mia cronologia chat di Facebook e WhatsApp. Non so quanto sarà grande, ma forse non ancora abbastanza grande. La lingua di destinazione non è l'inglese, quindi non so dove raccogliere rapidamente esempi di conversazione significativi.

  2. Genererò un vettore di pensiero per ogni frase. Ancora non so come effettivamente; Ho trovato un buon esempio di word2vec sul sito Web deeplearning4j, ma nessuno per le frasi. Ho capito come sono costruiti i vettori di parole e perché, ma non sono riuscito a trovare una spiegazione esauriente per i vettori di frasi.

  3. Usando i vettori di pensiero come input e output ho intenzione di addestrare la rete neurale. Non so quanti strati dovrebbe avere e quali debbano essere i livelli lstm.

  4. Quindi dovrebbe esserci un'altra rete neurale in grado di trasformare un vettore di pensiero in una sequenza di caratteri che compongono una frase. Ho letto che dovrei usare il padding per compensare diverse lunghezze di frase, ma mi manca il modo in cui codificare i caratteri (bastano i punti di codice?).

Risposte:


7

Consiglio di iniziare leggendo questo post sul blog . Probabilmente è possibile cannibalizzare il codice per creare un RNN che accetta un'istruzione di un dialogo e quindi procede all'output della risposta a tale istruzione.

Sarebbe la versione facile del tuo progetto, il tutto senza vettori di parole e vettori di pensiero. Stai solo introducendo personaggi, quindi i refusi non devono preoccuparti.

Il prossimo passo più complesso sarebbe quello di inserire i vettori di parole anziché i caratteri. Ciò ti consentirebbe di generalizzare a parole che non fanno parte dei tuoi dati di allenamento. Ed è probabilmente ancora solo una piccola modifica del codice.

Se insisti nell'utilizzare i vettori di pensiero, dovresti iniziare a leggere sulla traduzione di NN . E probabilmente prova a ottenere una rete di encoder pre-addestrata. O pre-addestralo tu stesso su un corpus di traduzione di grandi dimensioni per la tua lingua.

Con il tuo piccolo set di allenamento il meglio che puoi fare è probabilmente massicciamente in forma fino a quando il tuo sistema non ricrea i dati di allenamento alla lettera. L'uso dei vettori di parole consentirà al tuo sistema di dare la stessa risposta a "Ho battuto il gatto oggi". mentre dai dati di addestramento a "Ho dato un calcio al cane ieri".

Non sono sicuro che i vettori faranno la differenza. Se ottieni il decoder per imparare a tutti.


Ho già letto il primo articolo qualche tempo fa e sento che i personaggi non sono il giusto livello di astrazione. Non pensavo di andare con i vettori di parole uno alla volta, ma immagino che sia anche un modo interessante e meno complesso. Leggerò il documento, che è probabilmente quello che stavo cercando ...
Totem

Ho trovato un core bot da usare ... Ma sono bloccato sulla generazione del testo. ai.stackexchange.com/questions/5963/… Quello che mi chiedo è nonostante i vettori e il tasso di apprendimento, non funziona ancora come dovrebbe ... Sono preoccupato che questo potrebbe essere un difetto della Biblioteca che sono utilizzo, ma non credo che potrebbe essere possibile per una dimensione del layer di 300 ... O la quantità di training richiesta è correlata alla dimensione del layer? Qualsiasi aiuto sarebbe apprezzato. Si prega di notare la libreria in uso.
FreezePhoenix,

0

Secondo il tuo concetto di progetto, per cominciare, ti chiederei di applicare alcune tecniche di sviluppo guidate dai test. Innanzitutto, prova a creare un database di dimensioni inferiori che puoi utilizzare per gestire una piccola quantità di set di dati, che può dare il miglioramento desiderato.

Detto questo, usa quel database per creare un albero organizzato in linea con i tuoi dati, come nodi, quindi se un bot inizia a generare un feedback, dal database, contrassegnato con punti di dati dal tuo set di dati specificato. al nodo successivo nella struttura.

nota : per cominciare, non utilizzare la cronologia della chat di grandi dimensioni nel suo insieme, perché questa è una semplice attività..ie. troppi input == Overfitting.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.