Extraindo o sentimento de destinos com um modelo de transformador customizado....

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

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

Deve-se 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 target_menções . O text representa o texto de exemplo de treinamento e o campo target_menções é uma matriz, que contém uma entrada para cada menção de destino com seu text, locatione sentimento..

Considere usar o Watson Knowledge Studio para permitir que seus especialistas no assunto do domínio anotem facilmente texto e criem dados de treinamento.

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

[
  {
    "text": "Those waiters stare at you your entire meal, just waiting for you to put your fork down and they snatch the plate away in a second.",
    "target_mentions": [
      {
        "text": "waiters",
        "location": {
          "begin": 6,
          "end": 13
        },
        "sentiment": "negative"
      }
    ]
  }
]

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, é possível usar o método de utilitário read_json_to_stream Ele requer o modelo de análise de sintaxe para a linguagem de seus dados de entrada

Código de amostra:

import watson_nlp
from watson_nlp.toolkit.targeted_sentiment.training_data_reader import read_json_to_stream

training_data_file = 'train_data.json'
dev_data_file = 'dev_data.json'

# Load the syntax analysis model for the language of your input data
syntax_model = watson_nlp.load('syntax_izumo_en_stock')

# Prepare train and dev data streams
train_stream = read_json_to_stream(json_path=training_data_file, syntax_model=syntax_model)
dev_stream = read_json_to_stream(json_path=dev_data_file, syntax_model=syntax_model)

Carregando os recursos do modelo pré-treinado

O modelo Slate IBM Foundation pré-treinado precisa ser carregado antes de passá-lo para o algoritmo de treinamento.

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

Para carregar o modelo:

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

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.blocks.targeted_sentiment.SequenceTransformerTSA.train)

O método train criará um novo modelo de bloco de impressão de destino

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

# Train the model
custom_tsa_model = watson_nlp.blocks.targeted_sentiment.SequenceTransformerTSA.train(
    train_stream,
    dev_stream,
    pretrained_model_resource,
    num_train_epochs=5
)

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 Como o modelo customizado criado é um modelo de bloco, é necessário executar análise de sintaxe no texto de entrada e transmitir os resultados para os métodos run() .

Código de amostra:

input_text = 'new input text'

# Run syntax analysis first
syntax_model = watson_nlp.load('syntax_izumo_en_stock')
syntax_analysis = syntax_model.run(input_text, parsers=('token',))

# Apply the new model on top of the syntax predictions
tsa_predictions = custom_tsa_model.run(syntax_analysis)

Armazenando e carregando o modelo

O modelo de impressão de destinos customizados pode ser armazenado como qualquer outro modelo conforme descrito em Salvando e carregando modelos customizados, usando ibm_watson_studio_lib.

Para carregar o modelo de impressão de destinos customizados, etapas adicionais são necessárias::

  1. Assegure-se de que você tenha um token de acesso na página Controle de acesso na guia Gerenciar do seu projeto. Somente os administradores do projeto podem criar tokens de acesso. O token de acesso pode ter permissões de acesso Visualizador ou Editor . Somente os editores podem injetar o token em um bloco de notas.

  2. Inclua o token do projeto no bloco de notas, clicando em Mais> Inserir token do projeto na barra de ação do bloco de notas Em seguida, execute a célula

    Ao executar a célula de código oculta inserida, é criado um objeto wslib que pode ser usado para funções na biblioteca ibm-watson-studio-lib Para obter informações sobre as funções ibm-watson-studio-lib disponíveis, consulte Usando ibm-watson-studio-lib para Python.

  3. Faça download e extraia o modelo para seu ambiente de tempo de execução local:

    import zipfile
    model_zip = 'custom_TSA_model_file'
    model_folder = 'custom_TSA'
    wslib.download_file('custom_TSA_model', file_name=model_zip)
    
    with zipfile.ZipFile(model_zip, 'r') as zip_ref:
      zip_ref.extractall(model_folder)
    
  4. Carregue o modelo da pasta extraída:

    custom_TSA_model = watson_nlp.load(model_folder)