Creazione di embedding BERT con Hugging Face Transformers

Creazione embedding BERT con Hugging Face Transformers

Introduzione

Le trasformazioni sono state inizialmente create per modificare il testo da una lingua all’altra. BERT ha avuto un grande impatto su come studiamo e lavoriamo con il linguaggio umano. Ha migliorato la parte del modello di trasformazione originale che comprende il testo. La creazione di embedding BERT è particolarmente efficace nel comprendere frasi con significati complessi. Fa ciò esaminando l’intera frase e comprendendo come le parole si connettono. La libreria Hugging Face transformers è fondamentale per creare codici di frasi unici e introdurre BERT.

Obiettivi di apprendimento

  • Acquisire una buona comprensione di BERT e dei modelli preaddestrati. Comprendere quanto siano importanti nel lavorare con il linguaggio umano.
  • Imparare a utilizzare efficacemente la libreria Hugging Face Transformers. Utilizzarla per creare rappresentazioni speciali del testo.
  • Capire vari modi per rimuovere correttamente queste rappresentazioni dai modelli preaddestrati di BERT. Questo è importante perché diverse attività linguistiche richiedono approcci diversi.
  • Acquisire esperienza pratica effettuando effettivamente i passaggi necessari per creare queste rappresentazioni. Assicurarsi di poterlo fare autonomamente.
  • Imparare a utilizzare queste rappresentazioni create per migliorare altre attività linguistiche come la classificazione del testo o l’identificazione delle emozioni nel testo.
  • Esplorare l’adattamento dei modelli preaddestrati per migliorare ulteriormente le attività linguistiche specifiche. Ciò può portare a risultati migliori.
  • Scoprire dove vengono utilizzate queste rappresentazioni per migliorare le attività linguistiche. Vedere come migliorano l’accuratezza e le prestazioni dei modelli linguistici.

Questo articolo è stato pubblicato come parte del Data Science Blogathon.

Cosa comprendono i Pipelines all’interno del contesto dei Transformers?

Pensa ai pipelines come a uno strumento facile da usare che semplifica il codice complesso presente nella libreria transformers. Rappresentano un modo semplice per utilizzare modelli per compiti come la comprensione del linguaggio, l’analisi dei sentimenti, l’estrazione delle caratteristiche, la risposta alle domande e altro ancora. Forniscono un modo ordinato per interagire con questi potenti modelli.

I pipelines includono alcuni componenti essenziali: un tokenizer (che trasforma il testo normale in unità più piccole con cui il modello può lavorare), il modello stesso (che effettua previsioni in base all’input) e alcune operazioni di preparazione aggiuntive per garantire il corretto funzionamento del modello.

Cosa richiede l’utilizzo di Hugging Face Transformers?

I modelli di trasformazione sono solitamente enormi e gestirli per l’addestramento e l’utilizzo in applicazioni reali può essere piuttosto complesso. Gli Hugging Face transformers mirano a semplificare l’intero processo. Forniscono un modo unico per caricare, addestrare e salvare qualsiasi modello Transformer, indipendentemente dalle sue dimensioni. L’utilizzo di diversi strumenti software per diverse fasi della vita del modello è ancora più pratico. Puoi addestrarlo con un set di strumenti e poi utilizzarlo facilmente in un altro contesto per compiti reali senza troppi problemi.

Funzionalità avanzate

  • Questi modelli moderni sono facili da usare e danno ottimi risultati nella comprensione e generazione del linguaggio umano e in compiti legati alla visione artificiale e all’audio.
  • Aiutano anche a risparmiare potenza di elaborazione del computer e sono migliori per l’ambiente perché i ricercatori possono condividere i loro modelli già addestrati, evitando agli altri di doverli addestrare nuovamente.
  • Con poche righe di codice, puoi scegliere i migliori strumenti software per ogni fase della vita del modello, che si tratti di addestramento, test o utilizzo per compiti reali.
  • Inoltre, numerosi esempi per ogni tipo di modello rendono facile utilizzarli per le tue esigenze specifiche, seguendo ciò che hanno fatto i creatori originali.

Tutorial Hugging Face

Questo tutorial è qui per aiutarti con le basi del lavoro con i dataset. Lo scopo principale degli HuggingFace transformers è rendere più semplice il caricamento di dataset che si presentano in diversi formati o tipi.

Esplorazione dei dataset

In genere, i dataset più grandi producono risultati migliori. La libreria Dataset di Hugging Face dispone di una funzione che consente di scaricare e preparare rapidamente molti dataset pubblici. Puoi ottenere e archiviare direttamente i dataset utilizzando i loro nomi dal Dataset Hub. Il risultato è simile a un dizionario che contiene tutte le parti del dataset, alle quali puoi accedere tramite i loro nomi.

Una cosa fantastica della libreria Datasets di Hugging Face è il modo in cui gestisce lo spazio di archiviazione sul tuo computer e utilizza qualcosa chiamato Apache Arrow. Ciò aiuta a gestire anche dataset di grandi dimensioni senza utilizzare troppa memoria.

Puoi scoprire di più su cosa contiene un dataset guardando le sue caratteristiche. Se ci sono parti che non ti servono, puoi eliminarle facilmente. Puoi anche cambiare i nomi delle etichette in ‘labels’ (come si aspettano i modelli Hugging Face Transformers) e impostare il formato di output su diverse piattaforme come torch, TensorFlow o numpy.

Traduzione di lingue

La traduzione consiste nel cambiare un insieme di parole in un altro. Creare un nuovo modello di traduzione dall’inizio richiede molto testo in due o più lingue. In questo tutorial, renderemo un modello Marian migliore nella traduzione dall’inglese al francese. Ha già imparato molto da una grande collezione di testi francesi e inglesi, quindi ha avuto un vantaggio iniziale. Dopo aver finito, avremo un modello ancora migliore per la traduzione.

from transformers import pipeline

translator = pipeline("translation_en_to_fr")
translation = translator("Qual è il tuo nome?")
## [{'translation_text': "Quel est ton nom ?"}]

Classificazione Zero-Shot

Questa è un modo speciale di ordinare il testo utilizzando un modello addestrato a comprendere il linguaggio naturale. La maggior parte degli ordinamenti di testo ha una lista di categorie, ma questo può decidere quali categorie utilizzare man mano che legge il testo. Questo lo rende molto adattabile, anche se potrebbe funzionare un po’ più lentamente. Può indovinare di cosa tratta un testo in circa 15 lingue diverse, anche se non conosce le possibili categorie in anticipo. Puoi utilizzare facilmente questo modello ottenendolo dall’hub.

Analisi del Sentimento

Crea una pipeline utilizzando la funzione “pipeline()” in Hugging Face Transformers. Questa parte del sistema rende facile addestrare un modello per comprendere il sentiment e poi utilizzarlo per analizzare i sentiment utilizzando un modello specifico che puoi trovare nell’hub.

Passo 1: Ottieni il modello giusto per il compito che vuoi svolgere. Ad esempio, stiamo ottenendo il modello base BERT distillato per classificare i sentiment in questo caso.

chosen_model = "distilbert-base-uncased-finetuned-sst-2-english"
distil_bert = pipeline(task="sentiment-analysis", model=chosen_model)

Come risultato, il modello è pronto per eseguire il compito previsto.

perform_sentiment_analysis(english_texts[1:])

Questo modello valuta il sentiment espresso nei testi o nelle frasi fornite.

Risposta alle domande

Il modello di risposta alle domande è come uno strumento intelligente. Gli dai del testo e può trovare risposte in quel testo. È utile per ottenere informazioni da diversi documenti. Quello che è interessante di questo modello è che può trovare risposte anche se non ha tutte le informazioni di contesto.

Puoi utilizzare facilmente i modelli di risposta alle domande e la libreria Hugging Face Transformers con la “pipeline di risposta alle domande”.

Se non gli dici quale modello utilizzare, la pipeline inizia con uno di default chiamato “distilbert-base-cased-distilled-squad”. Questa pipeline prende una domanda e un contesto correlato alla domanda e poi trova la risposta da quel contesto.

from transformers import pipeline

qa_pipeline = pipeline("question-answering")
query = "Qual è il mio luogo di residenza?"
qa_result = qa_pipeline(question=query, context=context_text)
## {'answer': 'India', 'end': 39, 'score': 0.953, 'start': 31}

Word Embeddings di BERT

Utilizzando il tokenizer di BERT, la creazione di word embeddings con BERT inizia suddividendo il testo di input nelle singole parole o parti. Successivamente, questo input elaborato passa attraverso il modello di BERT per produrre una sequenza di hidden states. Questi stati creano word embeddings per ogni parola nel testo di input. Questo avviene moltiplicando gli hidden states con una matrice di pesi appresa.

Ciò che è speciale negli word embeddings di BERT è che comprendono il contesto. Ciò significa che l’embedding di una parola può cambiare a seconda di come viene utilizzata in una frase. Altri metodi per gli word embeddings di solito creano lo stesso embedding per una parola, indipendentemente da dove appare nella frase.

Qual è il motivo per cui si utilizzano gli embedding BERT?

BERT, acronimo di “Bidirectional Encoder Representations from Transformers”, è un sistema intelligente per l’addestramento della comprensione del linguaggio. Crea una solida base che può essere utilizzata dalle persone che lavorano su compiti legati al linguaggio senza alcun costo. Questi modelli hanno due utilizzi principali: puoi utilizzarli per ottenere informazioni più utili dai dati testuali o puoi addestrarli con i tuoi dati per svolgere lavori specifici come ordinare cose, trovare nomi o rispondere a domande.

Diventa strumentale una volta che inserisci delle informazioni, come una frase, un documento o un’immagine, in BERT. BERT è bravo a estrarre parti importanti dal testo, come il significato delle parole e delle frasi. Queste informazioni sono utili per compiti come trovare parole chiave, cercare cose simili e ottenere informazioni. Quello che è speciale di BERT è che comprende le parole non solo singolarmente ma nel contesto in cui vengono utilizzate. Questo lo rende migliore rispetto a modelli come Word2Vec, che non considerano le parole circostanti. Inoltre, BERT gestisce molto bene la posizione delle parole, il che è importante.

Caricamento di BERT pre-addestrato

Hugging Face Transformers ti permette di utilizzare BERT in PyTorch, che puoi installare facilmente. Questa libreria offre anche strumenti per lavorare con altri modelli avanzati di linguaggio come GPT e GPT-2 di OpenAI.

!pip install transformers

Devi importare PyTorch, il modello BERT pre-addestrato e un Tokenizzatore BERT per iniziare.

import torch
from transformers import BertTokenizer, BertModel

Transformers fornisce diverse classi per utilizzare BERT in molti compiti, come la comprensione del tipo di token e l’ordinamento del testo. Ma se vuoi ottenere rappresentazioni delle parole, BertModel è la scelta migliore.

# FACOLTATIVO: Abilita il logger per tracciare informazioni
import logging

import matplotlib.pyplot as plt
%matplotlib inline

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
# Carica il tokenizzatore per il modello pre-addestrato

Formattazione dell’input

Quando si lavora con un modello BERT pre-addestrato per la comprensione del linguaggio umano, è fondamentale assicurarsi che i dati di input siano nel formato corretto. Vediamo nel dettaglio:

  1. Token speciali per i confini delle frasi: BERT richiede che l’input sia una serie di parole o sottoinsiemi di parole, come la suddivisione di una frase in parti più piccole. È necessario aggiungere token speciali all’inizio e alla fine di ogni frase.
  2. Mantenere la stessa lunghezza delle frasi: Per lavorare efficacemente con un insieme di dati di input, è necessario assicurarsi che tutte le frasi abbiano la stessa lunghezza. Puoi farlo aggiungendo token di “padding” alle frasi più corte o riducendo quelle più lunghe.
  3. Utilizzo di una maschera di attenzione: Quando si aggiungono token di padding per rendere le frasi della stessa lunghezza, si utilizza anche una “maschera di attenzione”. Questa è come una mappa che aiuta BERT a capire quali parti sono parole effettive (contrassegnate come 1) e quali sono padding (contrassegnate come 0). Questa maschera è inclusa con i dati di input quando vengono forniti al modello BERT.

Token speciali

Ecco cosa fanno questi token in termini più semplici:

  1. [SEP] Separa le frasi: Aggiungere [SEP] alla fine di una frase è fondamentale. Quando BERT vede due frasi e deve capire la loro connessione, [SEP] aiuta a capire dove finisce una frase e inizia la successiva.
  2. [CLS] Mostra l’idea principale: Per compiti in cui classifichi o ordini il testo, è comune iniziare con [CLS]. Segnala a BERT che questo è il punto principale o la categoria del testo.

BERT ha 12 livelli, ognuno dei quali crea un riassunto del testo che gli viene fornito, con lo stesso numero di parti delle parole inserite. Ma questi riassunti sono leggermente diversi quando vengono generati.

Tokenizzazione

La funzione ‘encode’ nella libreria Hugging Face Transformers prepara e organizza i tuoi dati. Prima di utilizzare questa funzione sul tuo testo, dovresti decidere la lunghezza massima della frase che desideri utilizzare per aggiungere parole extra o ridurre quelle più lunghe.

Come Tokenizzare il Testo?

La funzione tokenizer.encode_plus semplifica diversi processi:

  1. Segmentazione della frase in token
  2. Introduzione dei token speciali [SEP] e [CLS]
  3. Mappatura dei token ai loro ID corrispondenti
  4. Garanzia di una lunghezza uniforme delle frasi tramite padding o troncamento
  5. Creazione di maschere di attenzione che distinguono i token effettivi dai token [PAD].
input_ids = []
attention_masks = []

# Per ogni frase...
for sentence in sentences:
    encoded_dict = tokenizer.encode_plus(
                        sentence,                  
                        add_special_tokens=True,   # Aggiungi '[CLS]' e '[SEP]'
                        max_length=64,             # Regola la lunghezza della frase
                        pad_to_max_length=True,    # Padding/troncamento delle frasi
                        return_attention_mask=True,# Genera maschere di attenzione
                        return_tensors='pt',       # Restituisci tensori PyTorch
                   )
    
   
    input_ids.append(encoded_dict['input_ids'])
    
    # Costruisci una maschera di attenzione (identificando padding/non-padding).
    attention_masks.append(encoded_dict['attention_mask'])

ID di Segmento

In BERT, stiamo guardando coppie di frasi. Per ogni parola nel testo tokenizzato, determiniamo se appartiene alla prima frase (contrassegnata con 0) o alla seconda frase (contrassegnata con 1).

Quando si lavora con frasi in questo contesto, si assegna il valore 0 a ogni parola nella prima frase insieme al token ‘[SEP]’, e si assegna il valore 1 a tutte le parole nella seconda frase.

Ora, parliamo di come puoi utilizzare BERT con il tuo testo:

Il Modello BERT apprende comprensioni complesse della lingua inglese, che possono aiutarti a estrarre diversi aspetti del testo per varie attività.

Se hai un insieme di frasi con etichette, puoi addestrare un classificatore regolare utilizzando le informazioni prodotte dal Modello BERT come input (il testo).

Per ottenere le caratteristiche di un particolare testo utilizzando questo modello in TensorFlow:

from transformers import BertTokenizer, TFBertModel

tokenizer = BertTokenizer.from_pretrained('bert-base-cased')
model = TFBertModel.from_pretrained("bert-base-cased")

custom_text = "
Puoi utilizzare qualsiasi testo che preferisci."
encoded_input = tokenizer(custom_text, return_tensors='tf')
output_embeddings = model(encoded_input)

Conclusioni

BERT è un potente sistema informatico creato da Google. È come un cervello intelligente che può imparare da un testo. Puoi renderlo ancora più intelligente insegnandogli compiti specifici, come capire il significato di una frase. D’altra parte, HuggingFace è una famosa libreria open-source per lavorare con il linguaggio. Ti fornisce modelli BERT pre-addestrati, rendendo molto più facile usarli per lavori specifici sul linguaggio.

Punti Chiave

  • In termini semplici, l’utilizzo delle rappresentazioni delle parole da modelli BERT pre-addestrati è estremamente utile per una vasta gamma di compiti di linguaggio naturale come l’ordinamento del testo, la comprensione dei sentimenti nel testo e il riconoscimento dei nomi delle cose.
  • Questi modelli hanno già imparato molto da grandi insiemi di dati e tendono a funzionare bene per varie attività.
  • Puoi renderli ancora migliori per lavori specifici regolando le conoscenze che hanno già acquisito.
  • Inoltre, ottenere queste rappresentazioni delle parole dai modelli ti aiuta a utilizzare ciò che hanno imparato in altri compiti linguistici e può migliorare il funzionamento di altri modelli. Nel complesso, l’utilizzo di modelli BERT pre-addestrati per rappresentazioni delle parole è un approccio promettente all’elaborazione del linguaggio.

Domande Frequenti

I media mostrati in questo articolo non sono di proprietà di Analytics Vidhya e vengono utilizzati a discrezione dell’autore.