sabato 12 gennaio 2008

Costruire macchine pensanti

Questo post è dedicato alla costruzione di macchine intelligenti e alla riproduzione dell'intelligenza umana su un computer.

Quando dico "macchina intelligente", che cosa intendo per intelligente? Intendo dire "intelligente almeno quanto un essere umano". Perché questa precisazione? Perché gli esseri umani non sono gli unici esseri intelligenti: in un certo senso anche una mosca è intelligente; oppure un computer che gioca a scacchi; o quell'aspirapolvere che pulisce il pavimento da sola. L'intelligenza è una proprietà graduale, non è una cosa "tutto-o-niente". Ma io, in questo post, vorrei indagare sull'intelligenza umana, per riprodurla su una macchina. Quindi, d'ora in poi, quando dico 'intelligente' sarà soltanto un'abbreviazione per 'intelligente almeno quanto un essere umano'. Chiusa parentesi.

Definisco una macchina "intelligente" se riesce a capire (almeno) ciò che capiamo noi umani. Cioè se riesce a fare gli stessi ragionamenti che facciamo noi, quando ha la nostra stessa conoscenza del mondo.

Perché ho specificato "quando ha la nostra stessa conoscenza del mondo"? In breve, ogni cosa che noi conosciamo sul mondo è scritta fisicamente in qualche punto del cervello, codificata nei neuroni mediante simboli. Ad esempio, il fatto che gli uccelli in genere possono volare è scritto da qualche parte nel nostro cervello. Il fatto che un vaso che cade può rompersi è scritto da qualche parte nel nostro cervello. Il fatto che un oggetto che si rompe può produrre rumore è scritto da qualche parte nel cervello. Il fatto che mi chiamo Maurizio anche. E così via. Il cervello è pieno di queste informazioni primitive e nessi primitivi, che noi usiamo per ragionare. Quindi, anche la nostra macchina pensante dovrà avere queste informazioni memorizzate da qualche parte (ad esempio nella memoria RAM). È ovvio che la macchina in questione dovrà possedere un database di informazioni sul mondo letteralmente enorme, proprio come il database che abbiamo noi nel nostro cervello; altrimenti essa non riuscirà mai a capire tutto ciò che capiamo noi, e a fare i ragionamenti che facciamo noi. Chiusa parentesi.

Quindi vogliamo costruire una macchina intelligente. A questo punto dovremmo capire meglio che cosa questa macchina debba fare. Procediamo per esempi, partendo dal facile.

Prendiamo queste due semplici frasi:
Se il bambino non beve il latte, fallo dormire.

Se il bambino non beve il latte, fallo bollire.

Ovviamente, la nostra macchina dovrà capire che nel primo caso "fallo" si riferisce al bambino, ma nel secondo si riferisce al latte, non al bambino. Altrimenti, di sicuro la macchina non è intelligente quanto un umano: infatti esiste qualcosa che l'umano capisce e la macchina no, e quindi abbiamo fallito. (in termini tecnici, diciamo che la macchina dovrà risolvere correttamente il pronome "lo".)

Vedremo come costruire una macchina che riesca a capire questa cosa, e molte altre, ma prima vorrei continuare con gli esempi, per farvi capire bene come la macchina intelligente si deve comportare. Prendiamo il discorso:

Giovanni intendeva suicidarsi. Si procurò una corda martedì.

Ovviamente la nostra macchina intelligente dovrà capire che le due frasi sono collegate, e il modo esatto in cui sono collegate: Giovanni voleva impiccarsi, e la corda serviva a questo. Se la macchina non lo capisce, di certo non è intelligente quanto un umano. (Nota: in termini tecnici, diciamo che il computer dovrà trovare le "bridging inference", cioè le inferenze che connettono i due pezzi del discorso).

Continuiamo con gli esempi. Prendiamo in considerazione il discorso:

Ieri sono stato al ristorante. Ho mangiato un piatto buonissimo.

Il computer dovrà capire che non ho mangiato il piatto, ma il cibo che c'era sopra. Altrimenti, sarebbe difficile definirlo intelligente. (nota: in termini tecnici, il computer dovrà "risolvere la metonimia").

Cambiamo frase, e consideriamo

Francesca è aggraziata, ma Giacomo è un elefante.
Qui il computer dovrà capire che per 'elefante' si intende 'goffo'. Altrimenti il nesso di contrasto, testimoniato dalla particella 'ma', non avrebbe senso. (In termini tecnici, diciamo che il computer dovrà "disambiguare il significato lessicale".)

Vedremo tutto questo e molto altro, come ad esempio le barzellette. Prendiamo queste tre freddure:
Giovanni era così grasso che l'ambulanza, per portarlo all'ospedale, dovette fare due viaggi.

Giovanni era così grasso che il suo compleanno cadeva il 12, 13 e 14 del mese.

Giovanni era così grasso che per indossare la sciarpa usava il boomerang.
Se un computer non capisce le barzellette, difficile definirlo intelligente. Il software che costruiremo ne sarà capace.

Curiosamente, le barzellette sono ottime frasi da dare in input al computer, per capire se è intelligente o no. Infatti, per le barzellette, è sempre chiaro se sono state capite o no. Una barzelletta, o la capisci o non la capisci. Invece per altre frasi a volte non è ben chiaro cosa significa "capirle", e quindi non è ben chiaro se il tuo computer l'ha davvero capita o no; se è intelligente o no.

Ci sarà da divertirsi. :)

(continua)
blog comments powered by Disqus