Ho scritto un programma di conversazione automatica...
Moderators: gabrielilardi, forart, Davy Bartoloni
- Davy Bartoloni
- Posts: 1485
- Joined: Wed Jan 04, 2006 11:31 pm
- Location: Cuneo
- Contact:
Ho scritto un programma di conversazione automatica...
volevo diventasse un applicazione standard di Reactos (naturalmente puo' essere istruito in qualsiasi lingua.. anche inventata, o numerica...) ,
fornendo il sorgente naturalmente, ma provando su 3 o 4 macchine non sono riuscito ad avviare nulla...
Uno screen nuovo.. ,
[ external image ]
se cmq qualcuno volesse provare a fare un progetto parallelo, sono a disposizione per qualsiasi cosa.
le uniche cose richieste dal linguaggio di programmazione,
e la possibilita' di gestire ARRAY e PUNTATORI.. altro non serve..
cmq, per chi ne volesse provare una version eun po' piu' vecchia su reactos... ecco il link.. .
http://www.wcn.it/programma di intelligenza artificiale.zip
ha degli spazi, quindi incollatelo nel Browser...
SIID - SImulatore IDee - Programma di IA che sfrutta reti neurali multiple gestite da puntatori e sub-strati , gestite in maniera dinamica.
fornendo il sorgente naturalmente, ma provando su 3 o 4 macchine non sono riuscito ad avviare nulla...
Uno screen nuovo.. ,
[ external image ]
se cmq qualcuno volesse provare a fare un progetto parallelo, sono a disposizione per qualsiasi cosa.
le uniche cose richieste dal linguaggio di programmazione,
e la possibilita' di gestire ARRAY e PUNTATORI.. altro non serve..
cmq, per chi ne volesse provare una version eun po' piu' vecchia su reactos... ecco il link.. .
http://www.wcn.it/programma di intelligenza artificiale.zip
ha degli spazi, quindi incollatelo nel Browser...
SIID - SImulatore IDee - Programma di IA che sfrutta reti neurali multiple gestite da puntatori e sub-strati , gestite in maniera dinamica.
- Davy Bartoloni
- Posts: 1485
- Joined: Wed Jan 04, 2006 11:31 pm
- Location: Cuneo
- Contact:
perfetto, elenco qua'0 di seguito il sistema che ho utilizzato, cosi' saltiamo un po di passaggi di presentazione, e se qualcuno volesse discuterne...
Siid, non e' legato ad una lingua particolare (se lo si volesse istruire con una lingua)
ci si possono buttare dentro informazioni anche puramente tecniche.. numeri, formule.. boh... qualcunque cosa...
per riuscire finalmente a combianare qualcosa,.. e smettere di inseguire strani percorsi tortuosi nei finti-neuroni, ho pensato, di creare per prima cosa un "IDEA".. ovvero, immaginate, una rete neurale piatta , contenente tutte el connessioni...
creando un altipiano, in cui vengono raggruppate le informazioni che servono... .. una volta "viste" queste informazioni, sopra quest'altipiano, vengono cerate delle sub_reti, (dinamiche, !!! quindi, possono cambiare forma durante l'elaborazione)..
ne viene creata una per ogni concetto (ritenuto fondamentale ai termini dell'elebaorazione) ..
quando le reti sono completate, vengono interconnessi i nodi, che hanno piu' similarita'.... creando una struttura tridimensionale... .
dopodiche ' vengono "potate" le parti piu' estreme di questo "CUBO"...
i vari percorsi creati in questa rete 3D, vengono confrontati con la rete piatta iniziale (quella piu' vasta, la pianura + altipiano per intenderci)..
e a questo punto, attraverso, qualche regola (per esempio in SIID, utilizzo qualcosa di simile alla grammatica italiana)... il risultato viene ulteriormente raffinato...
e... alla fine .. combacia con quello previsto....
posto uno screenshot, del giorno in cui ho insegnato le tabelline...
Siid, non e' legato ad una lingua particolare (se lo si volesse istruire con una lingua)
ci si possono buttare dentro informazioni anche puramente tecniche.. numeri, formule.. boh... qualcunque cosa...
per riuscire finalmente a combianare qualcosa,.. e smettere di inseguire strani percorsi tortuosi nei finti-neuroni, ho pensato, di creare per prima cosa un "IDEA".. ovvero, immaginate, una rete neurale piatta , contenente tutte el connessioni...
creando un altipiano, in cui vengono raggruppate le informazioni che servono... .. una volta "viste" queste informazioni, sopra quest'altipiano, vengono cerate delle sub_reti, (dinamiche, !!! quindi, possono cambiare forma durante l'elaborazione)..
ne viene creata una per ogni concetto (ritenuto fondamentale ai termini dell'elebaorazione) ..
quando le reti sono completate, vengono interconnessi i nodi, che hanno piu' similarita'.... creando una struttura tridimensionale... .
dopodiche ' vengono "potate" le parti piu' estreme di questo "CUBO"...
i vari percorsi creati in questa rete 3D, vengono confrontati con la rete piatta iniziale (quella piu' vasta, la pianura + altipiano per intenderci)..
e a questo punto, attraverso, qualche regola (per esempio in SIID, utilizzo qualcosa di simile alla grammatica italiana)... il risultato viene ulteriormente raffinato...
e... alla fine .. combacia con quello previsto....
posto uno screenshot, del giorno in cui ho insegnato le tabelline...
Last edited by Davy Bartoloni on Sat Jul 22, 2006 9:55 am, edited 1 time in total.
- Davy Bartoloni
- Posts: 1485
- Joined: Wed Jan 04, 2006 11:31 pm
- Location: Cuneo
- Contact:
- Davy Bartoloni
- Posts: 1485
- Joined: Wed Jan 04, 2006 11:31 pm
- Location: Cuneo
- Contact:
Sembrerà paradossale ma mi sono registrato a questo forum solo per questo tuo thread
Il "progettino" mi sembra molto affascinante, se mi lasci via messaggio privato la tua email mi piacerebbe parlare con te di questo tuo programma.
Vedo che usi una virgola (,) per fare capire al programma che ti stai riferendo alla "parola chiave" della sua frase... per rendere il tutto più naturale secondo te non sarebbe più carino se il programma riconoscesse automaticamente i vari riferimenti (senza doverli esplicitare con la virgola)?
Il "progettino" mi sembra molto affascinante, se mi lasci via messaggio privato la tua email mi piacerebbe parlare con te di questo tuo programma.
Vedo che usi una virgola (,) per fare capire al programma che ti stai riferendo alla "parola chiave" della sua frase... per rendere il tutto più naturale secondo te non sarebbe più carino se il programma riconoscesse automaticamente i vari riferimenti (senza doverli esplicitare con la virgola)?
Risolto il problema del crash (non copiavo la cartella in C: ).ekerazha wrote:Volevo provare su Windows la versione che hai linkato ma quando avvio il programma, si freeza, comincia ad occupare un casino di memoria (circa 175 MB) e poi dopo qualche minuto va in crash
Ho provato a giocare un po' col programma... secondo me anzichè chiedere troppo spesso all'utente di formulare frasi contenenti le varie parole, dovresti integrare un piccolo parser HTML ed interfacciarlo ad esempio con Google: così quando il programma ha bisogno di "apprendere" lo può fare in modo quasi autonomo... diciamo che Google sarebbe la "vita sociale" del programma (piccolo consiglio... non iniziare a parsare dalle prime voci perchè spesso cotengono solo marchi, nomi di aziende o roba simile... devi cercare di mirare a cose "discorsive"), non so se hai capito
Magari quando si interagisce con lui puoi fare in modo che faccia una ricerca limitata (in modo che non impieghi troppo tempo) e poi a tempo perso puoi mandarlo "a spasso" in modo che cerchi maggiori informazioni sui vari termini... proprio una sorta di emulazione di vita sociale diciamo.
Anzichè Google potresti provare con http://www.demauroparavia.it il dizionario onlineekerazha wrote: Ho provato a giocare un po' col programma... secondo me anzichè chiedere troppo spesso all'utente di formulare frasi contenenti le varie parole, dovresti integrare un piccolo parser HTML ed interfacciarlo ad esempio con Google: così quando il programma ha bisogno di "apprendere" lo può fare in modo quasi autonomo... diciamo che Google sarebbe la "vita sociale" del programma (piccolo consiglio... non iniziare a parsare dalle prime voci perchè spesso cotengono solo marchi, nomi di aziende o roba simile... devi cercare di mirare a cose "discorsive"), non so se hai capito
- Davy Bartoloni
- Posts: 1485
- Joined: Wed Jan 04, 2006 11:31 pm
- Location: Cuneo
- Contact:
Ciao Davy,
ho risposto al tuo thread (
http://www.reactos.org/forum/viewtopic.php?t=2536 ) e ti ho anche
inviato un messaggio privato.
Breve presentazione... mi chiamo Manuel ho 20 anni e sono studente
(anche se lo studente dovrebbe studiare eh eh) di Ing. Informatica.
Programmo da quando avevo 13 anni, me la cavo abbastanza bene con
Pascal/Delphi e C, mastico Assembly e C# e ho qualche base di Java e
Visual Basic.
Oltre alle cose che ti ho già detto nel thread volevo chiederti se i
sorgenti del tuo programma erano liberamente disponibili, perchè sono
molto affascinato dal tuo progetto e mi piacerebbe collaborare solo che
non conosco molto di AI e quindi iniziare un progetto da 0 sarebbe per
me abbastanza difficile. Avendo a disposizione i sorgenti convertirei
probabilmente il programma in linguaggio C# (che poi con Mono gira anche
su Linux, Solaris, Mac etc.), che mi piace molto come linguaggio. Dovrei
però vedere se fosse tecnicamente fattibile una tale conversione:
probabilmente oltre ad una mera conversione proverei ad utilizzare
strutture diverse che mi vengono fornite dal linguaggio di
programmazione... ad esempio invece di puntatori di puntatori di
puntatori etc. si potrebbero avere hash-table di struct contenenti a
loro volta informazioni più altre hash-table, poi l'utilizzo della
programmazione ad oggetti potrebbe dare un po' di "ordine" alla
struttura del codice e probabilmente utilizzarei anche il
multi-threading per rendere il programma più fluido (es. ho visto che
quando "pensa" l'interfaccia si freeza etc. questi ed altri problemi
potrebbero essere risolti attraverso l'utilizzo del multi-threading).
Fammi sapere... ciao
Ciao, ti ho mandato una versione un po piu' recente di SIID per mail..
il fattoi e' che l'interfaccia grafica, non appena il rpogramma funzionera' decentemnte, verra' tolta, il risultato finale e' di certo gestito solo con la voce... la sintesi vocale e' gia' ultimata, per il riconoscimento vocale, invece sono, guiai, anche utilizzando programmi in vendita che costano un capitale i risultati sono penosi, il riconsocimento con microfoni ambientali e' una catastrofe!....
in ogni caso le verisoni precedenti di questi programmi, non avevano parser, e neppure intrfaccia grafica, per quanto riguard il linguaggi odi programmazione,
basta che possa utilizzare ARRAy e PUNTATORI (tutti quindi)... il codice, lo sto' preparando ripultio.. , i comandi piu' utilkizzati
sono IF - e FOR... per il resto , sono solo abbellimenti..
ti ringrazio tantissimo, per la tua mail ne sto ricevendo tante in questo periodo, e sto facendo un sacco di passi avanti..
per quanto riguarda , ricompilare siid, diciamo, che sarebbe megli scriverne una nuova versione. ._:) e' molto piu' utile..
Ciao e ' buon lavoro.
ho risposto al tuo thread (
http://www.reactos.org/forum/viewtopic.php?t=2536 ) e ti ho anche
inviato un messaggio privato.
Breve presentazione... mi chiamo Manuel ho 20 anni e sono studente
(anche se lo studente dovrebbe studiare eh eh) di Ing. Informatica.
Programmo da quando avevo 13 anni, me la cavo abbastanza bene con
Pascal/Delphi e C, mastico Assembly e C# e ho qualche base di Java e
Visual Basic.
Oltre alle cose che ti ho già detto nel thread volevo chiederti se i
sorgenti del tuo programma erano liberamente disponibili, perchè sono
molto affascinato dal tuo progetto e mi piacerebbe collaborare solo che
non conosco molto di AI e quindi iniziare un progetto da 0 sarebbe per
me abbastanza difficile. Avendo a disposizione i sorgenti convertirei
probabilmente il programma in linguaggio C# (che poi con Mono gira anche
su Linux, Solaris, Mac etc.), che mi piace molto come linguaggio. Dovrei
però vedere se fosse tecnicamente fattibile una tale conversione:
probabilmente oltre ad una mera conversione proverei ad utilizzare
strutture diverse che mi vengono fornite dal linguaggio di
programmazione... ad esempio invece di puntatori di puntatori di
puntatori etc. si potrebbero avere hash-table di struct contenenti a
loro volta informazioni più altre hash-table, poi l'utilizzo della
programmazione ad oggetti potrebbe dare un po' di "ordine" alla
struttura del codice e probabilmente utilizzarei anche il
multi-threading per rendere il programma più fluido (es. ho visto che
quando "pensa" l'interfaccia si freeza etc. questi ed altri problemi
potrebbero essere risolti attraverso l'utilizzo del multi-threading).
Fammi sapere... ciao
Ciao, ti ho mandato una versione un po piu' recente di SIID per mail..
il fattoi e' che l'interfaccia grafica, non appena il rpogramma funzionera' decentemnte, verra' tolta, il risultato finale e' di certo gestito solo con la voce... la sintesi vocale e' gia' ultimata, per il riconoscimento vocale, invece sono, guiai, anche utilizzando programmi in vendita che costano un capitale i risultati sono penosi, il riconsocimento con microfoni ambientali e' una catastrofe!....
in ogni caso le verisoni precedenti di questi programmi, non avevano parser, e neppure intrfaccia grafica, per quanto riguard il linguaggi odi programmazione,
basta che possa utilizzare ARRAy e PUNTATORI (tutti quindi)... il codice, lo sto' preparando ripultio.. , i comandi piu' utilkizzati
sono IF - e FOR... per il resto , sono solo abbellimenti..
ti ringrazio tantissimo, per la tua mail ne sto ricevendo tante in questo periodo, e sto facendo un sacco di passi avanti..
per quanto riguarda , ricompilare siid, diciamo, che sarebbe megli scriverne una nuova versione. ._:) e' molto piu' utile..
Ciao e ' buon lavoro.
Ma quindi una volta "ripulito il codice" sarà disponibile pubblicamente (il codice)? Per vedere come funziona.Davy Bartoloni wrote:il codice, lo sto' preparando ripultio.. , i comandi piu' utilkizzati
sono IF - e FOR... per il resto , sono solo abbellimenti..
ti ringrazio tantissimo, per la tua mail ne sto ricevendo tante in questo periodo, e sto facendo un sacco di passi avanti..
per quanto riguarda , ricompilare siid, diciamo, che sarebbe megli scriverne una nuova versione. ._:) e' molto piu' utile..
Ciao e ' buon lavoro.
- Davy Bartoloni
- Posts: 1485
- Joined: Wed Jan 04, 2006 11:31 pm
- Location: Cuneo
- Contact:
si, ma e' una follia cmq, partire dalla base di un programma, e' tempo perso... considera che SIID e' di circa 1500 linee... neppure io, ho piu' boglia, di rileggere alcune parti del codice... mi affido ad un quaderno degli appunti... se perdesso quel quaderno, al posto di fare un Upgrade di SIID, lo riscriverei.... (e sicuramente uscirebbe meglio. )
per esempio, una funzione, che ho aggiunto nell'ultimo mese, e' il motore di risoluzione sinonimi, che sembra una mega cazzata, ma ha portato le risposte piu' attendibili a q uasi il doppio.. (rallentando di 4 volte la velocita' del programm purtroppo..)
per esempio, una funzione, che ho aggiunto nell'ultimo mese, e' il motore di risoluzione sinonimi, che sembra una mega cazzata, ma ha portato le risposte piu' attendibili a q uasi il doppio.. (rallentando di 4 volte la velocita' del programm purtroppo..)
Si si ho capito... sarebbe per avere un'idea di come hai gestito determinate cose... ad esempio come fargli apprendere la sintassi del linguaggio naturale in modo che le risposte abbiano senso compiuto.Davy Bartoloni wrote:si, ma e' una follia cmq, partire dalla base di un programma, e' tempo perso... considera che SIID e' di circa 1500 linee... neppure io, ho piu' boglia, di rileggere alcune parti del codice... mi affido ad un quaderno degli appunti... se perdesso quel quaderno, al posto di fare un Upgrade di SIID, lo riscriverei.... (e sicuramente uscirebbe meglio. )
per esempio, una funzione, che ho aggiunto nell'ultimo mese, e' il motore di risoluzione sinonimi, che sembra una mega cazzata, ma ha portato le risposte piu' attendibili a q uasi il doppio.. (rallentando di 4 volte la velocita' del programm purtroppo..)
- Davy Bartoloni
- Posts: 1485
- Joined: Wed Jan 04, 2006 11:31 pm
- Location: Cuneo
- Contact:
ecco il punto!, e sei il primo che fa questa domanda...( il topic di SIID e' aperto di 5 forum legati alal programmazione)
io, non ho insegnato la grammatica a SIID... e per quello che le cose le puoi scrivere in inglese, turko (???) , albanese o Veneto...
la grammatica, SIID la prende dalle affermazioni fatte dalle persone, quindi riscontri di parole inglese , vuol dire attingere a frasi Inglesi...
con questo sistema, la risposta contiene degli argomenti fondamentali (le risposte) piu' degli argomenti irrilevanti (la particelle, verbi ausiliari, articoli...)
che e' vero che possono far cambiare il senso alla frase, ma e' altrettanto vero, che se uno fa una domanda "mongoletta", tipo il modo di parlare del medio evo... e' giusto che la risposta sia altrettanto "mongoletta"
in ogni caso, la riposta reale del programma (senza grammatica) e' quella scritta in piccolo, e quella attingendo la grammatica e' quella in grande (quella che viene riprodotta dalla sintesi, se attiva)
io, non ho insegnato la grammatica a SIID... e per quello che le cose le puoi scrivere in inglese, turko (???) , albanese o Veneto...
la grammatica, SIID la prende dalle affermazioni fatte dalle persone, quindi riscontri di parole inglese , vuol dire attingere a frasi Inglesi...
con questo sistema, la risposta contiene degli argomenti fondamentali (le risposte) piu' degli argomenti irrilevanti (la particelle, verbi ausiliari, articoli...)
che e' vero che possono far cambiare il senso alla frase, ma e' altrettanto vero, che se uno fa una domanda "mongoletta", tipo il modo di parlare del medio evo... e' giusto che la risposta sia altrettanto "mongoletta"
in ogni caso, la riposta reale del programma (senza grammatica) e' quella scritta in piccolo, e quella attingendo la grammatica e' quella in grande (quella che viene riprodotta dalla sintesi, se attiva)
Ma quindi come gestisci il significato delle varie parole?
Mi spiego... se io gli dico:
LA FRAGOLA E' ROSSA
Lui mi dice
DIMMI UNA FRASE CON <FRAGOLA>
io rispondo
OGGI HO MANGIATO UNA FRAGOLA
poi mi chiede
MI PUOI DIRE COSA E' FRAGOLA
io rispondo
, UN FRUTTO
A questo punto può capire (e se si come) che "fragola" era l'oggetto del discorso e non altro? Cioè... se io gli dico "LA FRAGOLA E' ROSSA" lui come fa a sapere che ROSSA è "FRAGOLA" e non "LA" o "E'"? Non so se hai capito...
Mi spiego... se io gli dico:
LA FRAGOLA E' ROSSA
Lui mi dice
DIMMI UNA FRASE CON <FRAGOLA>
io rispondo
OGGI HO MANGIATO UNA FRAGOLA
poi mi chiede
MI PUOI DIRE COSA E' FRAGOLA
io rispondo
, UN FRUTTO
A questo punto può capire (e se si come) che "fragola" era l'oggetto del discorso e non altro? Cioè... se io gli dico "LA FRAGOLA E' ROSSA" lui come fa a sapere che ROSSA è "FRAGOLA" e non "LA" o "E'"? Non so se hai capito...
- Davy Bartoloni
- Posts: 1485
- Joined: Wed Jan 04, 2006 11:31 pm
- Location: Cuneo
- Contact:
Quello e' il compito del "risolutore sinonimi",
questa parte del programma, cerca di identificare le categorie a cui appartengono le parole (senza pero' comprenderne il significato)
le uniche eccezioni, che ho dovuto scrivere a mano (anche se sarebbe cmq possibile farle isnerire dall'utente) sono i VERBI AUSILIARI, che in italiano sono i piu' diversi, dalla lunghezza, e dalle lettere molto variabili.. per questi non ho trovato una soluzione migliore.
per ricevere il sorgente di SIID 0-7-5: siid@3nt.net
per ricevere SIID 0-7-8: siid@3nt.net (non mail di Gmail)
per qualcunque domanda, sulla versioen del 2008 sono a disposizione.
questa parte del programma, cerca di identificare le categorie a cui appartengono le parole (senza pero' comprenderne il significato)
le uniche eccezioni, che ho dovuto scrivere a mano (anche se sarebbe cmq possibile farle isnerire dall'utente) sono i VERBI AUSILIARI, che in italiano sono i piu' diversi, dalla lunghezza, e dalle lettere molto variabili.. per questi non ho trovato una soluzione migliore.
per ricevere il sorgente di SIID 0-7-5: siid@3nt.net
per ricevere SIID 0-7-8: siid@3nt.net (non mail di Gmail)
per qualcunque domanda, sulla versioen del 2008 sono a disposizione.
Who is online
Users browsing this forum: No registered users and 14 guests