Strumenti di IA 101
Guida Completa per Principianti agli Strumenti LLM di Hugging Face

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
Hugging Face ha semplificato il lavoro con gli LLM offrendo:
- Una gamma di modelli pre-addestrati da cui scegliere.
- Strumenti ed esempi per adattare questi modelli alle tue esigenze specifiche.
- 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:
- Tokenizer: prepara il tuo testo per il modello convertendolo in un formato che il modello puÃē comprendere.
- Model: questo ÃĻ il cuore della pipeline dove vengono effettuate le previsioni reali in base allâinput pre-elaborato.
- 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
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.
- 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.
- 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.

















