Sviluppare la propria IA o acquistarne una preconfezionata?


Più elementi devono essere sempre presenti quando si parla di applicazioni di IA:
1. grandi quantità di dati, i cosiddetti Big Data
2. grandi capacità di calcolo, in termini di CPU e RAM
3. programmi per la gestione dei dati

Un sistema di IA 'impara' dai dati per prendere decisioni; la velocità dell'apprendimento dipende dalla potenza computazionale, la qualità dal numero e affidabilità dei dati messi a disposizione.

Big data: quanto big?
A volte si sottovaluta l'importanza dei dati in possesso dell'azienda; si cita spesso il mantra 'data is the new oil' ma a volte non si pone sufficiente attenzione ai dati a disposizione, sottostimando quanto già presente in azienda.
Sicuramente progettando da zero si imposteranno sistemi di generazione di dati utili all'apprendimento; ma se si pone sufficiente attenzione all'analisi dei dati già presenti si possono scoprire utili novità.
In particolare i file di log sono grandi miniere di dati; spesso sono visti quasi con fastidio per la necessità di archivio e immagazzinamento, per la difficoltà di lettura e l'apparente poca utilità; se indagati nel dettaglio possono rivelarsi una buona base per implementare soluzioni IA.
Qualsiasi tipo di log può essere utilizzato; per esempio di fronte ad un sistema di autoregolazione della temperatura ambiente o frigorifera possono essere messi a disposizione migliaia di righe di log che indicano la posizione di un trasduttore, l'intervento di un automatismo, o il consumo energetico; da essi possono essere ricavati sistemi che 'imparano' a gestire le temperature con maggiore efficienza.
Un sistema di timbratura presenza può generare dati utili per ottimizzare la gestione del personale.
Per le aziende che basano la loro attività su server web il file di log degli accessi è una vera miniera di dati grazie ai quali profilare utilmente gli utenti, migliorare l'interfaccia utente, evitare le navigazioni inutili, fare incontrare la domanda e l'offerta; ad esempio si possono utilizzare sistemi simili a quelli utilizzati nell'analisi dei carrelli di e-bay per profilare gli utenti e 'prevedere' al primo accesso il futuro comportamento dell'utente, in modo da gestire interfaccia e scontistica in modo adeguato.
A questo proposito può essere utile seguire il rimando più avanti che descrive approfonditamente la gestione degli utenti su ebay.
Altra fonte importante di dati può essere costituita dal clickstream degli utenti su qualsiasi interfaccia informatica, non solo web; seguire le scelte degli utenti passo passo, analizzarne per grandi quantità e ricavarne tendenze utili all'organizzazione del lavoro può aiutare a costruire interfacce 'intelligenti' che plasticamente si adattano agli utenti ottimizzando il lavoro.
A questo proposito si veda, più avanti, il caso di Zillow, colosso dell'immobiliare statunitense, che ha utilizzato sistemi di IA basati sui clickstream per identificare gli immobili che ogni utente del sito ritiene simili a quelli che sta visualizzando.
In casi come quelli citati si arriva facilmente alle centinaia di migliaia o ai milioni di record che ci consentono di parlare di big data.

Tuttavia non sempre è necessario avere direttamente a disposizione grandi fonti di dati per costruire sistemi IA. Nelle pagine seguenti è riportato un esempio di analisi delle notizie riportate sulle homepage delle testate giornalistiche per eseguire una classificazione automatica per similitudine di argomenti. In questo caso vengono analizzate circa venti homepage; non possiamo certo parlare di Big Data. Il sistema in questo caso funziona perchè a questi dati vengono associati big data esterni, utilizzando cioè database che per ogni termine ne danno la definizione, la posizione grammaticale, il rapporto con gli altri termini; viene utilizzato cioè un lemmario di 500000 righe che ci aiuta nella classificazione dei contenuti dei giornali. Ad esso inoltre possono essere associate altre basi dati lessicali come i grafi dei valori semantici delle parole, che ancora meglio ci aiutano a definire il contesto in cui viene operata la classificazione.

In questo caso quindi i big data non sono direttamente i dati sensibili di cui dispone l'azienda, ma sono quelli che ad essa vengono correlati; si possono cioè associare ai propri dati altre fonti esterne per avere sistemi più precisi.

Ad esempio un'azienda può avere a disposizione moltissimi dati sulla vendita di birra, magari la serie storica degli ultimi dieci anni di vendite. Con opportuni algoritmi di previsione si possono costruire sistemi che prevedano con precisione le vendite nel prossimo periodo, con funzione di ottimizzazione delle scorte o della produzione.
Ma se ai dati iniziali delle vendite vengono associati i paralleli dati meteorologici le previsioni possono diventare molto più accurate: il sistema 'impara' anche dal meteo per effettuare migliori previsioni. Così un calendario delle festività può essere utile per essere più precisi nel dettaglio giornaliero di vendita. Se ci si riferisce ad una realtà locale, la presenza di feste, il traffico turistico, l'andamento dell'economia possono essere alcuni dei dati che dati in pasto al sistema aiutano ad ottenere migliori previsioni.
Quindi non è necessario avere in proprio grandi quantità di dati per costruire il proprio sistema IA, ma è necessario avere a disposizione fonti che ne abbiano; vedremo che la fonte di questi dati 'paralleli' a quelli dell'azienda potrà essere uno dei fattori che ci aiuterà a definire se e come sviluppare un proprio sistema di IA o affidarsi a sistemi esterni.









Capacità di calcolo: quanto grandi?
Le considerazioni in questo paragrafo sono diretta conseguenza di quello precedente.
A volte è sufficiente la capacità di calcolo di un piccolo laptop per fare funzionare il proprio sistema IA; altre volte si deve ricorrere a capacità di calcolo praticamente impossibili da ottenere in proprio.
Vediamo alcune delle variabili da tenere in considerazione.

La grandezza dei dati, in byte, già ci fa capire a quali tipi di soluzioni hardware possiamo rivolgerci; la capacità di trattare dati da parte degli algoritmi di IA è simile a quella di altre applicazioni informatiche, non esiste quindi una particolarità per i sistemi IA.

Il tipo di dati; trattare file di testo risulta abbastanza semplice, mentre se si devono analizzare immagini o video è necessario avere a disposizione potenze computazionali superiori.

Quali software utilizzare?
A questo punto, supposto di avere a disposizione tutti i dati e la capacità computazionale sufficiente, si deve pensare a quale architettura software affidarsi e di quali competenze si necessita.

Il sistema IA può essere visto come una black box dove in input ci sono i big data ed in output le decisioni prese. Questa black box può essere autonoma o necessitare di collegamenti esterni.

Nel caso di una black box autonoma abbiamo installato su una macchina un software che consente il funzionamento degli algoritmi sui dati in ingresso e produce un output sotto forma di file o di collegamento API.
Il programma che effettua questa implementazione degli algoritmi è installato in locale; esistono molte versioni client (Knime, tensorFlow, etc), spesso disponibili sotto forma open source, che utilizzano la CPU o la GPU locale per avere quella potenza di calcolo necessaria a trattare i dati; tutto quindi si conclude all'interno della macchina stessa.

A volte queste black box possono richiedere collegamenti esterni; non possono cioè funzionare in modo autonomo ma 'chiedono aiuto', tramite API, a sistemi esterni essenzialmente per due motivi:
1. non hanno sufficiente potenza di calcolo per ottenere in tempi brevi le risposte necessarie; ad esempio si deve decidere durante la navigazione dell'utente come fornirgli risposte IA in poche frazioni di secondo; oppure i dati sono così 'big' che la potenza installata in locale risulta insufficiente
2. non hanno i dati necessari per l'elaborazione. Ad esempio il riconoscimento automatico degli oggetti in un'immagine richiede amplissime basi dati di milioni di immagini aggiornate che non possono essere presenti in locale

Al di là delle black box possono essere utilizzati sistemi totalmente esterni; in questo caso l'azienda fornisce a terzi tutti i dati sensibili che vengono elaborati fornendo le risposte. In questo modo si comportano i sistemi di Google, Amazon, Microsoft; si acquistano servizi che svolgono il compito di importare i dati, affiancare eventualmente altre basi dati, effettuare l'elaborazione e restituire un risultato.
Ad esempio fornendo al sistema una immagine si ottiene una risposta che elenca gli oggetti contenuti o i sentimenti espressi dal viso ritratto.
la struttura dei software di intelligenza artificiale
Possiamo vedere qualsiasi sistema software che tratta di intelligenza artificiale come composto a livelli.

Al primo livello ci sono gli algoritmi, cioè i metodi con i quali i dati vengono tarttati. abbiamo già visto che questi algoritmi possono essere raggruppati in tre contenitori: clusterizzazione, regressione, classificazione.
Questi algoritmi sono di pubblico dominio, rintracciabili tanto su wikipedia che su pubblicazioni universitarie; alcuni risalgono ai secoli scorsi (ad esempio le catene di Markov), altri sono stati 'inventati' da pochi anni (ad esempio i word embeddings).
A seconda dell apiattaforma software utilizzata possono essere implementati diversi tipi di algoritmi.

Al secondo livello possiamo porre la modalità tecnica di implementazione degli algoritmi; ad esempio possono essere utilizzati linguaggi come Java o Python per rendere attivi gli algoritmi, inserendo i dati in ingresso ed ottenendo i dati in uscita.

Queste implementazioni possono essere presentate sotto forma di programmi utilizzabili via riga di comando oppure possono presentare un ulteriore livello di interfaccia grafica che ne consente l'utilizzo anche a personale non specializzato, facilitandone l'utilizzo.

Ad un quarto livello distinguiamo ancora quei programmi funzionanti come applicazioni stand alone dai programmi server che ne consentono l'interrogazione da remoto via API.

Ad esempio la piattaforma Knime:
1. utilizza algoritmi descritti in rete (es.: clusterizzazione K-Means)
2. l'implementazione tecnica di funzionamento è affidata al linguaggio Java
3. un'interfaccia grafica, utilizzante Eclipse, ne rende disponibile l'interfaccia grafica di programmazione e caratterizza l'implementazione stand alone desktop; (Knime Analytics platform)
4. Una versione server ne consente il funzionamento remoto e l'interrogazione tramite API.

Quindi? Sviluppo interno o esterno?
La prima delle risposte da dare è che innanzitutto serve uno sviluppo delle competenze interne all'azienda. L'IA presenta tante e tali sfaccettature per cui non è possibile affidarsi in toto a sistemi esterni.

Con queste competenze vanno valutati i dati a disposizione, quelli da utilizzare eventualmente in affiancamento, la capacità computazionale necessaria, i tempi di funzionamento richiesti.

Un suggerimento può essere quello di sviluppare comunque se possibile un sistema interno prototipale per acquisire competenze e valutarne il funzionamento in modo da poter utilizzare i metodi applicati su larga scala acquisendo risorse IA dall'esterno.

Ci sono alcune applicazioni che possono solo essere basate su sistemi esterni, in quanto la mole di dati necessari non è reperibile internamente o perché gli algoritmi utilizzati sono implementati in modo proprietario; in tal caso ci si rivolge ai grandi fornitori di sistemi di IA, verso i quali è comunque indispensabile presentarsi con una preparazione tecnica sufficiente ad un dialogo proficuo per ottenere i servizi necessari.

Ritornando alla suddivisione a livelli del paragrafo precedente, si deve tener conto che le 'forniture' di intelligenza artificiale possono riguardare sia i singoli algoritmi che l'implementazione degli stessi per ottenere una soluzione che a sua volta può essere modulata in più livelli; si tratta di soluzioni completamente diverse.

Per portare un esempio su un algoritmo citato utilizziamo K-means: è un algoritmo che, in base ai dati in ingresso, raggruppa in un certo numero (K) di cluster o raggruppamenti i dati in ingresso; può ad esempio essere utilizzato per profilare gli utenti di un sito e definirne le caratteristiche in funzione del comportamento o della propensione agli acquisti.
• Nel primo caso, viene esposto tramite API l'algoritmo stesso, gli si forniscono i dati e lui esegue un raggruppamento; ma la decisione su quali e quanti dati fornire e soprattutto il valore di K deve essere presa da chi utilizza l'algoritmo, cioè deve essere la conoscenza interna all'azienda a definire quali siano questi valori; il sistema AI fornisce semplicemente l'algoritmo di base e la potenza computazionale.
• Nel secondo caso invece il sistema AI offre la soluzione, cioè la clusterizzazione degli utenti in base al loro comportamento. Ovviamente questa soluzione necessita di un dialogo preparatorio tra l'azienda ed il fornitore di IA, è quindi sempre necessaria una conoscenza di base da parte dell'azienda per una implementazione proficua.

Ad un livello ancora più alto si possono porre implementazioni chiavi-in-mano che non necessitano delle conoscenze aziendali ma vengono fornite in modo completamente autonomo;
• in questo caso il fornitore consegna direttamente il risultato della clusterizzazione preoccupandosi di procurarsi i dati necessari,
• oppure l'implementazione di un motore semantico basato sull'intelligenza artificiale in un sito web potrebbe risolversi semplicemente nell'inserimento di uno script nelle pagine del sito demandando al fornitore di sistema tutte le complessità, gli algoritmi da implementare, i metodi tecnici ed avendo direttamente a disposizione il risultato.