Passa ai contenuti principali

Post

Una IA locale legge Pirandello

Oggi vi porto dietro le quinte di un esperimento affascinante che unisce un grande classico della letteratura italiana all'Intelligenza Artificiale.  Ho chiesto alla mia app desktop che implementa un sistema RAG qualcosa di molto specifico scritto nel romanzo “Il fu Mattia Pascal”. Risultato? Una preziosa lezione pratica su come funzionano i sistemi Retrieval-Augmented Generation e su quanto sia vitale la precisione delle nostre domande, i cosiddetti prompt. Per chi non lo ricordasse, nel romanzo di Pirandello, Mattia Pascal vince una fortuna dopo 12 giorni di roulette a Montecarlo (Capitolo VI). Successivamente, sul treno, fa il conteggio esatto del suo gruzzolo (Capitolo VII). La cifra esatta che ha in tasca è di 81.725 lire e 40 centesimi (spesso arrotondata a circa 82.000 lire nel testo). La citazione precisa dal Capitolo VII è: "...ottantunmila settecento venticinque lire, e quaranta centesimi in tasca." Hi chiesto al mio RAG di trovare questo dato. Alla prima doman...
Post recenti

CN2 e il mistero del drago che sputava fuoco

Può un algoritmo imparare a distinguere un drago da un grifone, una sirena da un vampiro o un golem da un unicorno? Naturalmente queste creature non esistono nel mondo reale, ma proprio per questo costituiscono un ottimo terreno di sperimentazione. Eliminando per un momento problemi concreti come diagnosi mediche, frodi bancarie o guasti industriali, possiamo osservare il funzionamento di un modello di intelligenza artificiale in modo semplice, visivo e divertente. Da questa idea nasce Il Bestiario Artificiale , un esperimento realizzato con Orange Data Mining e il widget CN2 Rule Induction . Un archivio di creature fantastiche Il workflow genera automaticamente un dataset composto da 168 creature , suddivise in sei specie: Drago Grifone Sirena Vampiro Golem Unicorno Ogni creatura viene descritta attraverso caratteristiche osservabili, proprio come avverrebbe in un antico manuale di zoologia fantastica. Gli attributi utilizzati sono: ...

Una storia semplice

C’è un momento preciso, nel lavoro di chi analizza i dati, in cui ci si sente un po’ come il professor Franzò di Sciascia: circondati da una complessità monumentale che, a guardarla bene, nasconde una spiegazione lineare, In questo mio esperimento su Orange Data Mining , l'obiettivo è stato tanto elementare quanto cruciale: dare in pasto a un algoritmo un dataset “sporco” — pieno di variabili fisiche e ambientali come la temperatura della stanza, l'umidità e persino il codice del colore — per vedere se il sistema fosse in grado di isolare l'unica vera legge geometrica sottostante: l'area di un cilindro ( A = 2 π · r · h + 2 π · r² ). Il verdetto del widget Rank è stato spietato e bellissimo. Nel romanzo di Sciascia, si cercano piste intricate, complotti e spiegazioni fumose per quello che è, fondamentalmente, un delitto evidente. Così si viene a creare molto “rumore” investigativo. Nel nostro dataset è successa la stessa cosa, ma al contrario. Gli algoritmi di rank...

VADER o DistilBERT?

In questo esperimento ho utilizzato Orange Data Mining per analizzare il sentimento di alcune recensioni di prodotto. Il problema di partenza era semplice: trasformare una recensione testuale in un giudizio automatico, per esempio positivo, negativo o neutro. Il primo approccio è stato quello con VADER, tramite il widget Sentiment Analysis di Orange. Il flusso era: File → Select Columns → Corpus → Sentiment Analysis → Data Table  VADER affronta il problema in modo lessicale: cerca parole positive e negative nel testo, assegna punteggi e produce un valore finale chiamato compound. Per esempio, parole come: excellent good recommend  spingono il risultato verso il positivo, mentre parole come: terrible defective disappointing  lo spingono verso il negativo. Questo metodo è semplice, veloce e abbastanza trasparente. Il suo limite è che non interpreta davvero il contesto complessivo della frase. Una recensione come: Decent, but the value for money could be better....

Prevedere il futuro con PyTorch

Nel mondo della Data Science si tende spesso a dividere i professionisti in due fazioni: chi scrive righe di codice puro dall'alba al tramonto e chi si affida alla velocità delle piattaforme visuali e No-Code (come Orange Data Mining, KNIME o RapidMiner). Ma cosa succede quando si devono analizzare dati complessi come le serie temporali?  Sbloccare il vero potenziale dei modelli predittivi sequenziali richiede un approccio ibrido. Alcuni widget di default per il Machine Learning nei software visuali faticano a gestire la dipendenza temporale dei dati e mancano di architetture nate per la dimensionalità sequenziale.  Se vuoi implementare reti ricorrenti profonde senza rinunciare alla comodità dell'interfaccia grafica, c'è una soluzione nuova. Quale? Il widget Python Script supportato da un Canvas strategico. Invece di abbandonare l'interfaccia visuale, ho costruito un workflow ibrido in cui lascio a Orange il lavoro noioso di manipolazione temporale e indicizz...

Un esperimento no-code

Orange Data Mining Random Forest batte la rete neurale con Orange Data Mining.  Ho realizzato un semplice esperimento di classificazione supervisionata con Orange Data Mining, utilizzando il classico dataset Iris.  L’obiettivo era riconoscere automaticamente la specie di un fiore a partire da quattro misure: lunghezza e larghezza del sepalo, lunghezza e larghezza del petalo. L’aspetto più interessante è che l’intero esperimento è stato costruito in modalità no-code: nessuna riga di Python, nessuno script, nessuna programmazione manuale.  Il flusso di lavoro è stato creato collegando graficamente i widget di Orange: caricamento dati, preprocessing, modello, valutazione e matrice di confusione. In questo modo anche un’attività tipica del machine learning — addestrare e confrontare modelli predittivi — diventa accessibile attraverso un ambiente visuale. Ho confrontato i seguenti due modelli: Random Forest, un algoritmo di machine learning basato su un insieme di alberi decis...

Un RAG su misura

I sistemi RAG ( Retrieval-Augmented Generation ) sono ormai uno standard: un modello linguistico non risponde più “a memoria”, ma recupera i frammenti di testo più pertinenti da una base documentale e li usa come contesto per generare la risposta.  Sulla carta il meccanismo è lineare: si dividono i documenti in chunk , si calcola la similarità vettoriale e si passa tutto al modello.  Nella pratica, costruirne uno da zero — anziché affidarsi a una libreria preconfezionata — è un esercizio che smonta parecchie certezze. La prima smentita riguarda il retrieval : si tende a pensare che sia solo una questione di vettori, distanze e similitudine del coseno. In realtà, il vero collo di bottiglia è quasi sempre a monte, nella segmentazione del testo.  Un chunk troppo corto perde il filo del discorso; uno troppo lungo diluisce la rilevanza metrica e introduce rumore. In un sistema fatto in casa l'impatto di queste scelte è immediato: se il recupero fallisce, quasi mai...