Crea un riassuntore di testo utilizzando LLMs con Hugging Face

Riassuntore di testo con LLMs usando Hugging Face

Introduzione

Recentemente, il sommario del testo utilizzando LLM (Large Language Models) ha suscitato molto interesse perché sono diventati strumenti necessari per molte diverse applicazioni di elaborazione del linguaggio naturale (NLP). Questi modelli, come GPT-3 e T5, sono modelli pre-addestrati in grado di produrre testi che assomigliano a quelli di un essere umano, nonché classificazione del testo, sommario, traduzione e altre attività. Hugging Face è una delle librerie più popolari per l’utilizzo di LLM.

Questo articolo esaminerà le capacità dei LLM con un particolare enfasi su Hugging Face e su come è possibile utilizzarlo per affrontare problemi complessi di NLP. Esamineremo anche come utilizzare Hugging Face e LLM per costruire un’applicazione di sommario del testo per Streamlit. Iniziamo con gli obiettivi di apprendimento di questo articolo.

Obiettivi di apprendimento

  • Esplorare le caratteristiche e le funzionalità di Hugging Face come piattaforma per lavorare con LLM e Transformers.
  • Imparare come sfruttare modelli pre-addestrati e pipeline fornite da Hugging Face per varie attività di NLP come chatbot.
  • Sviluppare una comprensione pratica della sintesi del testo utilizzando Hugging Face e LLM.
  • Creare un’applicazione interattiva di Streamlit per la sintesi del testo.

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

Comprensione dei grandi modelli di linguaggio (LLM)

Addestra i modelli LLM su grandi quantità di dati di testo. Questi modelli prevedono la prossima parola in una frase in base al contesto precedente, consentendo loro di catturare modelli di linguaggio complessi e generare testi coerenti.

I LLM vengono addestrati su grandi quantità di set di dati, che contengono miliardi di parametri. La vasta quantità di dati di addestramento consente ai LLM di apprendere le complessità del linguaggio e offrire impressionanti capacità di generazione di testi.

I LLM hanno avuto un impatto significativo nel campo del NLP, consentendo avanzamenti in varie attività come la traduzione automatica, la generazione di testi, la risposta alle domande, l’analisi dei sentimenti e molto altro.

Questi modelli hanno dimostrato prestazioni notevoli sui benchmark e sono diventati strumenti indispensabili per molte attività di NLP.

Hugging Face

Hugging Face è una piattaforma e una libreria per lavorare con LLM e Transformers. Fornisce un ecosistema completo che semplifica l’uso di LLM per le attività di NLP.

Questa libreria offre una vasta gamma di modelli pre-addestrati, set di dati e strumenti, rendendo facile sfruttare i LLM per diverse applicazioni.

Quindi non è necessario addestrare i modelli, sono già stati addestrati per noi. Approfondiamo alcuni aspetti chiave di Hugging Face e come migliora l’utilizzo dei LLM.

Caratteristiche

1. Modelli pre-addestrati

Una delle migliori caratteristiche di Hugging Face, fornisce una vasta collezione di LLM pre-addestrati. Questi modelli sono addestrati su grandi set di dati e ottimizzati per specifiche attività di NLP.

Ad esempio, modelli come GPT-3 e T5 sono prontamente disponibili per attività come la generazione di testi, il sommario e la traduzione.

Hugging Face offre modelli con diverse architetture, dimensioni e compromessi delle prestazioni, consentendo agli utenti di scegliere il modello che meglio si adatta alle loro esigenze.

2. Caricamento e affinamento facili dei modelli

Quando parliamo delle caratteristiche di Hugging Face, la caratteristica più importante è la semplicità, semplifica il processo di caricamento e affinamento dei modelli pre-addestrati.

Con poche righe di codice, qualsiasi utente può scaricare e inizializzare un modello pre-addestrato.

3. Set di dati e tokenizzatori

Lavorare con il NLP spesso implica la gestione di grandi set di dati e la preelaborazione del testo. Hugging Face fornisce set di dati e tokenizzatori che facilitano il caricamento dei dati, la preelaborazione e la tokenizzazione.

Il modulo “datasets” offre accesso a vari set di dati, inclusi set di dati di benchmark popolari, facilitando l’addestramento e la valutazione dei modelli.

I tokenizer forniti da Hugging Face consentono una tokenizzazione efficiente del testo, permettendo agli utenti di convertire il testo grezzo in formati di input adatti per LLM.

4. Addestramento e Pipeline di Inferenza

Hugging Face semplifica l’utilizzo di LLM attraverso le sue pipeline di addestramento e inferenza. Queste pipeline forniscono interfacce di alto livello per compiti comuni di NLP, come la classificazione del testo, il riconoscimento delle entità nominate, l’analisi del sentiment e la sintesi.

Gli utenti possono creare facilmente pipeline e utilizzare LLM per compiti specifici senza addentrarsi in dettagli implementativi a basso livello.

Ad esempio, la funzione pipeline(“summarization”) crea una pipeline di sintesi che astrae le complessità del caricamento del modello, della tokenizzazione e dell’inferenza, consentendo agli utenti di generare riassunti con poche righe di codice.

Sintesi con LLM di Hugging Face

La sintesi è un compito comune di NLP che consiste nel condensare un pezzo di testo in un riassunto conciso preservando i punti principali.

LLM, quando combinati con Hugging Face, offrono potenti capacità sia per la sintesi estrattiva che per quella astrattiva.

La sintesi estrattiva consiste nella selezione delle frasi o delle frasi più importanti del testo originale, mentre la sintesi astrattiva genera un nuovo testo che cattura l’essenza del contenuto originale.

Hugging Face fornisce modelli pre-addestrati, come T5, che possono essere utilizzati sia per compiti di sintesi estrattiva che per compiti di sintesi astrattiva.

Esempio

Per dimostrare la sintesi utilizzando Hugging Face, vediamo un esempio. Prima di tutto, è necessario installare i pacchetti richiesti:

%pip install sacremoses==0.0.53
%pip install datasets
%pip install transformers
%pip install torch torchvision torchaudio

Questi pacchetti, ovvero sacremoses, datasets, transformers e torch o tensorflow 2.0, sono essenziali per lavorare con il dataset e il modello nel codice successivo.

Successivamente, importiamo i moduli necessari dai pacchetti installati:

from datasets import load_dataset
from transformers import pipeline

Qui, importiamo la funzione load_dataset dal pacchetto datasets, che ci consente di caricare il dataset, e la funzione pipeline dal pacchetto transformers, che ci consente di creare una pipeline per la sintesi del testo.

Per illustrare il processo, utilizziamo il dataset xsum, che comprende una collezione di articoli e riassunti della BBC. Carichiamo il dataset nel seguente modo:

#caricamento del dataset
xsum_dataset = load_dataset(
    "xsum",
    version="1.2.0",
    cache_dir='/Documents/Huggin_Face/data'
)  # Nota: specificare cache_dir per utilizzare dati già scaricati.
xsum_dataset
# La rappresentazione stampata di questo oggetto mostra il numero di righe
# di ogni suddivisione del dataset.

Qui, utilizziamo la funzione load_dataset per caricare il dataset xsum, specificando la versione e la directory di cache in cui verranno archiviati i file del dataset scaricati. L’oggetto dataset risultante viene assegnato alla variabile xsum_dataset.

Per lavorare con un sottoinsieme più piccolo del dataset, possiamo selezionare alcuni esempi. Ad esempio, il frammento di codice seguente seleziona i primi 10 esempi dalla suddivisione di addestramento e li visualizza come un DataFrame di Pandas:

xsum_sample = xsum_dataset["train"].select(range(10))

display(xsum_sample.to_pandas())

Creare una Pipeline di Sintesi

Ora che abbiamo il dataset pronto, possiamo creare una pipeline di sintesi utilizzando Hugging Face e eseguire la sintesi su un testo dato. Ecco un esempio:

summarizer = pipeline(
    task="summarization",
    model="t5-small",
    min_length=20,
    max_length=40,
    truncation=True,
    model_kwargs={"cache_dir": '/Documents/Huggin_Face/'},
)  # Nota: specificare cache_dir per utilizzare modelli già scaricati.

In questo frammento di codice, creiamo una pipeline di sintesi utilizzando la funzione pipeline dal pacchetto transformers.

Il parametro della task è impostato su “summarization”, indicando che il compito del pipeline è la sintesi del testo. Specifichiamo il modello pre-addestrato da utilizzare come “t5-small”.

I parametri min_length e max_length definiscono l’intervallo di lunghezza desiderato per i riassunti generati.

Impostiamo truncation=True per troncare il testo di input se supera la lunghezza massima supportata dal modello. Infine, utilizziamo model_kwargs per specificare la directory della cache per i modelli pre-scaricati.

Per generare un riassunto per un determinato documento utilizzando il pipeline di sintesi creato, possiamo utilizzare il seguente codice:

summarizer(xsum_sample["document"][0])

In questo frammento di codice, applichiamo il pipeline di sintesi al primo documento nel dataset xsum_sample. Il pipeline genera un riassunto per il documento in base al modello specificato e ai vincoli di lunghezza.

In alternativa, se si desidera generare un riassunto direttamente dall’input dell’utente

# Chiedi all'utente di inserire il testo
input_text = input("Inserisci il testo da riassumere: ")

# Genera il riassunto
summary = summarizer(input_text, max_length=150, min_length=30, do_sample=False)[0]['summary_text']

bullet_points = summary.split(". ")

for point in bullet_points:
    
    print(f"- {point}")

# Stampa il riassunto generato
print("Riassunto:", summary)

In questo codice modificato, abbiamo rimosso le parti relative al caricamento del dataset e alla visualizzazione dei risultati utilizzando un DataFrame. Invece, chiediamo direttamente all’utente di inserire il testo utilizzando la funzione input().

L’input dell’utente viene quindi passato al pipeline di sintesi, che genera un riassunto basato sul testo fornito. Il riassunto generato viene stampato sulla console.

Sentiti libero di regolare i parametri (max_length e min_length) in base all’intervallo di lunghezza desiderato.

Sfruttando Hugging Face e LLM come T5, puoi facilmente effettuare la sintesi del testo per una varietà di applicazioni, come articoli di notizie, articoli di ricerca o qualsiasi altro testo che richieda riassunti concisi.

Applicazione Web

Applicazione Streamlit per la Sintesi del Testo

Oltre a discutere di LLM e Hugging Face, esploriamo come creare un’applicazione Streamlit per la sintesi del testo. Streamlit è una popolare libreria Python che semplifica lo sviluppo di applicazioni web interattive. Combinando Streamlit con Hugging Face, possiamo creare un’interfaccia utente intuitiva in cui gli utenti possono facilmente inserire testo e ottenere un riassunto in output.

Installare i Pacchetti Necessari

Per iniziare, è necessario installare i pacchetti necessari:

pip install streamlit

Una volta installato Streamlit, possiamo creare uno script Python, chiamiamolo app.py, ed importare i moduli richiesti:

import streamlit as stfrom transformers import pipeline

Successivamente, creiamo un’applicazione Streamlit definendo una funzione e utilizzando i decorator di Streamlit per specificare il layout dell’app:

import streamlit as st
from transformers import pipeline, AutoTokenizer, AutoModelForSeq2SeqLM

def main():
    st.title("Sintesi del Testo")

    summarizer = pipeline(
        task="summarization",
        model="t5-small",
        min_length=20,
        max_length=40,
        truncation=True,
        model_kwargs={"cache_dir": '/Documents/Huggin_Face/'},
    ) 

    # Input dell'utente
    input_text = st.text_area("Inserisci il testo da riassumere:", height=200)

    # Pulsante per riassumere
    if st.button("Riassumi"):
        if input_text:
            # Genera il riassunto
            output = summarizer(input_text, max_length=150, min_length=30, do_sample=False)
            summary = output[0]['summary_text']

            # Visualizza il riassunto come punti elenco
            st.subheader("Riassunto:")
            bullet_points = summary.split(". ")
            for point in bullet_points:
                st.write(f"- {point}")
        else:
            st.warning("Inserisci del testo da riassumere.")

if __name__ == "__main__":
    main()

In questo codice, definiamo la funzione main che rappresenta la nostra applicazione Streamlit. Impostiamo il titolo dell’applicazione utilizzando st.title.

Creare un Pipeline di Sintesi Utilizzando HuggingFace

Successivamente, creiamo una pipeline di riassunto utilizzando la funzione “pipeline” di Hugging Face. Questa pipeline gestirà il compito di riassunto del testo.

Utilizziamo “st.text_area” per creare un’area di testo di input in cui l’utente può copiare o digitare il contenuto che desidera riassumere. Il parametro “height” imposta l’altezza dell’area di testo a 200 pixel.

Creiamo il pulsante “Riassumi” utilizzando “st.button”. Cliccando il pulsante, controlliamo se il testo di input non è vuoto. Se non è vuoto, passiamo il testo di input alla pipeline di riassunto, generiamo il riassunto e lo visualizziamo utilizzando “st.subheader” e “st.write”. Se il testo di input è vuoto, visualizziamo un messaggio di avviso utilizzando “st.warning”.

Infine, eseguiamo la funzione “main” quando lo script viene eseguito come programma principale.

Per eseguire l’applicazione Streamlit, apri un terminale o prompt dei comandi, naviga nella directory in cui si trova lo script “app.py” e esegui il seguente comando:

streamlit run app.py

Streamlit avvierà un server web locale e fornirà un URL a cui è possibile accedere per utilizzare l’applicazione di riassunto del testo.

Gli utenti possono quindi copiare e incollare il contenuto che desiderano riassumere nell’area di testo, fare clic sul pulsante “Riassumi” e comparirà il riassunto generato.

Ecco il link al codice – GitHub

Conclusioni

In questo articolo, abbiamo esplorato il concetto di LLM (Large Language Models) e la loro importanza nell’NLP. Abbiamo presentato Hugging Face come una piattaforma e libreria leader per lavorare con LLM, discutendo le sue principali caratteristiche come modelli pre-addestrati, caricamento semplice dei modelli, messa a punto, dataset, tokenizzatori, addestramento e pipeline di inferenza. Abbiamo anche dimostrato come creare un’applicazione Streamlit per il riassunto del testo utilizzando LLM e Hugging Face.

Con LLM e Hugging Face, sviluppatori e ricercatori hanno a disposizione strumenti potenti per risolvere problemi complessi di NLP, migliorare la generazione del linguaggio e consentire una comprensione del linguaggio naturale più efficiente ed efficace. I continui progressi nei LLM e la vivace community di Hugging Face garantiscono che il futuro dell’NLP sarà pieno di entusiasmanti possibilità.

Punti Chiave

  • I Large Language Models (LLM) sono modelli potenti addestrati su grandi quantità di dati testuali che possono generare testo simile a quello umano e svolgere varie attività di NLP.
  • Hugging Face offre una vasta gamma di modelli pre-addestrati con diverse architetture, dimensioni e compromessi di prestazioni, consentendo agli utenti di scegliere il modello più adatto alle proprie esigenze.
  • Hugging Face offre il caricamento semplice dei modelli, la messa a punto e l’adattamento a compiti personalizzati, consentendo agli utenti di sfruttare i LLM per applicazioni specifiche.
  • Hugging Face offre pipeline di addestramento e inferenza per compiti comuni di NLP, fornendo interfacce di alto livello per l’utilizzo del modello senza richiedere dettagli di implementazione a basso livello.

Domande Frequenti

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