0 / 0
Volver a la versión inglesa de la documentación
Clasificación de texto con un modelo de clasificación personalizado
Última actualización: 28 nov 2024
Clasificación de texto con un modelo de clasificación personalizado

Puede entrenar sus propios modelos para la clasificación de texto utilizando potentes algoritmos de clasificación de tres familias diferentes:

  • Aprendizaje automático clásico que utiliza SVM (máquinas de vectores de soporte)
  • Aprendizaje profundo que utiliza CNN (Convolutional Neural Networks)
  • Un algoritmo basado en transformadores que utiliza un modelo de transformador preentrenado: Modelo Slate IBM Foundation

La biblioteca de Watson Natural Language Processing también ofrece un clasificador de conjunto fácil de usar que combina diferentes algoritmos de clasificación y votación por mayoría.

Los algoritmos dan soporte a tareas de varias etiquetas y varias clases y casos especiales, como si el documento pertenece a una sola clase (tarea de una sola etiqueta) o a tareas de clasificación binarias.

Nota:

El entrenamiento de los modelos de clasificación requiere un uso intensivo de CPU y memoria. Dependiendo del tamaño de sus datos de entrenamiento, el entorno podría no ser lo suficientemente grande como para completar el entrenamiento. Si experimenta problemas con el kernel del cuaderno durante el entrenamiento, cree un entorno de cuaderno personalizado con una cantidad mayor de CPU y memoria y utilícelo para ejecutar el cuaderno. Especialmente para los algoritmos basados en transformadores, deberías utilizar un entorno basado en GPU, si lo tienes disponible. Consulte Creación de su propia plantilla de entorno.

Secciones de temas:

Formato de datos de entrada para el entrenamiento

Los bloques de clasificación aceptan datos de entrenamiento en formatos CSV y JSON.

  • El formato CSV

    El archivo CSV no debe contener ninguna cabecera. Cada fila del archivo CSV representa un registro de ejemplo. Cada registro tiene una o más columnas, donde la primera columna representa el texto y las columnas posteriores representan las etiquetas asociadas a dicho texto.

    Nota:

    • Los algoritmos SVM y CNN no dan soporte a datos de entrenamiento en los que una instancia no tiene etiquetas. Por lo tanto, si está utilizando el algoritmo SVM, o el algoritmo de CNN, o un Conjunto que incluye uno de estos algoritmos, cada fila CSV debe tener al menos una etiqueta, es decir, 2 columnas.
    • Los algoritmos Transformador basado en BERT y Transformador basado en pizarra admiten datos de entrenamiento en los que cada instancia tiene 0, 1 o más de una etiqueta.
    Example 1,label 1
    Example 2,label 1,label 2
    
  • El formato JSON

    Los datos de entrenamiento se representan como una matriz con varios objetos JSON. Cada objeto JSON representa una instancia de entrenamiento y debe tener un campo de texto y de etiquetas. El texto representa el ejemplo de entrenamiento y las etiquetas almacenan las etiquetas asociadas con el ejemplo (0, 1 o más de una etiqueta).

    [
        {
        "text": "Example 1",
        "labels": ["label 1"]
        },
        {
        "text": "Example 2",
        "labels": ["label 1", "label 2"]
        },
        {
        "text": "Example 3",
        "labels": []
        }
    ]
    

    Nota:

    • "labels": [] denota un ejemplo sin etiquetas. Los algoritmos SVM y CNN no dan soporte a datos de entrenamiento en los que una instancia no tiene etiquetas. Por lo tanto, si está utilizando el algoritmo SVM, o el algoritmo de CNN, o un Conjunto que incluye uno de estos algoritmos, cada objeto JSON debe tener al menos una etiqueta.
    • Los algoritmos Transformador basado en BERT y Transformador basado en pizarra admiten datos de entrenamiento en los que cada instancia tiene 0, 1 o más de una etiqueta.

Requisitos de datos de entrada

Para algoritmos SVM y CNN:

  • Número mínimo de etiquetas exclusivas necesarias: 2
  • Número mínimo de ejemplos de texto necesarios por etiqueta: 5

Para los algoritmos Transformador basado en BERT y Transformador basado en pizarra:

  • Número mínimo de etiquetas exclusivas necesarias: 1
  • Número mínimo de ejemplos de texto necesarios por etiqueta: 5

Los datos de entrenamiento en formato CSV o JSON se convierten en un DataStream antes del entrenamiento. En lugar de entrenar archivos de datos, también puede pasar secuencias de datos directamente a las funciones de entrenamiento de los bloques de clasificación.

Palabras vacías

Puede proporcionar sus propias palabras vacías que se eliminarán durante el preproceso. Las entradas de archivo de palabras vacías se esperan en un formato estándar: un único archivo de texto con una frase por línea. Las palabras vacías se pueden proporcionar como una lista o como un archivo en un formato estándar.

Las palabras vacías se pueden utilizar sólo con el clasificador de conjunto.

Entrenamiento de algoritmos SVM

SVM es un clasificador de máquina de vector de soporte que se puede entrenar utilizando predicciones en cualquier tipo de entrada proporcionada por los bloques de inclusión o vectorización como vectores de características, por ejemplo, mediante inclusiones de USE (Universal Sentence Encoder) y vectorizadores de TF-IDF. Admite la clasificación de texto multiclase y multietiqueta y genera puntuaciones de confianza utilizando la escala de Platt.

Para todas las opciones que están disponibles para configurar el entrenamiento de SVM, entre:

help(watson_nlp.blocks.classification.svm.SVM.train)

Para entrenar algoritmos SVM:

  1. Empiece con estos pasos de preproceso:

    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]
    
  2. Entrene el modelo de clasificación utilizando inclusiones USE. Consulte las incrustaciones de USE preformadas que se incluyen en para obtener una lista de los bloques preformados disponibles.

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

Entrenamiento del algoritmo CNN

CNN es una arquitectura de red convolucional simple, diseñada para la clasificación de texto de múltiples clases y múltiples etiquetas en textos cortos. Utiliza inclusiones de GloVe. Las inclusiones de GloVe codifican la semántica de nivel de palabra en un espacio vectorial. Las inclusiones de GloVe para cada idioma están entrenados en el corpus de Wikipedia en ese idioma. Para obtener información sobre el uso de incrustaciones de " GloVe ", consulte " GloVe ' Incrustaciones.

Para todas las opciones que están disponibles para configurar el entrenamiento de CNN, entre:

help(watson_nlp.blocks.classification.cnn.CNN.train)

Para entrenar algoritmos 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)

Entrenamiento del algoritmo de transformación mediante el modelo IBM Slate

El algoritmo transformador que utiliza un modelo preentrenado de Slate IBM Foundation puede utilizarse para la clasificación de texto multiclase y multietiqueta en textos cortos.

Para conocer todas las opciones disponibles para configurar la formación Transformer, introduzca:

help(watson_nlp.blocks.classification.transformer.Transformer.train)

Para ver una lista de los modelos de pizarra disponibles, consulte esta tabla:

Lista de modelos de pizarra disponibles y sus descripciones
Modelo Descripción
pretrained-model_slate.153m.distilled_many_transformer_multilingual_uncased Modelo genérico polivalente
pretrained-model_slate.125m.finance_many_transformer_en_cased Modelo preentrenado en contenidos financieros
pretrained-model_slate.110m.cybersecurity_many_transformer_en_uncased Modelo preentrenado en contenidos de ciberseguridad
pretrained-model_slate.125m.biomedical_many_transformer_en_cased Modelo preentrenado en contenido biomédico

Para entrenar los algoritmos 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)

Formación de un modelo de transformador personalizado utilizando un modelo proporcionado por Hugging Face

Puede entrenar su modelo personalizado basado en transformadores utilizando un modelo preentrenado de Hugging Face.

Para utilizar un modelo de Cara Abrazada, especifique el nombre del modelo como parámetro " pretrained_model_resource " en el método " train " de " watson_nlp.blocks.classification.transformer.Transformer. Vaya a https://huggingface.co/models para copiar el nombre del modelo.

Para obtener una lista de todas las opciones disponibles para configurar una formación de transformador, escriba este código:

help(watson_nlp.blocks.classification.transformer.Transformer.train)

Para obtener información sobre cómo entrenar algoritmos de transformadores, consulte este ejemplo de código:

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)

Entrenamiento de un modelo ensemble

El modelo Ensemble es un conjunto ponderado de estos tres algoritmos: CNN, SVM con TF-IDF y SVM con USE. Calcula la media ponderada de un conjunto de predicciones de clasificación utilizando puntuaciones de confianza. El modelo de conjunto es muy fácil de utilizar.

El clasificador GenericEnsemble permite más flexibilidad al usuario para elegir entre los tres clasificadores base TFIDF-SVM, USE-SVM y CNN. Para textos de entre 50 y 1.000 caracteres, la combinación de los clasificadores TFIDF-SVM y USE-SVM suele ofrecer un buen equilibrio entre calidad y rendimiento. En algunos documentos medianos o largos (500-1000 caracteres o más), añadir la CNN al Ensemble podría ayudar a aumentar la calidad, pero suele conllevar un impacto significativo en el rendimiento en tiempo de ejecución (menor rendimiento y mayor tiempo de carga del modelo).

Para conocer todas las opciones disponibles para configurar el entrenamiento Ensemble, introduzca:

help(watson_nlp.workflows.classification.GenericEnsemble)

Para entrenar algoritmos de conjunto:

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

Modelos de palabras vacías preformados disponibles desde el principio

El modelo de texto para identificar palabras vacías se utiliza en entrenamiento del modelo de conjunto de clasificación de documentos.

En la tabla siguiente se enumeran los modelos de palabras clave preformados y los códigos de idioma compatibles (xx " representa el código de idioma). Para obtener una lista de los códigos de idioma y el idioma correspondiente, consulte Códigos de idioma.

Lista de modelos de palabras clave preformados con sus idiomas compatibles
Clase de recurso Nombre de modelo Idiomas soportados
text text_stopwords_classification_ensemble_xx_stock ar, de, es, en, fr, it, ja, ko

Mejores prácticas de entrenamiento

Existen ciertas restricciones sobre la calidad y la cantidad de datos para garantizar que el entrenamiento del modelo de clasificaciones puede completarse en una cantidad de tiempo razonable y también cumple varios criterios de rendimiento. Se enumeran a continuación. Tenga en cuenta que no hay restricciones estrictas. Sin embargo, cuanto más se desvía de estas directrices, mayor será la probabilidad de que el modelo no se pueda entrenar o que el modelo no sea satisfactorio.

  • Cantidad de datos

    • El número superior de modelos de clasificación de clases en los que se ha probado es ~1200.
    • El tamaño de texto más adecuado para el entrenamiento y las pruebas de datos para la clasificación es 3000 puntos de código aproximadamente. Sin embargo, los textos más grandes también se pueden procesar, pero el rendimiento del tiempo de ejecución puede ser más lento.
    • El tiempo de entrenamiento se incrementará en función del número de ejemplos y el número de etiquetas.
    • El tiempo de inferencia aumentará en función del número de etiquetas.
  • Calidad de datos

    • El tamaño de cada muestra (por ejemplo, el número de frases en cada muestra de entrenamiento) puede afectar la calidad.
    • La separación de clases es importante. En otras palabras, las clases entre los datos de entrenamiento (y de prueba) deben distinguirse semánticamente entre sí para evitar clasificaciones incorrectas. Puesto que los algoritmos de clasificador en Watson Natural Language Processing se basan en las inclusiones de palabras, las clases de entrenamiento que contienen ejemplos de texto con demasiado solapamiento semántico pueden hacer que la clasificación de alta calidad sea computacionalmente intratable. Si bien puede existir una heurística más sofisticada para evaluar la similitud semántica entre las clases, debe empezar con una simple "prueba visual" de algunos ejemplos de cada clase para discernir si parecen o no separados adecuadamente.
    • Se recomienda utilizar datos equilibrados para el entrenamiento. Idealmente debería haber un número aproximadamente igual de ejemplos de cada clase en los datos de entrenamiento, de lo contrario los clasificadores pueden estar sesgados hacia las clases con mayor representación en los datos de entrenamiento.
    • Es mejor evitar las circunstancias en las que algunas clases de los datos de entrenamiento están muy infrarrepresentadas en comparación con otras clases.

Limitaciones y advertencias:

  • El bloque de clasificación de CNN tiene una longitud de secuencia predefinida de 1000 puntos de código. Este límite se puede configurar en el momento de entrenar cambiando el parámetro max_phrase_len. No hay un límite máximo para este parámetro, pero aumentar la longitud máxima de frase afectará al consumo de CPU y memoria.
  • Los bloques de SVM no tienen dicho límite en la longitud de secuencia y pueden utilizarse con textos más largos.

Aplicación del modelo en datos nuevos

Después de haber entrenado el modelo en un conjunto de datos, aplique el modelo en los datos nuevos utilizando el método run(), tal como se utilizaría en cualquiera de los bloques entrenados previamente existentes.

Código de ejemplo

  • Para los modelos Ensemble:

    # run Ensemble model on new text
    ensemble_prediction = ensemble_classification_model.run("new input text")
    
  • Para los modelos SVM y CNN, por ejemplo para 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)
    

Elección del algoritmo adecuado para su caso de uso

Es necesario elegir el algoritmo de modelo que mejor se adapte a su caso de uso.

A la hora de elegir entre SVM, CNN y Transformers, tenga en cuenta lo siguiente:

  • Pizarra basada en transformador

    • Elija cuándo se requiere una alta calidad y se dispone de recursos informáticos más altos.
  • CNN

    • Elija cuándo están disponibles datos de un tamaño decente
    • Elija si la inclusión de GloVe está disponible para el idioma requerido
    • Elija si tiene la opción entre una sola etiqueta o una etiqueta múltiple
    • CNN ajusta las inclusiones, por lo que podría dar un mejor rendimiento para términos desconocidos o dominios más nuevos.
  • SVM

    • Elija si es necesario un modelo más sencillo y fácil
    • SVM tiene el tiempo de entrenamiento e inferencia más rápido
    • Elija si el tamaño del conjunto de datos es pequeño

Si selecciona SVM, debe tener en cuenta lo siguiente al elegir entre las diversas implementaciones de SVM:

  • Las SVM entrenan clasificadores de varias etiquetas.
  • Cuanto mayor sea el número de clases, más largo será el tiempo de entrenamiento.
  • TF-IDF:
    • Elija la vectorización TF-IDF con SVM si el conjunto de datos es pequeño, es decir, tiene un pequeño número de clases, un pequeño número de ejemplos y un tamaño de texto más corto, por ejemplo, frases que contienen menos frases.
    • TF-IDF con SVM puede ser más rápido que otros algoritmos en el bloque de clasificación.
    • Elija TF-IDF si no están disponibles las inclusiones para el idioma necesario.
  • use:
    • Elija Universal Sentence Encoder (USE) con SVM si el conjunto de datos tiene una o más frases en el texto de entrada.
    • USE puede dar mejores resultados en conjuntos de datos donde entender el contexto de palabras o frases es importante.

El modelo de conjunto varios modelos individuales (diversos) para ofrecer un poder de predicción superior. Tenga en cuenta los siguientes datos clave para este tipo de modelo:

  • El modelo de conjunto combina CNN, SVM con TF-IDF y SVM con USE.
  • Es el modelo más fácil de usar.
  • Puede dar mejores resultados que los algoritmos individuales.
  • Funciona para todos los tipos de conjuntos de datos. Sin embargo, el tiempo de entrenamiento para conjuntos de datos grandes (más de 20000 ejemplos) puede ser alto.
  • Un modelo de conjunto le permite establecer pesos. Estos pesos deciden cómo el modelo de conjunto combina los resultados de clasificadores individuales. Actualmente, la selección de pesos es un proceso heurístico y se debe establecer mediante prueba y error. Los pesos predeterminados que se proporcionan en la función en sí son un buen punto de partida para la exploración.

Tema principal: Crear sus propios modelos

Búsqueda y respuesta de IA generativa
Estas respuestas las genera un modelo de lenguaje grande en watsonx.ai que se basa en el contenido de la documentación del producto. Más información