Si no tiene un conjunto fijo de términos o no puede expresar entidades que desea detectar como expresiones regulares, puede crear un modelo de transformador personalizado. El modelo se basa en el modelo preentrenado de Slate IBM Foundation.
Cuando utiliza el modelo entrenado previamente, puede crear modelos multilingües. No es necesario tener modelos separados para cada idioma.
Necesita suficientes datos de entrenamiento para lograr una alta calidad (2000-5000 por tipo de entidad). Si tiene GPU disponibles, utilícelas para el entrenamiento.
El entrenamiento de modelos de transformador es intensivo en CPU y memoria. Los entornos predefinidos no son lo suficientemente grandes para completar el entrenamiento. Cree un entorno de cuaderno personalizado con una cantidad mayor de CPU y memoria, y utilícelo para ejecutar el cuaderno. Si tienes GPU disponibles, es muy recomendable usarlas. Consulte Creación de su propia plantilla de entorno.
Formato de datos de entrada
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 text
y un campo mentions
. El campo text
representa el texto de la frase de entrenamiento y mentions
es una matriz de objetos JSON con el texto, el tipo y la ubicación de cada mención:
[
{
"text": str,
"mentions": [{
"location": {
"begin": int,
"end": int
},
"text": str,
"type": str
},...]
},...
]
Ejemplo:
[
{
"id": 38863234,
"text": "I'm moving to Colorado in a couple months.",
"mentions": [{
"text": "Colorado",
"type": "Location",
"location": {
"begin": 14,
"end": 22
}
},
{
"text": "couple months",
"type": "Duration",
"location": {
"begin": 28,
"end": 41
}
}]
}
]
Entrenamiento del modelo
El algoritmo de transformador está utilizando el modelo de Slate preentrenado.
Para obtener una lista de modelos Slate disponibles, consulte esta tabla:
Modelo | Descripción | Disponible en versión de lanzamiento | Disponible en versión runtime |
---|---|---|---|
pretrained-model_slate.153m.distilled_many_transformer_multilingual_uncased |
Modelo genérico y polivalente. | 23.1, 24.1 | |
pretrained-model_slate.125m.finance_many_transformer_en_cased |
Modelo previamente capacitado en contenido financiero. | 24.1 | |
pretrained-model_slate.110m.cybersecurity_many_transformer_en_uncased |
Modelo previamente capacitado en contenidos de ciberseguridad | 24.1 | |
pretrained-model_slate.125m.biomedical_many_transformer_en_cased |
Modelo preentrenado en contenidos biomédicos. | 24.1 |
Para obtener las opciones disponibles para configurar el entrenamiento de Transformer, entre:
help(watson_nlp.workflows.entity_mentions.transformer.Transformer.train)
Código de ejemplo
import watson_nlp
from watson_nlp.toolkit.entity_mentions_utils.train_util import prepare_stream_of_train_records_from_JSON_collection
# load the syntax models for all languages to be supported
syntax_model = watson_nlp.load('syntax_izumo_en_stock')
syntax_models = [syntax_model]
# load the pretrained Slate model
pretrained_model_resource = watson_nlp.load('<pretrained Slate model>')
# prepare the train and dev data
# entity_train_data is a directory with one or more json files in the input format specified above
train_data_stream = prepare_stream_of_train_records_from_JSON_collection('entity_train_data')
dev_data_stream = prepare_stream_of_train_records_from_JSON_collection('entity_train_data')
# train a transformer workflow model
trained_workflow = watson_nlp.workflows.entity_mentions.transformer.Transformer.train(
train_data_stream=train_data_stream,
dev_data_stream=dev_data_stream,
syntax_models=syntax_models,
template_resource=pretrained_model_resource,
num_train_epochs=3,
)
Aplicación del modelo en datos nuevos
Aplique el modelo de flujo de trabajo de transformador entrenado en los nuevos datos utilizando el método run()
, como utilizaría en cualquiera de los bloques entrenados previamente existentes.
Ejemplo de código
trained_workflow.run('Bruce is at Times Square')
Almacenamiento y carga del modelo
El modelo de transformador personalizado se puede almacenar como cualquier otro modelo tal como se describe en Guardar y cargar modelos personalizados, utilizando ibm_watson_studio_lib
.
Para cargar el modelo de transformador personalizado, son necesarios pasos adicionales:
Asegúrese de que tiene una señal de acceso en la página Control de acceso de la pestaña Gestionar del proyecto. Solo los administradores del proyecto pueden crear señales de acceso. La señal de acceso puede tener permisos de acceso de Visor o Editor . Solo los editores pueden inyectar la señal en un cuaderno.
Añada la señal de proyecto al cuaderno pulsando Más > Insertar señal de proyecto en la barra de acciones del cuaderno y, a continuación, ejecute la celda.
Al ejecutar la celda de código oculto insertada, se crea un objeto
wslib
que puede utilizar para las funciones de la bibliotecaibm-watson-studio-lib
. Para obtener información sobre las funciones deibm-watson-studio-lib
disponibles, consulte Utilización de ibm-watson-studio-lib para Python.Descargue y extraiga el modelo en el entorno de ejecución local:
import zipfile model_zip = 'trained_workflow_file' model_folder = 'trained_workflow_folder' wslib.download_file('trained_workflow', file_name=model_zip) with zipfile.ZipFile(model_zip, 'r') as zip_ref: zip_ref.extractall(model_folder)
Cargue el modelo desde la carpeta extraída:
trained_workflow = watson_nlp.load(model_folder)
Tema principal: Crear sus propios modelos