Innovazione per l’inclusione Hack.The.Bias con Amazon SageMaker

Innovazione per l'inclusione Hack.The.Bias con Amazon SageMaker' can be condensed to 'Innovazione Hack.The.Bias con Amazon SageMaker

Questo post è stato scritto in collaborazione con Daniele Chiappalupi, membro del team di Hackathon studentesco AWS presso l’ETH Zürich.

Tutti possono iniziare facilmente con il machine learning (ML) utilizzando Amazon SageMaker JumpStart. In questo post, ti mostriamo come un team di Hackathon universitario ha utilizzato SageMaker JumpStart per costruire rapidamente un’applicazione che aiuta gli utenti a identificare e rimuovere i bias.

“Amazon SageMaker è stato fondamentale nel nostro progetto. Ha reso facile distribuire e gestire un’istanza pre-addestrata di Flan, offrendoci una solida base per la nostra applicazione. La sua funzione di autoscaling si è rivelata cruciale durante i periodi di alto traffico, garantendo che la nostra app rimanesse reattiva e gli utenti ricevessero un’analisi di bias costante e veloce. Inoltre, permettendoci di scaricare il pesante compito di interrogare il modello Flan a un servizio gestito, siamo stati in grado di mantenere leggera e veloce la nostra applicazione, migliorando l’esperienza dell’utente su diversi dispositivi. Le funzionalità di SageMaker ci hanno permesso di massimizzare il nostro tempo all’hackathon, consentendoci di concentrarci sull’ottimizzazione dei nostri suggerimenti e dell’applicazione anziché sulla gestione delle prestazioni del modello e dell’infrastruttura.”

– Daniele Chiappalupi, membro del team di Hackathon studentesco AWS presso l’ETH Zürich.

Panoramica della soluzione

Il tema dell’Hackathon è contribuire agli obiettivi di sviluppo sostenibile delle Nazioni Unite con la tecnologia dell’IA. Come mostrato nella figura seguente, l’applicazione costruita all’Hackathon contribuisce a tre degli obiettivi di sviluppo sostenibile (istruzione di qualità, lotta alla discriminazione di genere e riduzione delle disuguaglianze) aiutando gli utenti a identificare e rimuovere i bias dal loro testo al fine di promuovere un linguaggio equo e inclusivo.

Come mostrato nella seguente schermata, dopo aver fornito il testo, l’applicazione genera una nuova versione priva di bias razziali, etnici e di genere. Inoltre, evidenzia le parti specifiche del testo di input legate a ciascuna categoria di bias.

Nell’architettura mostrata nel diagramma seguente, gli utenti inseriscono il testo nell’app web basata su React, che attiva Amazon API Gateway, che a sua volta invoca una funzione AWS Lambda a seconda del bias nel testo dell’utente. La funzione Lambda richiama il punto di accesso del modello Flan in SageMaker JumpStart, che restituisce il risultato del testo imparziale attraverso la stessa route all’applicazione front-end.

Processo di sviluppo dell’applicazione

Il processo di sviluppo di questa applicazione è stato iterativo e incentrato su due aree principali: l’interfaccia utente e l’integrazione del modello di apprendimento automatico.

Abbiamo scelto React per lo sviluppo front-end per la sua flessibilità, scalabilità e potenti strumenti per la creazione di interfacce utente interattive. Date le caratteristiche della nostra applicazione – elaborazione dell’input utente e presentazione dei risultati raffinati – l’architettura basata su componenti di React si è rivelata ideale. Con React, potevamo costruire efficientemente un’applicazione single-page che consentiva agli utenti di inviare testo e visualizzare i risultati privi di bias senza la necessità di costanti ricaricamenti della pagina.

Il testo inserito dall’utente doveva essere elaborato da un potente modello di linguaggio per analizzare i bias. Abbiamo scelto Flan per la sua robustezza, efficienza e proprietà di scalabilità. Per utilizzare Flan, abbiamo usato SageMaker JumpStart, come mostrato nella seguente schermata. Amazon SageMaker ha reso facile distribuire e gestire un’istanza pre-addestrata di Flan, consentendoci di concentrarci sull’ottimizzazione dei nostri suggerimenti e delle nostre query anziché sulla gestione delle prestazioni del modello e dell’infrastruttura.

Collegare il modello Flan alla nostra applicazione front-end richiedeva un’integrazione robusta e sicura, che è stata realizzata utilizzando Lambda e API Gateway. Con Lambda, abbiamo creato una funzione serverless che comunica direttamente con il nostro modello SageMaker. Abbiamo poi utilizzato API Gateway per creare un endpoint sicuro, scalabile e facilmente accessibile per la nostra app React per invocare la funzione Lambda. Quando un utente inviava il testo, l’app attivava una serie di chiamate API al gateway – prima per identificare se era presente un bias, quindi, se necessario, query aggiuntive per identificare, individuare e neutralizzare il bias. Tutte queste richieste venivano instradate attraverso la funzione Lambda e poi al nostro modello SageMaker.

Il nostro compito finale nel processo di sviluppo è stata la selezione di prompt per interrogare il modello di linguaggio. Qui, il dataset CrowS-Pairs ha svolto un ruolo fondamentale perché ci ha fornito esempi reali di testi tendenziosi, che abbiamo utilizzato per ottimizzare le nostre richieste. Abbiamo selezionato i prompt attraverso un processo iterativo, con l’obiettivo di massimizzare l’accuratezza nella rilevazione di pregiudizi all’interno di questo dataset.

Concludendo il processo, abbiamo osservato un flusso operativo senza soluzione di continuità nell’applicazione finita. Il processo inizia con un utente che invia del testo per l’analisi, che viene quindi inviato tramite una richiesta POST al nostro endpoint API Gateway sicuro. Questo attiva la funzione Lambda, che comunica con l’endpoint di SageMaker. Di conseguenza, il modello Flan riceve una serie di query. La prima verifica la presenza di eventuali pregiudizi nel testo. Se vengono rilevati pregiudizi, vengono effettuate query aggiuntive per individuare, identificare e neutralizzare questi elementi tendenziosi. I risultati vengono quindi restituiti attraverso lo stesso percorso: prima alla funzione Lambda, poi tramite l’API Gateway e infine all’utente. Se era presente qualsiasi pregiudizio nel testo originale, l’utente riceve un’analisi completa che indica i tipi di pregiudizi rilevati, che siano razziali, etnici o di genere. Le sezioni specifiche del testo in cui sono stati trovati questi pregiudizi vengono evidenziate, offrendo agli utenti una visione chiara delle modifiche apportate. Insieme a questa analisi, viene presentata una nuova versione priva di pregiudizi del loro testo, trasformando efficacemente un input potenzialmente tendenzioso in una narrazione più inclusiva.

Nelle sezioni seguenti, dettagliamo i passaggi per implementare questa soluzione.

Configura l’ambiente React

Abbiamo iniziato configurando il nostro ambiente di sviluppo per React. Per avviare rapidamente una nuova applicazione React con una configurazione minima, abbiamo utilizzato create-react-app:

npx create-react-app my-app

Costruisci l’interfaccia utente

Utilizzando React, abbiamo progettato un’interfaccia semplice per consentire agli utenti di inserire del testo, con un pulsante di invio, un pulsante di reset e display sovrapposti per presentare i risultati elaborati quando sono disponibili.

Inizializza il modello Flan su SageMaker

Abbiamo utilizzato SageMaker per creare un’istanza pre-addestrata del modello di linguaggio Flan con un endpoint per l’elaborazione in tempo reale. Il modello può essere utilizzato con qualsiasi payload strutturato in formato JSON come il seguente:

payload = {
text_inputs: "text_inputs",
max_length: <max_length>,
num_return_sequences: <num_return_sequences>,
top_k: <top_k>,
top_p: <top_p>,
do_sample: <do_sample>,
num_beams: <num_beams>,
seed: <seed>,
};

Crea una funzione Lambda

Abbiamo sviluppato una funzione Lambda che interagiva direttamente con il nostro endpoint di SageMaker. La funzione è stata progettata per ricevere una richiesta con il testo dell’utente, inviarlo all’endpoint di SageMaker e restituire i risultati raffinati, come mostrato nel codice seguente (ENDPOINT_NAME è stato impostato come endpoint dell’istanza SageMaker):

import os
import io
import boto3
import json
import csv

# ottieni le variabili d'ambiente
ENDPOINT_NAME = os.environ['ENDPOINT_NAME']
runtime= boto3.client('runtime.sagemaker')

def lambda_handler(event, context):
data = json.loads(json.dumps(event))
payload = json.dumps(data['data']).encode('utf-8')

query_response = runtime.invoke_endpoint(
EndpointName=ENDPOINT_NAME,
ContentType='application/json',
Body=payload)

response_dict = json.loads(query_response['Body'].read())

return response_dict['generated_texts']

Configura API Gateway

Abbiamo configurato una nuova API REST in API Gateway e l’abbiamo collegata alla nostra funzione Lambda. Questa connessione ha consentito alla nostra applicazione React di effettuare richieste HTTP all’API Gateway, che a sua volta ha attivato la funzione Lambda.

Integra l’app React con l’API

Abbiamo aggiornato l’applicazione React per effettuare una richiesta POST all’API Gateway quando viene cliccato il pulsante di invio, con il corpo della richiesta che contiene il testo dell’utente. Il codice JavaScript che abbiamo utilizzato per effettuare la chiamata API è il seguente (REACT_APP_AWS_ENDPOINT corrisponde all’endpoint di API Gateway associato alla chiamata Lambda):

const makeAWSApiCall = (
textInputs,
maxLength,
numReturnSequences,
topK,
topP,
doSample,
numBeams
) => {
const axiosRequestUrl =
`${process.env.REACT_APP_AWS_ENDPOINT}`;
const requestData = {
text_inputs: textInputs,
max_length: maxLength,
num_return_sequences: numReturnSequences,
top_k: topK,
top_p: topP,
do_sample: doSample,
num_beams: numBeams,
seed: 8,
};

return axios.post(axiosRequestUrl, { data: requestData });
};

Ottimizza la selezione dei suggerimenti

Per migliorare l’accuratezza della rilevazione dei pregiudizi, abbiamo testato diversi suggerimenti sul dataset CrowS-Pairs. Attraverso questo processo iterativo, abbiamo scelto i suggerimenti che ci hanno fornito la maggiore accuratezza.

Effettua il deploy e il test dell’app React su Vercel

Dopo aver sviluppato l’applicazione, l’abbiamo deployata su Vercel per renderla accessibile pubblicamente. Abbiamo condotto test approfonditi per assicurarci che l’applicazione funzionasse come previsto, dall’interfaccia utente alle risposte del modello di linguaggio.

Questi passaggi hanno gettato le basi per la creazione della nostra applicazione per l’analisi e la correzione dei testi. Nonostante la complessità intrinseca del processo, l’uso di strumenti come SageMaker, Lambda e API Gateway ha semplificato lo sviluppo, permettendoci di concentrarci sul obiettivo principale del progetto: individuare ed eliminare i pregiudizi nei testi.

Conclusioni

SageMaker JumpStart offre un modo conveniente per esplorare le funzionalità e le capacità di SageMaker. Fornisce soluzioni curate in un solo passaggio, notebook di esempio e modelli pre-addestrati pronti per il deploy. Queste risorse ti consentono di imparare e comprendere rapidamente SageMaker. Inoltre, hai la possibilità di ottimizzare ulteriormente i modelli e deployarli in base alle tue esigenze specifiche. L’accesso a JumpStart è disponibile tramite Amazon SageMaker Studio o tramite l’utilizzo programmato delle API di SageMaker.

In questo post, hai appreso come un team di studenti di Hackathon ha sviluppato una soluzione in breve tempo utilizzando SageMaker JumpStart, il che dimostra il potenziale di AWS e SageMaker JumpStart nel consentire lo sviluppo e il deploy rapido di soluzioni AI sofisticate, anche da parte di piccoli team o individui.

Per saperne di più sull’utilizzo di SageMaker JumpStart, consulta l’istruzione sul fine-tuning per FLAN T5 XL con Amazon SageMaker Jumpstart e le istruzioni sul prompting senza supervisione per il modello di base Flan-T5 in Amazon SageMaker JumpStart.

ETH Analytics Club ha ospitato l’evento ‘ETH Datathon’, un hackathon di intelligenza artificiale/apprendimento automatico che coinvolge più di 150 partecipanti provenienti dall’ETH di Zurigo, dall’Università di Zurigo e dall’EPFL. L’evento include workshop condotti da leader del settore, una sfida di codifica di 24 ore e preziose opportunità di networking con studenti e professionisti del settore. Un grande ringraziamento al team di ETH Hackathon: Daniele Chiappalupi, Athina Nisioti e Francesco Ignazio Re, così come al resto del team organizzativo di AWS: Alice Morano, Demir Catovic, Iana Peix, Jan Oliver Seidenfuss, Lars Nettemann e Markus Winterholer.

I contenuti e le opinioni presenti in questo post sono quelli dell’autore terzo e AWS non è responsabile del contenuto o dell’accuratezza di questo post.