Torna alla versione inglese della documentazione

Estrazione delle opinioni con un modello di trasformatore personalizzato

Ultimo aggiornamento: 07 nov 2024
Estrazione delle opinioni con un modello di trasformatore personalizzato

Puoi addestrare i tuoi propri modelli per l'estrazione delle opinioni in base al modello Slate IBM Foundation. Questo modello preaddestrato può essere ottimizzato per il tuo caso di utilizzo addestrandolo sui tuoi specifici dati di input.

Per un elenco dei modelli Slate disponibili, vedere questa tabella:

Elenco dei modelli Slate disponibili e relative descrizioni
Modello Descrizione
pretrained-model_slate.153m.distilled_many_transformer_multilingual_uncased Modello generico e multiuso
pretrained-model_slate.125m.finance_many_transformer_en_cased Modello preaddestrato sui contenuti finanziari
pretrained-model_slate.110m.cybersecurity_many_transformer_en_uncased Modello preaddestrato sui contenuti di sicurezza informatica
pretrained-model_slate.125m.biomedical_many_transformer_en_cased Modello preaddestrato sui contenuti biomedici
Nota: il training dei modelli di trasformatore richiede 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. Utilizzare un ambiente basato su GPU per l'addestramento e il tempo di inferenza, se disponibile. Consultare Creazione del proprio template ambiente.

Formato dei dati di input per l'addestramento

È necessario fornire una serie di dati di formazione e sviluppo alla funzione di formazione. I dati di sviluppo sono di solito circa il 10% dei dati di formazione. Ogni esempio di addestramento o sviluppo è rappresentato come un oggetto JSON. Deve avere un testo e un campo etichette . Il testo rappresenta il testo di esempio di addestramento e il campo etichette è un array, che contiene esattamente un'etichetta di positivo, neutroo negativo.

Di seguito è riportato un esempio di array con dati di addestramento di esempio:

  [
      {
      "text": "I am happy",
      "labels": ["positive"]
      },
      {
      "text": "I am sad",
      "labels": ["negative"]
      },
      {
      "text": "The sky is blue",
      "labels": ["neutral"]
      }
  ]

I dataset di formazione e sviluppo vengono creati come flussi di dati da array di oggetti JSON. Per creare i flussi di dati, è possibile utilizzare il metodo di utilità prepare_data_from_json:

import watson_nlp
from watson_nlp.toolkit.sentiment_analysis_utils.training import train_util as utils

training_data_file = "train_data.json"
dev_data_file = "dev_data.json"

train_stream = utils.prepare_data_from_json(training_data_file)
dev_stream = utils.prepare_data_from_json(dev_data_file)

Caricamento delle risorse del modello preaddestrate

Il modello Slate IBM Foundation preaddestrato deve essere caricato prima di passare all'algoritmo di addestramento. Inoltre, è necessario caricare i modelli di analisi della sintassi per i linguaggi utilizzati nei testi di input.

Per caricare il modello:

# Load the pretrained Slate IBM Foundation model
pretrained_model_resource = watson_nlp.load('<pretrained Slate model>')

# Download relevant syntax analysis models
syntax_model_en = watson_nlp.load('syntax_izumo_en_stock')
syntax_model_de = watson_nlp.load('syntax_izumo_de_stock')

# Create a list of all syntax analysis models
syntax_models = [syntax_model_en, syntax_model_de]

Addestramento del modello

Per tutte le opzioni disponibili per la configurazione dell'addestramento di sentiment transformer, immettere:

help(watson_nlp.workflows.sentiment.AggregatedSentiment.train_transformer)

Il metodo train_transformer crea un modello di flusso di lavoro, che esegue automaticamente l'analisi della sintassi e la classificazione delle opinioni formate. In una fase successiva, abilitare il rilevamento della lingua in modo che il modello di flusso di lavoro possa essere eseguito sul testo di input senza alcuna informazione prerequisita.

La seguente è una chiamata di esempio che utilizza i dati di input e il modello preaddestrato dalla sezione precedente (addestramento del modello):

from watson_nlp.workflows.sentiment import AggregatedSentiment

sentiment_model = AggregatedSentiment.train_transformer(
          train_data_stream = train_stream,
          dev_data_stream = dev_stream,
          syntax_model=syntax_models,
         	pretrained_model_resource=pretrained_model_resource,
          label_list=['negative', 'neutral', 'positive'],
          learning_rate=2e-5,
          num_train_epochs=10,
          combine_approach="NON_NEUTRAL_MEAN",
          keep_model_artifacts=True
        )
lang_detect_model = watson_nlp.load('lang-detect_izumo_multi_stock')

sentiment_model.enable_lang_detect(lang_detect_model)

Applicazione del modello ai nuovi dati

Dopo aver addestrato il modello su un dataset, applica il modello ai nuovi dati utilizzando il metodo run() , come si utilizzerebbe su uno qualsiasi dei blocchi preaddestrati esistenti.

Codice di esempio:

input_text = 'new input text'
sentiment_predictions = sentiment_model.run(input_text)

Argomento principale: Creazione di propri modelli