Extraindo sentimento com um modelo de transformador customizado

É possível treinar seus próprios modelos para extração de sentimento com base no modelo Slate IBM Foundation. Esse modelo pré-treinado pode ser ajustado para seu caso de uso treinando-o em seus dados de entrada específicos.

Para obter uma lista de modelos Slate disponíveis, consulte esta tabela:

Lista de modelos Slate disponíveis e suas descrições
Modelo Descrição
pretrained-model_slate.153m.distilled_many_transformer_multilingual_uncased Modelo genérico e multifuncional
pretrained-model_slate.125m.finance_many_transformer_en_cased Modelo pré-treinado em conteúdo financeiro
pretrained-model_slate.110m.cybersecurity_many_transformer_en_uncased Modelo pré-treinado em conteúdo de segurança cibernética
pretrained-model_slate.125m.biomedical_many_transformer_en_cased Modelo pré-treinado em conteúdo biomédico
Nota: os modelos de transformador de treinamento são de CPU e memória intensiva. Dependendo do tamanho de seus dados de treinamento, o ambiente pode não ser grande o suficiente para concluir o treinamento Se ocorrerem problemas com o kernel de bloco de notas durante o treinamento, crie um ambiente do bloco de notas customizado com uma quantia maior de CPU e memória e use isso para executar seu bloco de notas. Use um ambiente baseado em GPU para treinamento e também tempo de inferência, se estiver disponível para você. Consulte Criando seu próprio modelo de ambiente..

Formato de dados de entrada para treinamento

É necessário fornecer um conjunto de dados de treinamento e desenvolvimento para a função de treinamento. Os dados de desenvolvimento geralmente estão em torno de 10% dos dados de treinamento Cada amostra de treinamento ou de desenvolvimento é representada como um objeto JSON Ele deve ter um campo text e labels . O text representa o texto de exemplo de treinamento e o campo labels é uma matriz, que contém exatamente um rótulo de positivo, neutroou negativo

A seguir está um exemplo de uma matriz com dados de treinamento de amostra:

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

Os conjuntos de dados de treinamento e desenvolvimento são criados como fluxos de dados de matrizes de objetos JSON. Para criar os fluxos de dados, você pode usar o método do utilitário 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)

Carregando os recursos do modelo pré-treinado

O modelo do Slate IBM Foundation pré-treinado precisa ser carregado antes de passar para o algoritmo de treinamento. Além disso, é necessário carregar os modelos de análise de sintaxe para os idiomas usados em seus textos de entrada.

Para carregar o modelo:

# 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]

Treinando o modelo

Para todas as opções que estão disponíveis para configurar o treinamento do transformador de sentimento, insira:

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

O método train_transformer cria um modelo de fluxo de trabalho, que executa automaticamente a análise de sintaxe e a classificação de sentimentos treinados Em uma etapa subsequente, ative a detecção de idioma para que o modelo de fluxo de trabalho possa ser executado no texto de entrada sem nenhuma informação de pré-requisito.

A seguir há uma chamada de amostra usando os dados de entrada e modelo pré-treinado da seção anterior (Treinando o modelo):

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)

Aplicando o modelo em novos dados

Depois de treinar o modelo em um conjunto de dados, aplique o modelo em novos dados usando o método run() , como você usaria em qualquer um dos blocos pré-treinados existentes

Código de amostra:

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