Strumenti di IA 101

Guida Completa per Principianti agli Strumenti LLM di Hugging Face

mm
Aggiungi Unite.AI alle tue fonti preferite su Google
HUGGING FACE - COMPLETE GUIDE

Hugging Face ÃĻ un laboratorio di ricerca e un hub che ha creato una comunità di studiosi, ricercatori e appassionati. In un breve periodo di tempo, Hugging Face ha ottenuto una presenza sostanziale nello spazio dell’intelligenza artificiale. I giganti della tecnologia, tra cui Google (GOOGL ), Amazon (AMZN ) e Nvidia (NVDA ), hanno sostenuto l’azienda di intelligenza artificiale Hugging Face con investimenti significativi, portando la sua valutazione a 4,5 miliardi di dollari.

In questa guida, introdurremo i transformer, gli LLM e il ruolo importante che la libreria Hugging Face svolge nel favorire una comunità di intelligenza artificiale open-source. Esploreremo anche le caratteristiche essenziali di Hugging Face, tra cui pipeline, dataset, modelli e molto altro, con esempi pratici in Python.

Transformer nell’NLP

Nel 2017, la Cornell University ha pubblicato un articolo influente che ha introdotto i transformer. Si tratta di modelli di apprendimento profondo utilizzati nell’NLP. Questa scoperta ha alimentato lo sviluppo di grandi modelli linguistici come ChatGPT.

I grandi modelli linguistici o LLM sono sistemi di intelligenza artificiale che utilizzano i transformer per comprendere e creare testi simili a quelli umani. Tuttavia, la creazione di questi modelli ÃĻ costosa, spesso richiedendo milioni di dollari, il che limita la loro accessibilità alle grandi aziende.

Hugging Face, fondata nel 2016, mira a rendere i modelli NLP accessibili a tutti. Nonostante sia un’azienda commerciale, offre una gamma di risorse open-source che aiutano le persone e le organizzazioni a costruire e utilizzare modelli di transformer in modo economico. L’apprendimento automatico consiste nell’insegnare ai computer a eseguire compiti riconoscendo modelli, mentre l’apprendimento profondo, un subset dell’apprendimento automatico, crea una rete che apprende in modo indipendente. I transformer sono un tipo di architettura di apprendimento profondo che utilizza efficacemente e flessibilmente i dati di input, rendendoli una scelta popolare per la costruzione di grandi modelli linguistici a causa dei minori requisiti di tempo di addestramento.

Come Hugging facilita i progetti NLP e LLM

Ecosistema Hugging Face - Modelli, dataset, metriche, transformer, accelerate, tokenizers

Hugging Face ha semplificato il lavoro con gli LLM offrendo:

  1. Una gamma di modelli pre-addestrati da cui scegliere.
  2. Strumenti ed esempi per adattare questi modelli alle tue esigenze specifiche.
  3. Opzioni di distribuzione facili per vari ambienti.

Una grande risorsa disponibile attraverso Hugging Face ÃĻ la Open LLM Leaderboard. Funziona come una piattaforma comprensiva che monitora, classifica e valuta l’efficienza di una gamma di grandi modelli linguistici (LLM) e chatbot, fornendo un’analisi approfondita dei progressi nel dominio open-source

LLM Benchmarks misura i modelli attraverso quattro metriche:

  • AI2 Reasoning Challenge (25-shot) — una serie di domande attorno al programma di scienze elementari.
  • HellaSwag (10-shot) — un test di inferenza del senso comune che, sebbene semplice per gli esseri umani, rappresenta una sfida significativa per i modelli all’avanguardia.
  • MMLU (5-shot) — una valutazione multifacetta che tocca la competenza di un modello di testo in 57 domini diversi, che comprendono matematica di base, legge e scienza informatica, tra gli altri.
  • TruthfulQA (0-shot) — uno strumento per determinare la tendenza di un modello a ripetere informazioni false frequentemente incontrate online.

Le metriche, descritte con termini come “25-shot”, “10-shot”, “5-shot” e “0-shot”, indicano il numero di esempi di prompt che un modello riceve durante il processo di valutazione per misurare le sue prestazioni e capacità di ragionamento in vari domini. Nei paradigmi “few-shot”, i modelli ricevono un numero limitato di esempi per guidare le loro risposte, mentre in un ambiente “0-shot”, i modelli non ricevono esempi e devono affidarsi esclusivamente alle loro conoscenze preesistenti per rispondere in modo appropriato.

Componenti di Hugging

Pipeline

Le ‘pipeline’ fanno parte della libreria dei transformer di Hugging Face, una funzionalità che aiuta nell’utilizzo facile dei modelli pre-addestrati disponibili nel repository di Hugging Face. Fornisce un’API intuitiva per una serie di attività, tra cui analisi dei sentimenti, risposta alle domande, modellazione linguistica mascherata, riconoscimento di entità nominate e riassunto.

Le pipeline integrano tre componenti centrali di Hugging Face:

  1. Tokenizer: prepara il tuo testo per il modello convertendolo in un formato che il modello puÃē comprendere.
  2. Model: questo ÃĻ il cuore della pipeline dove vengono effettuate le previsioni reali in base all’input pre-elaborato.
  3. Post-elaboratore: trasforma le previsioni grezze del modello in una forma leggibile dall’uomo.

Queste pipeline non solo riducono la quantità di codice estensivo, ma offrono anche un’interfaccia utente-friendly per eseguire vari compiti NLP.

Applicazioni dei Transformer con la libreria Hugging

Un punto di forza della libreria Hugging Face ÃĻ la libreria Transformer, che semplifica i compiti NLP collegando un modello con le fasi di pre-elaborazione e post-elaborazione necessarie, razionalizzando il processo di analisi. Per installare e importare la libreria, utilizzare i seguenti comandi:

pip install -q transformers
from transformers import pipeline

Dopo aver fatto ciÃē, ÃĻ possibile eseguire compiti NLP iniziando con l’analisi dei sentimenti, che categorizza il testo in sentimenti positivi o negativi. La funzione pipeline() della libreria serve come un hub che comprende altre pipeline e facilita applicazioni specifiche dei compiti in domini audio, visione e multimodali.

Applicazioni pratiche

Classificazione del testo

La classificazione del testo diventa un gioco da ragazzi con la funzione pipeline() di Hugging Face. Ecco come si puÃē iniziare una pipeline di classificazione del testo:

classifier = pipeline("text-classification")

Per un’esperienza pratica, alimentare una stringa o una lista di stringhe nella pipeline per ottenere previsioni, che possono essere visualizzate in modo pulito utilizzando la libreria Pandas di Python. Di seguito ÃĻ riportato uno snippet Python che dimostra questo:

sentences = ["Sono entusiasta di presentarti il meraviglioso mondo dell'AI.",
"Si spera che non ti deluderà."]

<p># Ottieni i risultati di classificazione per ogni frase nella lista
results = classifier(sentences)</p>

<p># Scorri ogni risultato e stampa l'etichetta e il punteggio
for i, result in enumerate(results):
print(f"Risultato {i + 1}:")
print(f" Etichetta: {result['label']}")
print(f" Punteggio: {round(result['score'], 3)}\n")

Output

Risultato 1:
Etichetta: POSITIVO
Punteggio: 1.0

Risultato 2:
Etichetta: POSITIVO
Punteggio: 0.996

Riconoscimento di entità nominate (NER)

Il NER ÃĻ cruciale nell’estrazione di oggetti del mondo reale denominati “entità nominate” dal testo. Utilizzare la pipeline NER per identificare queste entità in modo efficace:

ner_tagger = pipeline("ner", aggregation_strategy="simple")
text = "Elon Musk ÃĻ il CEO di SpaceX."
outputs = ner_tagger(text)
print(outputs)

Output

 Elon Musk: PER, SpaceX: ORG 

Risposta alle domande

La risposta alle domande comporta l’estrazione di risposte precise a domande specifiche da un contesto dato. Inizializzare una pipeline di risposta alle domande e immettere la domanda e il contesto per ottenere la risposta desiderata:

reader = pipeline("question-answering")
text = "Hugging Face ÃĻ un'azienda che crea strumenti per l'NLP. Ha sede a New York e fu fondata nel 2016."
question = "Dove ha sede Hugging Face?"
outputs = reader(question=question, context=text)
print(outputs)

Output

 { 'score': 0.998, 'start': 51, 'end': 60, 'answer': 'New York' } 

Hugging Face offre una gamma di pipeline pre-costruite per vari compiti, oltre alla classificazione del testo, al NER e alla risposta alle domande. Di seguito sono riportati i dettagli su un subset di compiti disponibili:

Tabella: Compiti della pipeline Hugging Face

Compito Descrizione Identificatore della pipeline
Generazione di testo Genera testo in base a un prompt dato pipeline(task=”text-generation”)
Riassunto Riassume un testo o documento lungo pipeline(task=”summarization”)
Classificazione delle immagini Etichetta un’immagine di input pipeline(task=”image-classification”)
Classificazione audio Categorizza i dati audio pipeline(task=”audio-classification”)
Risposta alle domande visive Risponde a una domanda utilizzando un’immagine e una domanda pipeline(task=”vqa”)

 

Per descrizioni dettagliate e altri compiti, fare riferimento alla documentazione della pipeline sul sito web di Hugging Face.

PerchÃĐ Hugging sta spostando la sua attenzione su Rust

Hugging face Safetensors e tokenizer Rust

Pagina GitHub di Hugging face Safetensors e tokenizer

L’ecosistema Hugging Face (HF) ha iniziato a utilizzare Rust nelle sue librerie, come safesensors e tokenizers.

Hugging Face ha recentemente rilasciato anche un nuovo framework di apprendimento automatico chiamato Candle. A differenza dei framework tradizionali che utilizzano Python, Candle ÃĻ costruito con Rust. L’obiettivo dietro l’utilizzo di Rust ÃĻ migliorare le prestazioni e semplificare l’esperienza utente, supportando le operazioni GPU.

L’obiettivo principale di Candle ÃĻ facilitare l’inferenza senza server, rendendo possibile la creazione di binari leggeri e rimuovendo Python dai carichi di lavoro di produzione, che possono a volte rallentare i processi a causa dei suoi overhead. Questo framework ÃĻ una soluzione per superare i problemi incontrati con i framework di apprendimento automatico completi come PyTorch, che sono grandi e lenti quando si creano istanze in un cluster.

Vediamo perchÃĐ Rust sta diventando una scelta preferita molto piÃđ di Python.

  1. Velocità e prestazioni – Rust ÃĻ noto per la sua incredibile velocità, superando Python, che viene tradizionalmente utilizzato nei framework di apprendimento automatico. Le prestazioni di Python possono a volte essere rallentate a causa del suo Global Interpreter Lock (GIL), ma Rust non affronta questo problema, promettendo un’esecuzione piÃđ rapida dei compiti e, di conseguenza, prestazioni migliorate nei progetti in cui viene implementato.
  2. Sicurezza – Rust fornisce garanzie di sicurezza della memoria senza un garbage collector, un aspetto essenziale per garantire la sicurezza dei sistemi concorrenti. CiÃē gioca un ruolo cruciale in aree come safetensors, dove la sicurezza nella gestione delle strutture dei dati ÃĻ una priorità.

Safetensors

Safetensors trae vantaggio dalle caratteristiche di velocità e sicurezza di Rust. Safetensors coinvolge la manipolazione di tensori, un’entità matematica complessa, e avere Rust garantisce che le operazioni non siano solo veloci, ma anche sicure, evitando bug comuni e problemi di sicurezza che potrebbero derivare da una gestione errata della memoria.

Tokenizer

Tokenizers gestiscono la divisione di frasi o espressioni in unità piÃđ piccole, come parole o termini. Rust aiuta in questo processo accelerando il tempo di esecuzione, garantendo che il processo di tokenizzazione non sia solo preciso, ma anche rapido, migliorando l’efficienza dei compiti di elaborazione del linguaggio naturale.

Al cuore del tokenizer di Hugging Face c’ÃĻ il concetto di tokenizzazione a livello di sottoparola, che trova un equilibrio delicato tra la tokenizzazione a livello di parola e quella a livello di carattere per ottimizzare la conservazione delle informazioni e la dimensione del vocabolario. Funziona attraverso la creazione di sottotoken, come “##ing” e “##ed”, conservando la ricchezza semantica mentre evita un vocabolario gonfiato.

La tokenizzazione a livello di sottoparola coinvolge una fase di addestramento per identificare il miglior equilibrio tra la tokenizzazione a livello di carattere e quella a livello di parola. Va oltre le semplici regole di prefisso e suffisso, richiedendo un’analisi approfondita dei modelli linguistici in ampi corpora di testo per progettare un tokenizer a livello di sottoparola efficiente. Il tokenizer generato ÃĻ in grado di gestire parole nuove rompendole in sottoparole conosciute, mantenendo un alto livello di comprensione semantica.

Componenti della tokenizzazione

La libreria tokenizers divide il processo di tokenizzazione in diversi passaggi, ognuno affrontando un aspetto diverso della tokenizzazione. Esploriamo questi componenti:

  • Normalizzatore: applica trasformazioni iniziali alla stringa di input, applicando gli aggiustamenti necessari come la conversione in minuscolo, la normalizzazione Unicode e lo stripping.
  • Pre-tokenizer: responsabile della frammentazione della stringa di input in pre-segmenti, determinando le divisioni in base a regole predefinite, come le delimitazioni degli spazi.
  • Modello: sovrintende alla scoperta e alla creazione di sottotoken, adattandosi alle specifiche dei tuoi dati di input e offrendo capacità di addestramento.
  • Post-elaboratore: migliora le caratteristiche di costruzione per facilitare la compatibilità con molti modelli basati su transformer, come BERT, aggiungendo token come [CLS] e [SEP].

Per iniziare con i tokenizers di Hugging Face, installare la libreria utilizzando il comando pip install tokenizers e importarla nel tuo ambiente Python. La libreria puÃē tokenizzare grandi quantità di testo in poco tempo, risparmiando cosÃŽ risorse computazionali preziose per compiti piÃđ intensivi come l’addestramento dei modelli.

La libreria tokenizers utilizza Rust, che eredita la somiglianza sintattica di C++ introducendo nuovi concetti nel design del linguaggio di programmazione. Abbinato a binding Python, assicura di poter godere delle prestazioni di un linguaggio di livello inferiore mentre si lavora in un ambiente Python.

Dataset

I dataset sono la base dei progetti di intelligenza artificiale. Hugging Face offre una vasta gamma di dataset, adatti a una varietà di compiti NLP e altro. Per utilizzarli in modo efficiente, ÃĻ essenziale comprendere il processo di caricamento e analisi. Di seguito ÃĻ riportato uno script Python ben commentato che dimostra come esplorare i dataset disponibili su Hugging Face:

from datasets import load_dataset
# Carica un dataset
dataset = load_dataset('squad')
# Visualizza la prima voce
print(dataset[0])

Questo script utilizza la funzione load_dataset per caricare il dataset SQuAD, una scelta popolare per i compiti di risposta alle domande.

Sfruttare i modelli pre-addestrati e unire tutto

I modelli pre-addestrati costituiscono la spina dorsale di molti progetti di apprendimento profondo, consentendo ai ricercatori e agli sviluppatori di avviare i loro progetti senza partire da zero. Hugging Face facilita l’esplorazione di una gamma diversificata di modelli pre-addestrati, come mostrato nel codice seguente:

from transformers import AutoModelForQuestionAnswering, AutoTokenizer

<p># Carica il modello e il tokenizer pre-addestrati
model = AutoModelForQuestionAnswering.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')
tokenizer = AutoTokenizer.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')</p>

<p># Visualizza l'architettura del modello
print(model)</p>

Con il modello e il tokenizer caricati, possiamo ora procedere a creare una funzione che prenda un testo e una domanda come input e restituisca la risposta estratta dal testo. Utilizzeremo il tokenizer per elaborare il testo e la domanda di input in un formato compatibile con il modello, e poi alimentare questo input elaborato nel modello per ottenere la risposta:


<p>def get_answer(text, question):
# Tokenizza il testo e la domanda di input
inputs = tokenizer(question, text, return_tensors='pt', max_length=512, truncation=True)
outputs = model(**inputs)</p>

<p># Ottieni i punteggi di inizio e fine per la risposta
answer_start = torch.argmax(outputs.start_logits)
answer_end = torch.argmax(outputs.end_logits) + 1</p>

<p>answer = tokenizer.convert_tokens_to_string(tokenizer.convert_ids_to_tokens(inputs['input_ids'][0][answer_start:answer_end]))
return answer</p>

Nell’esempio di codice, importiamo i moduli necessari dal pacchetto transformers, quindi carichiamo un modello e un tokenizer pre-addestrati utilizzando il metodo from_pretrained. Scegliamo un modello BERT fine-tuned sul dataset SQuAD.

Vediamo un caso d’uso di questa funzione in cui abbiamo un paragrafo di testo e vogliamo estrarre una risposta specifica a una domanda da esso:


<p>text = """
The Eiffel Tower, located in Paris, France, is one of the most iconic landmarks in the world. It was designed by Gustave Eiffel and completed in 1889. The tower stands at a height of 324 meters and was the tallest man-made structure in the world at the time of its completion.
"""</p>

<p>question = "Who designed the Eiffel Tower?"</p>

<p># Ottieni la risposta alla domanda
answer = get_answer(text, question)
print(f"The answer to the question is: {answer}")
# Output: The answer to the question is: Gustave Eiffel</p>

In questo script, costruiamo una funzione get_answer che prende un testo e una domanda, tokenizza appropriatamente, e sfrutta il modello BERT pre-addestrato per estrarre la risposta dal testo. Dimostra un’applicazione pratica della libreria transformers di Hugging Face per costruire un semplice ma potente sistema di risposta alle domande. Per comprendere bene i concetti, si consiglia di sperimentare con un Google Colab Notebook.

Conclusione

Attraverso la sua gamma estesa di strumenti open-source, modelli pre-addestrati e pipeline user-friendly, Hugging Face consente sia ai professionisti esperti che ai nuovi arrivati di esplorare il vasto mondo dell’intelligenza artificiale con facilità e comprensione. Inoltre, l’iniziativa di integrare Rust, grazie alle sue caratteristiche di velocità e sicurezza, sottolinea l’impegno di Hugging Face nel favorire l’innovazione garantendo al contempo efficienza e sicurezza nelle applicazioni di intelligenza artificiale. Il lavoro trasformativo di Hugging Face non solo democratizza l’accesso a strumenti di intelligenza artificiale di alto livello, ma nutre anche un ambiente collaborativo per l’apprendimento e lo sviluppo nello spazio dell’intelligenza artificiale, facilitando un futuro in cui l’intelligenza artificiale sia accessibile a tutti.

Ho trascorso gli ultimi cinque anni immergendomi nel mondo affascinante del Machine Learning e del Deep Learning. La mia passione e la mia esperienza mi hanno portato a contribuire a oltre 50 progetti di ingegneria del software diversi, con un focus particolare su AI/ML. La mia curiosità in corso mi ha anche portato verso l'elaborazione del linguaggio naturale, un campo che sono ansioso di esplorare ulteriormente.