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:
| 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 |
- Formato de dados de entrada para treinamento
- Carregando os recursos do modelo pré-treinado
- Treinando o modelo
- Aplicando o modelo em novos dados
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)