About cookies on this site Our websites require some cookies to function properly (required). In addition, other cookies may be used with your consent to analyze site usage, improve the user experience and for advertising. For more information, please review your options. By visiting our website, you agree to our processing of information as described in IBM’sprivacy statement. To provide a smooth navigation, your cookie preferences will be shared across the IBM web domains listed here.
versione inglese della documentazione
Classificazione del testo con un modello personalizzato di classificazione
Torna alla Classificazione del testo con un modello personalizzato di classificazione
Ultimo aggiornamento: 28 nov 2024
È possibile addestrare i propri modelli per la classificazione del testo utilizzando algoritmi di classificazione avanzati da tre diverse famiglie:
- Apprendimento automatico classico mediante SVM (Support Vector Machines)
- Apprendimento approfondito con CNN (Convolutional Neural Networks)
- Un algoritmo basato su transformer che utilizza un modello di transformer pre - addestrato: modello Slate IBM Foundation
La libreria Watson Natural Language Processing offre anche un classificatore Ensemble facile da utilizzare che combina diversi algoritmi di classificazione e voto a maggioranza.
Gli algoritmi supportano attività a più etichette e a più classi e casi speciali, ad esempio se il documento appartiene a una sola classe (attività a singola etichetta) o attività di classificazione binaria.
Nota:
I modelli di classificazione di addestramento utilizzano molta CPU e memoria. A seconda della dimensione dei tuoi dati di addestramento, l'ambiente potrebbe non essere abbastanza grande per completare la formazione. Se si verificano problemi con il kernel del notebook durante l'addestramento, creare un ambiente notebook personalizzato con una maggiore quantità di CPU e memoria e utilizzarlo per eseguire il notebook. Soprattutto per gli algoritmi basati sui trasformatori, dovresti utilizzare un ambiente basato sulla GPU, se è disponibile per te. Consultare Creazione del proprio template ambiente.
Sezioni argomento:
- Formato dei dati di input per l'addestramento
- Requisiti dei dati di input
- Parole non significative
- Training algoritmi SVM
- Addestramento dell'algoritmo CNN
- Formazione dell'algoritmo del trasformatore utilizzando il modello Slate IBM Foundation
- Formazione di un modello di trasformatore personalizzato utilizzando un modello fornito da Hugging Face
- Formazione di un modello di insieme
- Procedure ottimali per la formazione
- Applicazione del modello ai nuovi dati
- Scegliere l'algoritmo giusto per il tuo caso d'uso
Formato dei dati di input per l'addestramento
I blocchi di classificazione accettano i dati di addestramento nei formati CSV e JSON.
Il formato CSV
Il file CSV non deve contenere alcuna intestazione. Ogni riga nel file CSV rappresenta un record di esempio. Ogni record ha una o più colonne, dove la prima colonna rappresenta il testo e le colonne successive rappresentano le etichette associate a quel testo.
Nota:
- Gli algoritmi SVM e CNN non supportano i dati di addestramento in cui un'istanza non ha etichette. Quindi, se si sta utilizzando l'algoritmo SVM, o l'algoritmo CNN, o un Ensemble che include uno di questi algoritmi, ogni riga CSV deve avere almeno un'etichetta, cioè 2 colonne.
- Gli algoritmi di trasformazione basati su BERT e basati su Slate supportano i dati di addestramento in cui ogni istanza ha 0, 1 o più di un'etichetta.
Example 1,label 1 Example 2,label 1,label 2
Il formato JSON
I dati di addestramento sono rappresentati come un array con più oggetti JSON. Ogni oggetto JSON rappresenta un'istanza di addestramento e deve avere un campo di testo e di etichette. Il testo rappresenta l'esempio di addestramento e le etichette memorizzano le etichette associate all'esempio (0, 1 o più di un'etichetta).
[ { "text": "Example 1", "labels": ["label 1"] }, { "text": "Example 2", "labels": ["label 1", "label 2"] }, { "text": "Example 3", "labels": [] } ]
Nota:
indica un esempio senza etichette. Gli algoritmi SVM e CNN non supportano i dati di addestramento in cui un'istanza non ha etichette. Quindi, se si sta utilizzando l'algoritmo SVM, o l'algoritmo CNN, o un Ensemble che include uno di questi algoritmi, ogni oggetto JSON deve avere almeno un'etichetta."labels": []
- Gli algoritmi di trasformazione basati su BERT e basati su Slate supportano i dati di addestramento in cui ogni istanza ha 0, 1 o più di un'etichetta.
Requisiti dei dati di input
Per gli algoritmi SVM e CNN:
- Numero minimo di etichette univoche richieste: 2
- Numero minimo di esempi di testo richiesti per etichetta: 5
Per gli algoritmi di trasformazione basati su BERT e su Slate:
- Numero minimo di etichette univoche richieste: 1
- Numero minimo di esempi di testo richiesti per etichetta: 5
I dati di allenamento in formato CSV o JSON vengono convertiti in un DataStream prima dell'allenamento. Invece di file di dati di addestramento, è anche possibile passare i flussi di dati direttamente alle funzioni di addestramento dei blocchi di classificazione.
Parole non significative
È possibile fornire le proprie stopword che verranno rimosse durante la pre - elaborazione. Gli input del file di parole non significative sono previsti in formato standard: un singolo file di testo con una frase per riga. Le parole non significative possono essere fornite come un elenco o come un file in un formato standard.
Le parole non significative possono essere utilizzate solo con il classificatore Ensemble.
Addestramento degli algoritmi SVM
SVM è un classificatore della macchina vettore di supporto che può essere addestrato utilizzando previsioni su qualsiasi tipo di input fornito dai blocchi di incorporazione o vettorizzazione come vettori di funzione, ad esempio, da
(Universal Sentence Encoder) e USE
vettorizzatori. Supporta la classificazione di testi multiclasse e multietichetta e produce punteggi di confidenza utilizzando il ridimensionamento Platt.TF-IDF
Per tutte le opzioni disponibili per la configurazione della formazione SVM, immettere:
help(watson_nlp.blocks.classification.svm.SVM.train)
Per eseguire il training degli algoritmi SVM:
Iniziare con i seguenti passi di preelaborazione:
import watson_nlp from watson_nlp.toolkit.classification_utils.train_util import prepare_data_from_json from watson_nlp.blocks.classification.svm import SVM training_data_file = "train_data.json" # Load a Syntax model syntax_model = watson_nlp.load('syntax_izumo_en_stock') # Create datastream from training data train_stream = prepare_data_from_json(training_data_file, syntax_model) syntax_stream, labels_stream = train_stream[0], train_stream[1]
Addestrare il modello di classificazione utilizzando USE embeddings. Per un elenco dei blocchi preaddestrati disponibili, vedere Incorporazione degli USE preaddestrati che sono inclusi .
# download embedding use_embedding_model = watson_nlp.load('embedding_use_en_stock') use_train_stream = use_embedding_model.stream(syntax_stream, doc_embed_style='raw_text') # NOTE: doc_embed_style can be changed to `avg_sent` as well. For more information check the documentation for Embeddings # Or the USE run function API docs use_svm_train_stream = watson_nlp.data_model.DataStream.zip(use_train_stream, labels_stream) # Train SVM using Universal Sentence Encoder (USE) training stream classification_model = SVM.train(use_svm_train_stream)
Addestramento dell'algoritmo CNN
CNN è una semplice architettura di rete convoluzionale, costruita per la classificazione di testi multi - classe e multi - etichetta su testi brevi. Utilizza GloVe incastri. GloVe gli incorporamenti codificano la semantica a livello di parola in uno spazio vettoriale. IL GloVe gli incorporamenti per ciascuna lingua vengono addestrati sul corpus di Wikipedia in quella lingua. Per informazioni sull'utilizzo GloVe incastri, vedi GloVe Incorporamenti.
Per tutte le opzioni disponibili per la configurazione dell'addestramento CNN, immettere:
help(watson_nlp.blocks.classification.cnn.CNN.train)
Per addestrare gli algoritmi CNN:
import watson_nlp
from watson_nlp.toolkit.classification_utils.train_util import prepare_data_from_json
from watson_nlp.blocks.classification.cnn import CNN
training_data_file = "train_data.json"
# Load a Syntax model
syntax_model = watson_nlp.load('syntax_izumo_en_stock')
# Create datastream from training data
train_stream = prepare_data_from_json(training_data_file, syntax_model)
syntax_stream, labels_stream = train_stream[0], train_stream[1]
# Download GloVe embeddings
glove_embedding_model = watson_nlp.load('embedding_glove_en_stock')
# Train CNN
classification_model = CNN.train(watson_nlp.data_model.DataStream.zip(syntax_stream, labels_stream), embedding=glove_embedding_model.embedding)
Addestramento dell'algoritmo del trasformatore utilizzando il modello IBM Slate
L'algoritmo del trasformatore che utilizza uno Slate preaddestrato IBM Il modello Foundation può essere utilizzato per la classificazione di testi multiclasse e multietichetta su testi brevi.
Per tutte le opzioni disponibili per la configurazione dell'addestramento di Transformer, immettere:
help(watson_nlp.blocks.classification.transformer.Transformer.train)
Per un elenco dei modelli Slate disponibili, vedere questa tabella:
Modello | Descrizione |
---|---|
|
Modello generico e multiuso |
|
Modello preaddestrato sui contenuti finanziari |
|
Modello preaddestrato sui contenuti di sicurezza informatica |
|
Modello preaddestrato sui contenuti biomedici |
Per addestrare gli algoritmi Transformer:
import watson_nlp
from watson_nlp.blocks.classification.transformer import Transformer
from watson_nlp.toolkit.classification_utils.train_util import prepare_stream_of_train_records
from watson_nlp import data_model as dm
training_data_file = "train_data.json"
# Create datastream from training data
train_data_stream = dm.DataStream.from_file(training_data_file)
train_record_data_stream = prepare_stream_of_train_records(train_data_stream)
# Load pre-trained slate model
pretrained_model_resource = watson_nlp.load('<pretrained Slate model>')
# Train model - note that Transformer uses Slatea by default
classification_model = Transformer.train(train_data_stream=train_record_data_stream,
pretrained_model_resource=pretrained_model_resource)
Formazione di un modello di trasformatore personalizzato utilizzando un modello fornito da Hugging Face
È possibile addestrare un modello personalizzato basato su trasformatori utilizzando un modello preaddestrato di Hugging Face.
Per utilizzare un modello Hugging Face, specificare il nome del modello come parametro '
nel metodo 'pretrained_model_resource
di 'train
. Accedere a https://huggingface.co/models per copiare il nome del modello.watson_nlp.blocks.classification.transformer.Transformer
Per ottenere un elenco di tutte le opzioni disponibili per configurare un addestramento del trasformatore, immettere questo codice:
help(watson_nlp.blocks.classification.transformer.Transformer.train)
Per informazioni su come addestrare gli algoritmi del trasformatore, fare riferimento a questo esempio di codice:
import watson_nlp
from watson_nlp.blocks.classification.transformer import Transformer
from watson_nlp.toolkit.classification_utils.train_util import prepare_stream_of_train_records
from watson_nlp import data_model as dm
training_data_file = "train_data.json"
# Create datastream from training data
train_data_stream = dm.DataStream.from_file(training_data_file)
train_record_data_stream = prepare_stream_of_train_records(train_data_stream)
# Specify the name of the Hugging Face model
huggingface_model_name = 'xml-roberta-base'
# Train model
classification_model = Transformer.train(train_data_stream=train_record_data_stream,
pretrained_model_resource=huggingface_model_name)
Addestramento di un modello di insieme
Il modello Ensemble è un insieme ponderato di questi tre algoritmi: CNN, SVM con TF-IDF e SVM con USE. Calcola la media ponderata di un insieme di previsioni di classificazione utilizzando i punteggi di confidenza. Il modello ensemble è molto facile da usare.
Il classificatore GenericEnsemble consente all'utente di scegliere tra i tre classificatori di base TFIDF - SVM, USE - SVM e CNN. Per testi che vanno da 50 a 1000 caratteri, l'uso della combinazione di classificatori TFIDF-SVM e USE - SVM spesso produce un buon equilibrio di qualità e prestazioni. Su alcuni documenti medi o lunghi (500-1000 + caratteri), l'aggiunta della CNN all'Ensemble potrebbe aiutare ad aumentare la qualità, ma di solito viene fornito con un significativo impatto sulle prestazioni di runtime (velocità di trasmissione inferiore e maggiore tempo di caricamento del modello).
Per tutte le opzioni disponibili per la configurazione della formazione dell'insieme, immettere:
help(watson_nlp.workflows.classification.GenericEnsemble)
Per addestrare gli algoritmi dell'insieme:
import watson_nlp
from watson_nlp.workflows.classification.generic_ensemble import GenericEnsemble
from watson_nlp.workflows.classification.base_classifier import GloveCNN
from watson_nlp.workflows.classification.base_classifier import TFidfSvm
training_data_file = "train_data.json"
# Syntax model
syntax_model = watson_nlp.load('syntax_izumo_en_stock')
# GloVE Embedding model
glove_embedding_model = watson_nlp.load('embedding_glove_en_stock')
# Train classifier using the manually defined base classifier and manually defined weights¶
classification_model = GenericEnsemble.train(training_data_file,
syntax_model,
base_classifiers_params=[
TFidfSvm.TrainParams(syntax_model=syntax_model),
GloveCNN.TrainParams(syntax_model=syntax_model,
glove_embedding_model=glove_embedding_model,
)],
weights=[2,1])
Modelli di parole di arresto preaddestrati disponibili pronti all'uso
Il modello di testo per l'identificazione delle parole non significative viene utilizzato nell'addestramento del modello dell'insieme di classificazione del documento.
La seguente tabella elenca i modelli di parole non significative preaddestrati e i codici lingua supportati (
sta per codice lingua). Per un elenco dei codici lingua e della lingua corrispondente, consultare Codici lingua.xx
Classe di risorse | Nome modello | Lingue supportate |
---|---|---|
|
|
ar, de, es, en, fr, it, ja, ko |
Migliori pratiche di formazione
Esistono alcuni vincoli sulla qualità e sulla quantità dei dati per garantire che l'addestramento del modello di classificazioni possa essere completato in un periodo di tempo ragionevole e soddisfi anche diversi criteri di prestazione. Questi sono elencati di seguito. Si noti che nessuna è una restrizione rigida. Tuttavia, quanto più si discosta da queste linee guida, tanto maggiore è la possibilità che il modello non si alleni o non sarà soddisfacente.
Quantità dei dati
- Il numero più alto di modelli di classificazione delle classi è stato testato su ~1200.
- La dimensione del testo più adatta per l'addestramento e il test dei dati per la classificazione è di circa 3000 punti di codice. Tuttavia, è possibile elaborare anche testi più grandi, ma le prestazioni di runtime potrebbero essere più lente.
- Il tempo di formazione aumenterà in base al numero di esempi e di etichette.
- Il tempo di inferenza aumenterà in base al numero di etichette.
Qualità dei dati
- La dimensione di ogni campione (ad esempio, il numero di frasi in ogni campione di addestramento) può influire sulla qualità.
- La separazione delle classi è importante. In altre parole, le classi tra i dati di addestramento (e di test) devono essere semanticamente distinguibili l'una dall'altra per evitare errori di classificazione. Poiché gli algoritmi del classificatore in Watson Natural Language Processing si basano su integrazioni di parole, le classi di formazione che contengono esempi di testo con una sovrapposizione semantica eccessiva possono rendere la classificazione di alta qualità computazionalmente intrattabile. Mentre euristica più sofisticata può esistere per valutare la somiglianza semantica tra le classi, si dovrebbe iniziare con un semplice "eye test" di alcuni esempi di ogni classe per discernere se sembrano o meno adeguatamente separati.
- Si consiglia di utilizzare dati bilanciati per l'addestramento. Idealmente dovrebbe esserci un numero grosso modo uguale di esempi da ogni classe nei dati di formazione, altrimenti i classificatori possono essere distorti verso classi con una rappresentazione più ampia nei dati di formazione.
- È meglio evitare le circostanze in cui alcune classi nei dati di formazione sono altamente sottorappresentate rispetto ad altre classi.
Limitazioni e avvertenze:
- Il blocco di classificazione CNN ha una lunghezza di sequenza predefinita di 1000 punti di codice. Questo limite può essere configurato in fase di addestramento modificando il parametro
. Non esiste un limite massimo per questo parametro, ma l'aumento della lunghezza massima della frase influirà sul consumo di CPU e memoria.max_phrase_len
- I blocchi SVM non hanno tale limite di lunghezza della sequenza e possono essere utilizzati con testi più lunghi.
Applicazione del modello ai nuovi dati
Dopo aver preparato il modello su un dataset, applicare il modello ai nuovi dati utilizzando il metodo
, come si farebbe con uno qualsiasi dei blocchi preaddestrati esistenti.run()
Esempio di codice
Per i modelli Ensemble:
# run Ensemble model on new text ensemble_prediction = ensemble_classification_model.run("new input text")
Per i modelli SVM e CNN, ad esempio per CNN:
# run Syntax model first syntax_result = syntax_model.run("new input text") # run CNN model on top of syntax result cnn_prediction = cnn_classification_model.run(syntax_result)
Scegliere l'algoritmo giusto per il tuo caso d'uso
È necessario scegliere l'algoritmo del modello più adatto al proprio caso d'uso.
Quando si sceglie tra SVM, CNN e Transformers, considerare quanto segue:
Piastra basata su trasformatore
- Scegliere quando è richiesta un'elevata qualità e quando sono disponibili risorse di elaborazione più elevate.
CNN
- Scegliere quando sono disponibili dati di dimensioni decenti
- Scegliere se l'incorporazione GloVe è disponibile per la lingua richiesta
- Scegliere se si ha l'opzione tra etichetta singola e etichetta multipla
- La CNN sintonizza le incorporazioni, in modo da poter offrire prestazioni migliori per termini sconosciuti o domini più recenti.
SVM
- Scegliere se è necessario un modello più semplice
- SVM ha il tempo di addestramento e inferenza più veloce
- Scegliere se la dimensione del dataset è piccola
Se si seleziona SVM, è necessario considerare quanto segue quando si sceglie tra le diverse implementazioni di SVM:
- Gli SVM formano i classificatori con più etichette.
- Maggiore è il numero di classi, maggiore è il tempo di formazione.
- TF - IDF:
- Scegli la vettorizzazione TF-IDF con SVM se il dataset è piccolo, ad esempio ha un piccolo numero di classi, un piccolo numero di esempi e una dimensione del testo più breve, ad esempio, frasi contenenti meno frasi.
- TF - IDF con SVM può essere più veloce di altri algoritmi nel blocco di classificazione.
- Scegliere TF-IDF se le incorporazioni per la lingua richiesta non sono disponibili.
- Usa:
- Scegliere USE (Universal Frase Encoder) con SVM se il dataset ha una o più frasi nel testo di input.
- USE può funzionare meglio su insiemi di dati in cui la comprensione del contesto di parole o frasi è importante.
Il modello Ensemble combina più modelli individuali (diversi) per fornire una potenza di previsione superiore. Considerare i seguenti dati chiave per questo tipo di modello:
- Il modello ensemble combina CNN, SVM con TF-IDF e SVM con USE.
- È il modello più semplice da utilizzare.
- Può dare prestazioni migliori rispetto ai singoli algoritmi.
- Funziona per tutti i tipi di dataset. Tuttavia, il tempo di addestramento per dataset di grandi dimensioni (più di 20000 esempi) può essere elevato.
- Un modello di insieme consente di impostare i pesi. Questi pesi decidono in che modo il modello di insieme combina i risultati dei singoli classificatori. Attualmente, la selezione dei pesi è un'euristica e deve essere impostata per tentativi ed errori. I pesi predefiniti forniti nella funzione stessa sono un buon punto di partenza per l'esplorazione.
Argomento principale: Creazione di propri modelli
L'argomento è stato utile?
0/1000