Newsgroup: it.comp.ia
Titolo: Chatbot e rete neurale

Gentilissimi (quasi tutti ;),
in questi giorni c'e' un quesito che mi frulla nel cervellino e ve lo pongo.
Premetto che il mio intervento ha i caratteri della domanda e non della
critica, perche' di bot chattatori non ne so:
N U L L A
e lo riconosco apertamente.
Suppongo che in qualche modo la problematica di "sostenere una conversazione
apparentemente sensata" con un umano si riconduca alla determinazione almeno
vaga del SENSO della affermazione fatta dall'uomo. Oppure, quanto meno,
dell'ARGOMENTO di essa.
A prescindere dalle problematiche di contorno, certo complesse e di cui
assolutamente non so nulla, mi e' parso di capire da molti degli interventi
che il problema venga affrontato o mediante un semplice pattern matching
(che di "intelligente" ha pochino assai...) oppure con algoritmi piu'
complessi (-> quali ? Si prega di rispondere con un certo dettaglio ;).
Alcuni hanno tirato fuori le reti neurali artificiali, e sulla loro
applicabilita' io ho molti dubbi. Premettendo che me ne sono occupato in
relazione a problemi di modellistica e di identificazione numerica piu' che
al problema del parlato, caratteristiche tipiche di trattabilita' per una
ANN includono:
- un numero di ingressi limitato, con un massimo dipendente dalle risorse e
dalle richieste di real-time, ma direi sicuramente inferiore al range delle
"centinaia"
- una doppia problematica di mapping, diretto e inverso, dallo spazio degli
ingressi ai numeri reali, e dall'uscita reale all'insieme delle uscite
Per la mia esperienza (poca) e accademia (troppa ;) il problema del mapping
e' in fondo la vera problematica di costruzione e applicazione della ANN,
che e' in fin dei conti un classificatore algebrico che realizza,
all'interno dell'iperspazio n-dimensionale dei vettori di input a n
parametri, dei sottospazi di dimensione congrua mappati in prossimita' sulle
uscite. Ovviamente quindi la ANN funziona tanto meglio quanto piu' l'uomo
riesce, con il mapping, a far corrispondere "ingressi simili" a punti
n-dimensionalmente "vicini" all'interno dello spazio degli ingressi.
Domanda senza pudore: come stracaspita si fa a creare un mapping reale delle
parole di una frase ? :)
Stefano

Ciao,
quello che dici tu e' vero per le ANN "classiche" ( le feedforward ad 
es. ). Ci sono dei modelli di rete neurale pensate per lavorare su 
sequenze variabili di dati. Le recurrent neural networks ad esempio. In 
questo caso viene usata la stessa rete  per ogni elemento della 
sequenza, solo che l'input per un elemento dipende anche dall'output che 
la rete ha generato per l'elemento precedente. Per addestrare queste 
reti si puo' anche utilizzare la classica backpropagation ( anche se non 
e' l'unico modo ) "aggangiando" piu' copie della sequenza a seconda 
della lunghezza dell'input ( se hai una sequenza di dieci elementi hai 
una rete neurale profonda dieci volte quella di base ).
I problemi principali derivano dal fatto che e' difficile in questo modo 
trovare "legami" tra elementi molto distanti nella sequenza, e che come 
output di solito si ottiene un valore ( inteso come vettore ) o una 
sequenza della stessa lunghezza dell'input. Non che si possa fare 
diversamente, ma i risultati sono molto piu' difficili da ottenere.
Recentemente queste reti sono state estese anche ad input strutturati ( 
Alberi o grafi, solitamente aciclici ) con output ancora consistente in 
un singolo vettore o un grafo isomorfo all'input.
Ci sono anche altre alternative. Ad esempio ( ma non e' certo l'unico ) 
utilizzare LRAAM accoppiate a reti neurali.
marco
p.s.: perdonate le imprecisioni, ho cercato di essere abbastanza sintetico.

Dimenticavo.
Ovviamente questo e' solo uno dei vari modi in cui si puo' fare ( anche 
se personalmente mi sembra uno dei piu' interessanti ).
Inoltre, quando si ha a che fare con dati strutturati ( sequenze ma non 
solo ) a volte ci si limita a 'mappare' i dati di input in un vettore di 
dimensioni finite, scegliendo le caratteristiche piu' importanti. Questo 
risolve alcuni dei problemi di cui sopra, pero' ne aggiunge altri forse 
piu' rilevanti: ad esempio bisogna avere una conoscenza adeguata 
dell'ambito in cui si opera per scegliere le caratteristiche da 
rappresentare nel vettore, altrimenti l'apprendimento non avra' 
successo. Cosi' si ha che molto spesso si prova per tentativi fino a che 
non si trova una rappresentazione adatta. Poi si cambia il contesto in 
cui si lavora e tutto il lavoro e' da cestinare.
Nel caso specifico dei chat-bot l'unica scelta che mi viene in mente ( 
qualcuno piu' esperto potra' integrare ) e' quella di limitarsi a frasi 
di una lunghezza prefissata, adattando le frasi piu' brevi con spazi 
finali( o un altro carattere particolare ).
marco

 utilizzare LRAAM accoppiate a reti neurali.
espandi l'acronimo grazie :)
e magari spiega :)
Comunque il mio punto di fondo rimane. Come si fa a fare un mapping da
dominio delle parole a dominio dei numeri ?
Stefano

 Stefano
Come visto sopra, un modo per far il mapping c'e': una sequenza e' il 
caso particolare in cui ogni nodo ha un solo figlio. In questo modo e' 
possibile rappresentare una parola con un puntatore alla prima lettera.
Ammetto che questa soluzione non e' molto pratica, perlomeno per un 
ampio vocabolario.
So invece che le recurrent network possono essere utilizzate per 
distinguere frasi intere tra grammaticalmente corrette e scorrette, e 
gia' questo e' un buon passo ( una volta che hai una frase corretta 
farne l'analisi in modo tradizionale e' decisamente piu' agevole ).
Marco
p.s. : non sono certo un esperto di linguaggi e NLP : si tratta 
semplicemente di argomenti in cui sono "incappato" nel corso dei miei 
studi sulle recurrent network. Proprio per questo i link sono abbastanza 
teorici e poco pratici: non troverai certo esempi concreti e programmi 
funzionanti

 teorici e poco pratici:
Temo che in gran parte dei casi le applicazioni delle ANN siano molto
teoriche e poco pratiche ;-)
Stefano

 Stefano
Ciao,
Marco