Classificazione del testo senza addestramento con Amazon SageMaker JumpStart

Classificazione testo senza addestramento con Amazon SageMaker JumpStart

Il processing del linguaggio naturale (NLP) è il campo del machine learning (ML) che si occupa di fornire ai computer la capacità di comprendere il testo e le parole pronunciate allo stesso modo dei esseri umani. Di recente, architetture all’avanguardia come l’architettura transformer vengono utilizzate per raggiungere prestazioni quasi umane su compiti NLP come la sintesi del testo, la classificazione del testo, il riconoscimento delle entità e altro ancora.

I modelli di linguaggio di grandi dimensioni (LLM) sono modelli basati su transformer addestrati su una grande quantità di testo non etichettato con centinaia di milioni (BERT) fino a oltre un trilione di parametri (MiCS), le cui dimensioni rendono l’addestramento su una singola GPU impraticabile. A causa della loro complessità intrinseca, addestrare un LLM da zero è un compito molto difficile che pochissime organizzazioni possono permettersi. Una pratica comune per i compiti NLP correlati è prendere un LLM preaddestrato e affinarlo ulteriormente. Per ulteriori informazioni sull’affinamento, fare riferimento all’adattamento del dominio Fine-tuning di Foundation Models in Amazon SageMaker JumpStart sui dati finanziari e all’affinamento dei modelli di linguaggio transformer per la diversità linguistica con Hugging Face su Amazon SageMaker.

L’apprendimento zero-shot in NLP consente a un LLM preaddestrato di generare risposte a compiti per i quali non è stato esplicitamente addestrato (anche senza affinamento). Parlando specificamente della classificazione del testo, la classificazione del testo zero-shot è un compito di elaborazione del linguaggio naturale in cui un modello NLP viene utilizzato per classificare il testo di classi non viste, a differenza della classificazione supervisionata, in cui i modelli NLP possono classificare solo il testo che appartiene alle classi presenti nei dati di addestramento.

Abbiamo recentemente lanciato il supporto per il modello di classificazione zero-shot in Amazon SageMaker JumpStart. SageMaker JumpStart è il centro di apprendimento automatico di Amazon SageMaker che fornisce accesso a modelli di base preaddestrati (FMs), LLM, algoritmi integrati e modelli di soluzione per aiutarti a iniziare rapidamente con l’apprendimento automatico. In questo post, mostriamo come è possibile eseguire la classificazione zero-shot utilizzando modelli preaddestrati in SageMaker Jumpstart. Imparerai come utilizzare l’interfaccia utente di SageMaker Jumpstart e il SDK di Python di SageMaker per distribuire la soluzione ed eseguire l’inferenza utilizzando i modelli disponibili.

Apprendimento zero-shot

La classificazione zero-shot è un paradigma in cui un modello può classificare nuovi esempi non visti che appartengono a classi non presenti nei dati di addestramento. Ad esempio, un modello di linguaggio che è stato addestrato per comprendere il linguaggio umano può essere utilizzato per classificare i tweet sulle risoluzioni di Capodanno in più classi come carriera, salute e finanza, senza che il modello di linguaggio sia stato addestrato esplicitamente sul compito di classificazione del testo. Questo è in contrasto con l’affinamento del modello, poiché quest’ultimo implica il riaddestramento del modello (attraverso il trasferimento di apprendimento), mentre l’apprendimento zero-shot non richiede ulteriori addestramenti.

Il seguente diagramma illustra le differenze tra il trasferimento di apprendimento (a sinistra) e l’apprendimento zero-shot (a destra).

Yin et al. hanno proposto un framework per creare classificatori zero-shot utilizzando l’inferenza del linguaggio naturale (NLI). Il framework funziona formulando la sequenza da classificare come una premessa NLI e costruisce un’ipotesi per ogni etichetta candidata. Ad esempio, se vogliamo valutare se una sequenza appartiene alla classe politica, potremmo costruire un’ipotesi del tipo “Questo testo riguarda la politica”. Le probabilità di implicazione e contraddizione vengono quindi convertite in probabilità di etichetta. Come breve riepilogo, l’NLI considera due frasi: una premessa e un’ipotesi. Il compito consiste nel determinare se l’ipotesi è vera (implicazione) o falsa (contraddizione) data la premessa. La seguente tabella fornisce alcuni esempi.

Premessa Etichetta Ipotesi
Un uomo ispeziona l’uniforme di una figura in un paese dell’Asia orientale. Contraddizione L’uomo sta dormendo.
Un uomo più anziano e uno più giovane che sorridono. Neutrale Due uomini sorridono e ridono dei gatti che giocano sul pavimento.
Una partita di calcio con più uomini che giocano. Implicazione Alcuni uomini stanno giocando a uno sport.

Panoramica della soluzione

In questo post, discutiamo i seguenti argomenti:

  • Come distribuire modelli di classificazione del testo zero-shot pre-addestrati utilizzando l’interfaccia utente SageMaker JumpStart e eseguire inferenze sul modello distribuito utilizzando dati di testo breve
  • Come utilizzare il SageMaker Python SDK per accedere ai modelli di classificazione del testo zero-shot pre-addestrati in SageMaker JumpStart e utilizzare lo script di inferenza per distribuire il modello in un endpoint di SageMaker per un caso d’uso di classificazione del testo in tempo reale
  • Come utilizzare il SageMaker Python SDK per accedere ai modelli di classificazione del testo zero-shot pre-addestrati e utilizzare la trasformazione batch di SageMaker per un caso d’uso di classificazione del testo batch

SageMaker JumpStart fornisce un’implementazione e distribuzione con un clic per una vasta gamma di modelli pre-addestrati per compiti di apprendimento automatico popolari, nonché una selezione di soluzioni complete che risolvono problemi comuni di business. Queste funzionalità semplificano lo sviluppo di modelli di alta qualità e riducono il tempo di distribuzione, eliminando la fatica da ogni passo del processo di apprendimento automatico. Le API di JumpStart consentono di distribuire e addestrare in modo programmato una vasta selezione di modelli pre-addestrati sui propri dataset.

Il model hub di JumpStart fornisce accesso a un gran numero di modelli NLP che consentono il trasferimento di conoscenza e il raffinamento su dataset personalizzati. Al momento della stesura di questo documento, il model hub di JumpStart contiene oltre 300 modelli di testo per una varietà di modelli popolari, come Stable Diffusion, Flan T5, Alexa TM, Bloom e altri.

Si noti che seguendo i passaggi in questa sezione, si distribuirà l’infrastruttura nel proprio account AWS che potrebbe comportare costi.

Distribuire un modello di classificazione del testo zero-shot autonomo

In questa sezione, mostriamo come distribuire un modello di classificazione zero-shot utilizzando SageMaker JumpStart. È possibile accedere ai modelli pre-addestrati tramite la pagina iniziale di JumpStart in Amazon SageMaker Studio. Seguire i seguenti passaggi:

  1. In SageMaker Studio, aprire la pagina iniziale di JumpStart. Consultare la guida “Aprire e utilizzare JumpStart” per ulteriori dettagli su come navigare in SageMaker JumpStart.
  2. Nella barra dei modelli di testo, individuare la scheda del modello “Classificazione del testo zero-shot”.
  3. Scegliere “Visualizza modello” per accedere al modello “facebook-bart-large-mnli”. In alternativa, è possibile cercare il modello di classificazione zero-shot nella barra di ricerca e accedere al modello in SageMaker JumpStart.
  4. Specificare una configurazione di distribuzione, il tipo di istanza di hosting di SageMaker, il nome del punto di accesso, il nome del bucket di Amazon Simple Storage Service (Amazon S3) e altri parametri richiesti.
  5. In opzione, è possibile specificare configurazioni di sicurezza come il ruolo AWS Identity and Access Management (IAM), le impostazioni VPC e le chiavi di crittografia AWS Key Management Service (AWS KMS).
  6. Scegliere “Distribuisci” per creare un endpoint di SageMaker.

Questo passaggio richiede alcuni minuti per essere completato. Una volta completato, è possibile eseguire inferenze sul punto di accesso di SageMaker che ospita il modello di classificazione zero-shot.

Nel seguente video, mostriamo una panoramica dei passaggi di questa sezione.

Utilizzare JumpStart in modo programmato con il SageMaker SDK

Nella sezione SageMaker JumpStart di SageMaker Studio, sotto “Soluzioni di avvio rapido”, è possibile trovare i modelli di soluzione. I modelli di soluzione di SageMaker JumpStart sono soluzioni complete con un clic per molti casi d’uso comuni di apprendimento automatico. Al momento della stesura di questo documento, sono disponibili oltre 20 soluzioni per vari casi d’uso, come previsioni della domanda, rilevamento delle frodi e raccomandazioni personalizzate, solo per citarne alcuni.

La soluzione “Classificazione del testo zero-shot con Hugging Face” fornisce un modo per classificare il testo senza la necessità di addestrare un modello per etichette specifiche (classificazione zero-shot) utilizzando un classificatore di testo pre-addestrato. Il modello predefinito di classificazione zero-shot per questa soluzione è il modello facebook-bart-large-mnli (BART). Per questa soluzione, utilizziamo il dataset delle Risoluzioni di Capodanno 2015 per classificare le risoluzioni. Un sottoinsieme del dataset originale contenente solo le colonne “Resolution_Category” (etichetta ground truth) e “text” è incluso negli asset della soluzione.

I dati di input includono stringhe di testo, una lista di categorie desiderate per la classificazione e se la classificazione è multi-label o meno per l’inferenza sincrona (in tempo reale). Per l’inferenza asincrona (batch), forniamo una lista di stringhe di testo, la lista delle categorie per ogni stringa e se la classificazione è multi-label o meno in un file di testo formattato JSON lines.

Il risultato dell’inferenza è un oggetto JSON che assomiglia a uno screenshot come il seguente.

Abbiamo il testo originale nel campo sequence, le etichette utilizzate per la classificazione del testo nel campo labels e la probabilità assegnata a ogni etichetta (nell’ordine di apparizione) nel campo scores.

Per distribuire la soluzione di classificazione del testo Zero Shot con Hugging Face, completare i seguenti passaggi:

  1. Nella pagina iniziale di SageMaker JumpStart, scegliere Modelli, quaderni, soluzioni nel riquadro di navigazione.
  2. Nella sezione Soluzioni, scegliere Esplora tutte le soluzioni.
  3. Nella pagina Soluzioni, scegliere la scheda del modello Zero Shot Text Classification with Hugging Face.
  4. Esaminare i dettagli di distribuzione e, se si è d’accordo, scegliere Avvia.

La distribuzione provvederà a creare un endpoint in tempo reale di SageMaker per l’inferenza in tempo reale e un bucket S3 per memorizzare i risultati della trasformazione batch.

Il seguente diagramma illustra l’architettura di questo metodo.

Eseguire l’inferenza in tempo reale utilizzando un modello di classificazione zero-shot

In questa sezione, esamineremo come utilizzare l’SDK Python per eseguire la classificazione di testo zero-shot (utilizzando uno qualsiasi dei modelli disponibili) in tempo reale utilizzando un endpoint di SageMaker.

  1. Prima di tutto, configuriamo la richiesta di payload di inferenza per il modello. Questo dipende dal modello, ma per il modello BART, l’input è un oggetto JSON con la seguente struttura:

    {
    "inputs": # Il testo da classificare
    "parameters": {
    "candidate_labels": # Una lista delle etichette che vogliamo utilizzare per la classificazione del testo
    "multi_label": True | False
    }
    }
  2. Si noti che il modello BART non è esplicitamente addestrato sulle candidate_labels. Utilizzeremo la tecnica di classificazione zero-shot per classificare la sequenza di testo in classi non viste. Il codice seguente è un esempio che utilizza del testo dal dataset delle risoluzioni di Capodanno e le classi definite:

    classification_categories = ['Salute', 'Umorismo', 'Crescita personale', 'Filantropia', 'Tempo libero', 'Carriera', 'Finanza', 'Educazione', 'Gestione del tempo']
    data_zero_shot = {
    "inputs": "#risoluzionediinizioanno :: leggere più libri, evitare di guardare fb/controllare la posta elettronica prima di colazione, dedicarsi a yoga per risolvere il mal di schiena!",
    "parameters": {
    "candidate_labels": classification_categories,
    "multi_label": False
    }
    }
  3. Successivamente, è possibile invocare un endpoint SageMaker con il payload zero-shot. L’endpoint SageMaker viene distribuito come parte della soluzione SageMaker JumpStart.

    response = runtime.invoke_endpoint(EndpointName=nome_endpoint_sagemaker,
    ContentType='application/json',
    Body=json.dumps(payload))
    
    parsed_response = json.loads(response['Body'].read())
  4. L’oggetto di risposta dell’inferenza contiene la sequenza originale, le etichette ordinate per punteggio dal massimo al minimo e i punteggi per etichetta:

    {'sequence': "#risoluzionediinizioanno :: leggere più libri, evitare di guardare fb/controllare la posta elettronica prima di colazione, dedicarsi a yoga per risolvere il mal di schiena!",
    'labels': ['Crescita personale',
    'Salute',
    'Gestione del tempo',
    'Tempo libero',
    'Educazione',
    'Umorismo',
    'Carriera',
    'Filantropia',
    'Finanza'],
    'scores': [0.4198768436908722,
    0.2169460505247116,
    0.16591140627861023,
    0.09742163866758347,
    0.031757451593875885,
    0.027988269925117493,
    0.015974704176187515,
    0.015464971773326397,
    0.008658630773425102]}

Esegui un lavoro di trasformazione batch di SageMaker utilizzando il Python SDK

In questa sezione viene descritto come eseguire l’inferenza di trasformazione batch con il modello di classificazione senza etichetta facebook-bart-large-mnli utilizzando il SageMaker Python SDK. Completa i seguenti passaggi:

  1. Formatta i dati di input nel formato JSON lines e carica il file su Amazon S3. La trasformazione batch di SageMaker eseguirà l’inferenza sui punti dati caricati nel file S3.

  2. Configura gli artefatti di distribuzione del modello con i seguenti parametri:

    1. model_id – Utilizza huggingface-zstc-facebook-bart-large-mnli.

    2. deploy_image_uri – Utilizza la funzione image_uris del Python SDK per ottenere l’immagine Docker SageMaker pre-costruita per il model_id. La funzione restituisce l’URI del Registro dei contenitori elastici di Amazon (Amazon ECR).

    3. deploy_source_uri – Utilizza l’API di utilità script_uris per recuperare l’URI di S3 che contiene gli script per eseguire l’inferenza del modello pre-addestrato. Specifichiamo la script_scope come inference.

    4. model_uri – Utilizza model_uri per ottenere gli artefatti del modello da Amazon S3 per il model_id specificato.

      #imports
      from sagemaker import image_uris, model_uris, script_uris, hyperparameters
      
      #set model id and version
      model_id, model_version, = (
      "huggingface-zstc-facebook-bart-large-mnli",
      "*",
      )
      
      # Recupera l'URI del contenitore Docker di inferenza. Questa è l'immagine di base Hugging Face per il modello predefinito sopra.
      deploy_image_uri = image_uris.retrieve(
      region=None,
      framework=None, # Inference framework inferred automatically from model_id
      image_scope="inference",
      model_id=model_id,
      model_version=model_version,
      instance_type="ml.g4dn.xlarge",
      )
      
      # Recupera l'URI dello script di inferenza. Questo include tutte le dipendenze e gli script per il caricamento del modello, la gestione dell'inferenza, e altro ancora.
      deploy_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="inference")
      
      # Recupera l'URI del modello. Questo include il modello pre-addestrato e i parametri.
      model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="inference") 
  3. Utilizza HF_TASK per definire il compito per la pipeline dei trasformatori Hugging Face e HF_MODEL_ID per definire il modello utilizzato per classificare il testo:

    # Configurazione del modello Hub <https://huggingface.co/models>
    hub = {
    'HF_MODEL_ID':'facebook/bart-large-mnli', # L'ID del modello dal Hub Hugging Face
    'HF_TASK':'zero-shot-classification' # Il compito NLP che si desidera utilizzare per le previsioni
    }

    Per una lista completa dei compiti, consulta la documentazione di Pipelines in Hugging Face.

  4. Crea un oggetto modello Hugging Face da distribuire con il lavoro di trasformazione batch SageMaker:

    # Crea la classe HuggingFaceModel
    huggingface_model_zero_shot = HuggingFaceModel(
    model_data=model_uri, # percorso del tuo modello sagemaker addestrato
    env=hub, # configurazione per il caricamento del modello da Hub
    role=role, # ruolo IAM con le autorizzazioni per creare un endpoint
    transformers_version="4.17", # versione di Transformers utilizzata
    pytorch_version="1.10", # versione di PyTorch utilizzata
    py_version='py38', # versione di Python utilizzata
    )
  5. Crea una trasformazione per eseguire un lavoro batch:

    # Crea il trasformatore per eseguire un lavoro batch
    batch_job = huggingface_model_zero_shot.transformer(
    instance_count=1,
    instance_type='ml.m5.xlarge',
    strategy='SingleRecord',
    assemble_with='Line',
    output_path=s3_path_join("s3://",sagemaker_config['S3Bucket'],"zero_shot_text_clf", "results"), # stiamo utilizzando lo stesso percorso s3 per salvare l'output con l'input
    )
  6. Avvia un lavoro di trasformazione batch e utilizza i dati di S3 come input:

    batch_job.transform(
    data=data_upload_path,
    content_type='application/json',
    split_type='Line',
    logs=False,
    wait=True
    )

Puoi monitorare il tuo lavoro di elaborazione batch sulla console di SageMaker (scegliere Lavori di trasformazione batch sotto Inferenza nel riquadro di navigazione). Quando il lavoro è completo, puoi controllare l’output delle previsioni del modello nel file S3 specificato in output_path.

Per un elenco di tutti i modelli pre-addestrati disponibili in SageMaker JumpStart, fare riferimento alla tabella dei modelli con modello pre-addestrato. Utilizzare la parola chiave “zstc” (abbreviazione di classificazione del testo a zero colpi) nella barra di ricerca per individuare tutti i modelli in grado di eseguire una classificazione del testo a zero colpi.

Pulizia

Dopo aver eseguito il notebook, assicurarsi di eliminare tutte le risorse create nel processo per garantire che i costi sostenuti dagli asset distribuiti in questa guida siano interrotti. Il codice per ripulire le risorse distribuite è fornito nei notebook associati alla soluzione e al modello di classificazione del testo a zero colpi.

Configurazioni di sicurezza predefinite

I modelli di SageMaker JumpStart vengono distribuiti utilizzando le seguenti configurazioni di sicurezza predefinite:

  • I modelli vengono distribuiti con un ruolo di esecuzione SageMaker predefinito. È possibile specificare un proprio ruolo o utilizzarne uno esistente. Per maggiori informazioni, fare riferimento ai ruoli di SageMaker.
  • Il modello non si connetterà a una VPC e nessuna VPC verrà fornita per il modello. È possibile specificare la configurazione della VPC per connettersi al modello dalle opzioni di sicurezza. Per maggiori informazioni, vedere Fornire agli endpoint ospitati da SageMaker l’accesso alle risorse nella propria VPC di Amazon.
  • Verranno utilizzate le chiavi KMS predefinite per crittografare gli artefatti del modello. È possibile specificare le proprie chiavi KMS o utilizzarne una esistente. Per maggiori informazioni, fare riferimento all’utilizzo della crittografia lato server con le chiavi KMS di AWS (SSE-KMS).

Per saperne di più sui temi relativi alla sicurezza di SageMaker, consulta Configurare la sicurezza in Amazon SageMaker.

Conclusioni

In questo post, ti abbiamo mostrato come distribuire un modello di classificazione a zero colpi utilizzando l’interfaccia utente di SageMaker JumpStart e eseguire l’inferenza utilizzando l’endpoint distribuito. Abbiamo utilizzato la soluzione di risoluzioni di Capodanno di SageMaker JumpStart per mostrare come è possibile utilizzare il SDK Python di SageMaker per costruire una soluzione end-to-end e implementare un’applicazione di classificazione a zero colpi. SageMaker JumpStart offre accesso a centinaia di modelli pre-addestrati e soluzioni per compiti come computer vision, elaborazione del linguaggio naturale, sistemi di raccomandazione e altro ancora. Prova la soluzione da sola e facci sapere cosa ne pensi.