L'identificazione del testo parafrasato ha un valore commerciale in molti casi d'uso. Ad esempio, identificando le parafrasi delle frasi, un sistema di riepilogo del testo potrebbe rimuovere le informazioni ridondanti. Un'altra applicazione è identificare i documenti plagiati. In questo post, perfezioniamo a Abbracciare il viso trasformatore acceso Amazon Sage Maker per identificare coppie di frasi parafrasate in pochi passaggi.
Un modello veramente robusto può identificare il testo parafrasato quando la lingua utilizzata può essere completamente diversa e anche identificare le differenze quando la lingua utilizzata ha un'elevata sovrapposizione lessicale. In questo post, ci concentriamo su quest'ultimo aspetto. Nello specifico, esaminiamo se possiamo addestrare un modello in grado di identificare la differenza tra due frasi che hanno un'elevata sovrapposizione lessicale e significati molto diversi o opposti. Ad esempio, le seguenti frasi hanno le stesse identiche parole ma significati opposti:
- Ho preso un volo da New York a Parigi
- Ho preso un volo da Parigi a New York
Panoramica della soluzione
Ti guidiamo attraverso i seguenti passaggi di alto livello:
- Prepara l'ambiente.
- Prepara i dati.
- Tokenizzare il set di dati.
- Metti a punto il modello.
- Distribuire il modello ed eseguire l'inferenza.
- Valuta le prestazioni del modello.
Se si desidera saltare la configurazione dell'ambiente, è possibile utilizzare il seguente taccuino GitHub ed esegui il codice in SageMaker.
Hugging Face e AWS hanno annunciato una partnership all'inizio del 2022 che rende ancora più semplice addestrare i modelli Hugging Face su SageMaker. Questa funzionalità è disponibile attraverso lo sviluppo di Hugging Face Contenitori di apprendimento approfondito (DLC) di AWS. Questi contenitori includono Hugging Face Transformers, Tokenizer e la libreria di set di dati, che ci consente di utilizzare queste risorse per lavori di formazione e di inferenza. Per un elenco delle immagini DLC disponibili, vedere Immagini disponibili dei contenitori di apprendimento profondo. Sono mantenuti e regolarmente aggiornati con patch di sicurezza. Puoi trovare molti esempi di come addestrare i modelli Hugging Face con questi DLC e il Abbracciare Face Python SDK nel seguente Repository GitHub.
Il set di dati PAWS
Rendendosi conto della mancanza di set di dati di coppie di frasi efficienti che mostrano un'elevata sovrapposizione lessicale senza essere parafrasi, l'originale ZAMPE il set di dati pubblicato nel 2019 mirava a fornire alla comunità di elaborazione del linguaggio naturale (NLP) una nuova risorsa per la formazione e la valutazione dei modelli di rilevamento delle parafrasi. Le coppie di frasi PAWS vengono generate in due passaggi utilizzando wikipedia e la Coppie di domande Quora (QQP) set di dati. Un modello linguistico scambia prima le parole in una coppia di frasi con lo stesso Bag of Words (BOW) per generare una coppia di frasi. Un passaggio di traduzione all'indietro genera quindi parafrasi con un'elevata sovrapposizione BOW ma utilizzando un ordine delle parole diverso. Il set di dati PAWS finale contiene un totale di 108,000 coppie con etichetta umana e 656,000 con etichetta rumorosa.
In questo post, usiamo l'estensione PAWS-Wiki Labeled (finale) set di dati da Hugging Face. Hugging Face ha già eseguito la suddivisione dei dati per noi, che si traduce in 49,000 coppie di frasi nel set di dati di addestramento e 8,000 coppie di frasi ciascuna per i set di dati di convalida e test. Nell'esempio seguente sono mostrati due esempi di coppie di frasi dal set di dati di addestramento. Un'etichetta di 1 indica che le due frasi sono parafrasi l'una dell'altra.
Frase 1 | Frase 2 | Discografica |
Sebbene intercambiabili, i pezzi della carrozzeria delle 2 vetture non sono simili. | Sebbene simili, le parti della carrozzeria non sono intercambiabili sulle 2 vetture. | 0 |
Katz è nato in Svezia nel 1947 e si è trasferito a New York all'età di 1 anno. | Katz è nato nel 1947 in Svezia e si è trasferito a New York all'età di uno. | 1 |
Prerequisiti
È necessario completare i seguenti prerequisiti:
- Registrati per un account AWS se non ne hai uno. Per ulteriori informazioni, vedere Configura i prerequisiti di Amazon SageMaker.
- Inizia a usare Istanze di notebook SageMaker.
- Imposta il diritto Gestione dell'identità e dell'accesso di AWS (IAM) autorizzazioni. Per ulteriori informazioni, vedere Ruoli di SageMaker.
Crea l'ambiente
Prima di iniziare a esaminare e preparare i nostri dati per la messa a punto del modello, è necessario configurare il nostro ambiente. Iniziamo creando un'istanza notebook SageMaker. Scegli una regione AWS nel tuo account AWS e segui le istruzioni per creare un'istanza notebook SageMaker. L'avvio dell'istanza notebook potrebbe richiedere alcuni minuti.
Quando l'istanza notebook è in esecuzione, scegli conda_pytorch_p38
come tipo di kernel. Per utilizzare il set di dati Hugging Face, dobbiamo prima installare e importare la libreria Hugging Face:
Quindi, stabiliamo una sessione di SageMaker. Usiamo l'impostazione predefinita Servizio di archiviazione semplice Amazon Bucket (Amazon S3) associato alla sessione SageMaker per archiviare il set di dati PAWS e gli artefatti del modello:
Prepara i dati
Possiamo caricare la versione Hugging Face del set di dati PAWS con il suo load_dataset()
comando. Questa chiamata scarica e importa lo script di elaborazione di PAWS Python dal repository GitHub di Hugging Face, che quindi scarica il set di dati PAWS dall'URL originale archiviato nello script e memorizza nella cache i dati come una tabella Arrow sull'unità. Vedere il codice seguente:
Prima di iniziare a mettere a punto il nostro modello BERT pre-addestrato, diamo un'occhiata alla distribuzione della nostra classe target. Per il nostro caso d'uso, il set di dati PAWS ha etichette binarie (0 indica che la coppia di frasi non è una parafrasi e 1 indica che lo è). Creiamo un istogramma per visualizzare la distribuzione delle classi, come mostrato nel codice seguente. Vediamo che c'è un leggero problema di squilibrio di classe nel nostro set di addestramento (56% di campioni negativi contro il 44% di campioni positivi). Tuttavia, lo squilibrio è sufficientemente piccolo da evitare l'impiego di tecniche di mitigazione dello squilibrio di classe.
Tokenizzare il set di dati
Prima di poter iniziare la messa a punto, dobbiamo tokenizzare il nostro set di dati. Come punto di partenza, diciamo di voler mettere a punto e valutare il roberta-base
trasformatore. Abbiamo selezionato roberta-base
perché è un trasformatore per uso generico che è stato pre-addestrato su un ampio corpus di dati inglesi e ha spesso mostrato prestazioni elevate su una varietà di attività NLP. Il modello è stato originariamente introdotto nel giornale RoBERTa: un approccio di pre-addestramento BERT fortemente ottimizzato.
Eseguiamo la tokenizzazione sulle frasi con a roberta-base
tokenizer di Hugging Face, che utilizza la codifica a coppia di byte a livello di byte per dividere il documento in token. Per maggiori dettagli sul tokenizzatore RoBERTa, fare riferimento a Roberta Tokenizer. Poiché i nostri input sono coppie di frasi, dobbiamo tokenizzare entrambe le frasi contemporaneamente. Poiché la maggior parte dei modelli BERT richiede che l'input abbia una lunghezza di input tokenizzata fissa, impostiamo i seguenti parametri: max_len=128
ed truncation=True
. Vedi il seguente codice:
L'ultimo passaggio di preelaborazione per la messa a punto del nostro modello BERT consiste nel convertire il treno tokenizzato e i set di dati di convalida in tensori PyTorch e caricarli nel nostro bucket S3:
Metti a punto il modello
Ora che abbiamo finito con la preparazione dei dati, siamo pronti per mettere a punto il nostro pre-addestrato roberta-base
modello sul compito di identificazione della parafrasi. Possiamo utilizzare la classe SageMaker Hugging Face Estimator per avviare il processo di messa a punto in due passaggi. Il primo passaggio consiste nello specificare gli iperparametri di addestramento e le definizioni delle metriche. La variabile delle definizioni delle metriche indica a Hugging Face Estimator quali tipi di metriche estrarre dai registri di addestramento del modello. In questo caso, siamo principalmente interessati all'estrazione delle metriche del set di convalida in ogni epoca di addestramento.
Il secondo passo è creare un'istanza di Hugging Face Estimator e avviare il processo di messa a punto con il .fit()
Metodo:
Il processo di ottimizzazione richiede circa 30 minuti utilizzando gli iperparametri specificati.
Distribuire il modello ed eseguire l'inferenza
SageMaker offre più opzioni di distribuzione a seconda del caso d'uso. Per gli endpoint persistenti in tempo reale che effettuano una previsione alla volta, si consiglia di utilizzare SageMaker servizi di hosting in tempo reale. Se disponi di carichi di lavoro con periodi di inattività tra gli scatti di traffico e che possono tollerare partenze a freddo, ti consigliamo di utilizzare Inferenza senza server. Gli endpoint serverless avviano automaticamente le risorse di calcolo e le ridimensionano in base al traffico, eliminando la necessità di scegliere i tipi di istanza o di gestire le policy di dimensionamento. Dimostriamo come distribuire il nostro modello Hugging Face ottimizzato sia su un endpoint di inferenza in tempo reale che su un endpoint di inferenza serverless.
Distribuisci su un endpoint di inferenza in tempo reale
È possibile distribuire un oggetto di addestramento sull'hosting di inferenza in tempo reale all'interno di SageMaker utilizzando il file .deploy()
metodo. Per un elenco completo dei parametri accettati, fare riferimento a Modello di faccia che abbraccia. Per iniziare, distribuiamo il modello su un'istanza, passando i seguenti parametri: initial_instance_count
, instance_type
e endpoint_name
. Vedi il seguente codice:
Il modello impiega alcuni minuti per la distribuzione. Dopo che il modello è stato distribuito, possiamo inviare record di esempio dal set di dati di test invisibile all'endpoint per l'inferenza.
Distribuire a un endpoint di inferenza serverless
Per distribuire il nostro oggetto di addestramento su un endpoint serverless, dobbiamo prima specificare un file di configurazione serverless con memory_size_in_mb
ed max_concurrency
argomenti:
memory_size_in_mb
definisce la dimensione totale della RAM dell'endpoint serverless; la dimensione minima della RAM è 1024 MB (1 GB) e può scalare fino a 6144 MB (6 GB). In generale, dovresti mirare a scegliere una dimensione della memoria che sia almeno grande quanto la dimensione del tuo modello. max_concurrency
definisce la quota per quante chiamate simultanee possono essere elaborate contemporaneamente (fino a 50 chiamate simultanee) per un singolo endpoint.
Dobbiamo anche fornire l'URI dell'immagine di inferenza Hugging Face, che puoi recuperare usando il seguente codice:
Ora che abbiamo il file di configurazione serverless, possiamo creare un endpoint serverless allo stesso modo del nostro endpoint di inferenza in tempo reale, utilizzando il .deploy()
Metodo:
L'endpoint dovrebbe essere creato in pochi minuti.
Eseguire l'inferenza del modello
Per fare previsioni, dobbiamo creare la coppia di frasi aggiungendo il [CLS]
ed [SEP]
token speciali e successivamente inviare l'input agli endpoint del modello. La sintassi per l'inferenza in tempo reale e l'inferenza serverless è la stessa:
Negli esempi seguenti, possiamo vedere che il modello è in grado di classificare correttamente se la coppia di frasi di input contiene frasi parafrasate.
Quello che segue è un esempio di inferenza in tempo reale.
Quello che segue è un esempio di inferenza serverless.
Valuta le prestazioni del modello
Per valutare il modello, espandiamo il codice precedente e inviamo tutti gli 8,000 record di test non visti all'endpoint in tempo reale:
Successivamente, possiamo creare un rapporto di classificazione utilizzando le previsioni estratte:
Otteniamo i seguenti punteggi dei test.
Possiamo osservare che roberta-base
ha un punteggio F1 macro-medio combinato del 92% e si comporta leggermente meglio nel rilevare frasi che sono parafrasi. Il roberta-base
modello funziona bene, ma è buona norma calcolare le prestazioni del modello utilizzando almeno un altro modello.
La tabella seguente confronta roberta-base
risultati delle prestazioni sullo stesso test impostato contro un altro trasformatore messo a punto chiamato paraphrase-mpnet-base-v2
, un trasformatore di frasi pre-addestrato specificamente per il compito di identificazione della parafrasi. Entrambi i modelli sono stati addestrati su un'istanza ml.p3.8xlarge.
I risultati mostrano che roberta-base
ha un punteggio F1 superiore dell'1% con tempi di formazione e di inferenza molto simili utilizzando l'hosting di inferenza in tempo reale su SageMaker. La differenza di prestazioni tra i modelli è relativamente piccola, tuttavia, roberta-base
è in definitiva il vincitore poiché ha metriche delle prestazioni leggermente migliori e tempi di allenamento e inferenza quasi identici.
Precisione | Richiamo | Punteggio F1 | Tempo di formazione (fatturabile) | Tempo di inferenza (set di test completo) | |
roberta-base | 0.92 | 0.93 | 0.92 | 18 minuti | 2 minuti |
parafrasi-mpnet- base-v2 |
0.92 | 0.91 | 0.91 | 17 minuti | 2 minuti |
ripulire
Quando hai finito di utilizzare gli endpoint del modello, puoi eliminarli per evitare di incorrere in addebiti futuri:
Conclusione
In questo post, abbiamo discusso di come costruire rapidamente un modello di identificazione della parafrasi utilizzando i trasformatori Hugging Face su SageMaker. Abbiamo messo a punto due trasformatori pre-addestrati, roberta-base
ed paraphrase-mpnet-base-v2
, utilizzando il set di dati PAWS (che contiene coppie di frasi con un'elevata sovrapposizione lessicale). Abbiamo dimostrato e discusso i vantaggi dell'inferenza in tempo reale rispetto alla distribuzione dell'inferenza serverless, essendo quest'ultima una nuova funzionalità che mira a carichi di lavoro elevati ed elimina la necessità di gestire i criteri di scalabilità. In un test non visto impostato con 8,000 record, abbiamo dimostrato che entrambi i modelli hanno ottenuto un punteggio F1 superiore al 90%.
Per espandere questa soluzione, considerare quanto segue:
- Prova a mettere a punto il tuo set di dati personalizzato. Se non disponi di etichette di addestramento sufficienti, puoi valutare le prestazioni di un modello ottimizzato come quello illustrato in questo post su un set di dati di test personalizzato.
- Integra questo modello perfezionato in un'applicazione a valle che richiede informazioni sul fatto che due frasi (o blocchi di testo) siano parafrasi l'una dell'altra.
Felice costruzione!
Informazioni sugli autori
Bala Krishnamoorthy è un Data Scientist con AWS Professional Services, dove si diverte ad applicare il machine learning per risolvere i problemi aziendali dei clienti. È specializzato in casi d'uso di elaborazione del linguaggio naturale e ha lavorato con clienti in settori quali software, finanza e assistenza sanitaria. Nel tempo libero, gli piace provare nuovo cibo, guardare commedie e documentari, allenarsi a Orange Theory e stare in acqua (paddle boarding, snorkeling e, si spera, immersioni presto).
Ivan Cui è un Data Scientist presso AWS Professional Services, dove aiuta i clienti a creare e distribuire soluzioni utilizzando il machine learning su AWS. Ha lavorato con clienti in diversi settori, tra cui software, finanza, farmaceutica e sanità. Nel suo tempo libero, ama leggere, passare il tempo con la sua famiglia e massimizzare il suo portafoglio azionario.
- Coinsmart. Il miglior scambio di bitcoin e criptovalute d'Europa.
- Platoblockchain. Web3 Metaverse Intelligence. Conoscenza amplificata. ACCESSO LIBERO.
- Criptofalco. Radar Altcoin. Prova gratuita.
- Fonte: https://aws.amazon.com/blogs/machine-learning/identify-paraphrased-text-with-hugging-face-on-amazon-sagemaker/
- '
- "
- 000
- 10
- 100
- 2019
- 2022
- 84
- Chi siamo
- accesso
- Il mio account
- raggiunto
- operanti in
- Tutti
- già
- Amazon
- ha annunciato
- Un altro
- Applicazioni
- AMMISSIONE
- circa
- argomenti
- disponibile
- AWS
- essendo
- vantaggi
- stile di vita
- sistema
- costruire
- affari
- chiamata
- capace
- auto
- casi
- oneri
- Scegli
- Città
- classe
- classificazione
- codice
- Colonna
- combinato
- comunità
- completamente
- Calcolare
- fiducia
- Tecnologie Container
- contiene
- potuto
- creare
- creato
- costume
- cliente
- Clienti
- dati
- scienziato di dati
- dimostrare
- dimostrato
- Dipendente
- schierare
- schierato
- deployment
- dettagli
- rivelazione
- Mercato
- diverso
- distribuzione
- documentari
- documenti
- download
- guidare
- efficiente
- endpoint
- Inglese
- Ambiente
- stabilire
- valutare
- esempio
- mostra
- Espandere
- Faccia
- famiglia
- caratteristica
- finanziare
- Nome
- volo
- Focus
- seguire
- i seguenti
- cibo
- Gratis
- pieno
- function
- funzionalità
- futuro
- scopo generale
- generalmente
- generare
- GitHub
- buono
- maggiore
- assistenza sanitaria
- altezza
- aiuta
- qui
- Alta
- superiore
- di hosting
- Come
- Tutorial
- HTTPS
- Identificazione
- identificare
- identificazione
- Identità
- Immagine
- includere
- Compreso
- industrie
- informazioni
- ingresso
- install
- interessato
- problema
- IT
- Offerte di lavoro
- per il tuo brand
- Lingua
- grandi
- lanciare
- apprendimento
- Biblioteca
- Lista
- caricare
- macchina
- machine learning
- FA
- gestire
- Memorie
- Metrica
- ML
- modello
- modelli
- Scopri di più
- maggior parte
- multiplo
- Naturale
- negativo.
- New York
- New York City
- taccuino
- Offerte
- ottimizzati
- Opzioni
- minimo
- Altro
- proprio
- Carta
- Parigi
- Partnership
- Di passaggio
- Patch
- performance
- periodi
- Pharmaceutical
- punto
- Termini e Condizioni
- lavori
- positivo
- pratica
- predizione
- Previsioni
- problemi
- processi
- lavorazione
- professionale
- fornire
- domanda
- quora
- RAM
- rand
- Lettura
- tempo reale
- raccomandare
- record
- rilasciato
- rapporto
- deposito
- richiedere
- risorsa
- Risorse
- Risultati
- ritorno
- Correre
- running
- Scala
- scala
- Scienziato
- problemi di
- selezionato
- serverless
- Servizi
- set
- regolazione
- simile
- Un'espansione
- Taglia
- piccole
- Software
- solido
- soluzione
- Soluzioni
- RISOLVERE
- la nostra speciale
- specializzata
- in particolare
- Spendere
- Spin
- dividere
- inizia a
- iniziato
- inizio
- azione
- conservazione
- Tornare al suo account
- Successivamente
- fornire
- Svezia
- sistema
- Target
- task
- tecniche
- dice
- test
- Attraverso
- tempo
- tokenizzazione
- token
- Tokens
- top
- torcia
- traffico
- Training
- Traduzione
- us
- uso
- convalida
- APPREZZIAMO
- varietà
- Visualizza
- Water
- Che
- se
- wikipedia
- entro
- senza
- parole
- lavorato
- lavoro
- risolvendo