Canalizaciones de Amazon SageMaker incluye funciones que le permiten optimizar y automatizar los flujos de trabajo de enseñanza forzoso (ML). Esto permite a los científicos y desarrolladores de modelos centrarse en el ampliación de modelos y la experimentación rápida en puesto de en la mandato de infraestructura.
Pipelines ofrece la capacidad de orquestar flujos de trabajo de enseñanza forzoso complejos con un SDK de Python simple con la capacidad de visualizar esos flujos de trabajo a través de SageMaker Studio. Esto ayuda con la preparación de datos y las tareas de ingeniería de funciones, así como con la capacitación de modelos y la automatización de la implementación. Pipelines igualmente se integra con el ajuste forzoso de modelos de Amazon SageMaker, que puede encontrar automáticamente los títulos de hiperparámetros que dan como resultado el maniquí de mejor rendimiento, según lo determine la métrica elegida.
Los modelos conjuntos se están volviendo populares adentro de las comunidades de ML. Generan predicciones más precisas combinando las predicciones de múltiples modelos. Las canalizaciones se pueden utilizar rápidamente para crear una canalización de enseñanza forzoso de un extremo a otro para modelos de conjunto. Esto permite a los desarrolladores crear modelos de ingreso precisión manteniendo la eficiencia y la reproducibilidad.
En esta publicación, proporcionamos un ejemplo de un maniquí de conjunto que se entrenó e implementó mediante Pipelines.
Descripción universal del caso de uso
Los representantes de ventas generan nuevos clientes potenciales y crean oportunidades adentro de Salesforce para realizar un seguimiento de ellos. La próximo aplicación es un enfoque de enseñanza forzoso que utiliza el enseñanza no supervisado para identificar automáticamente casos de uso en cada oportunidad en función de diversa información de texto, como nombre, descripción, detalles y liga de servicio del producto.
El examen preliminar mostró que los casos de uso varían según la industria y los diferentes casos de uso tienen una distribución muy diferente de los ingresos anualizados y pueden ayudar con la segmentación. Por lo tanto, un caso de uso es una característica predictiva importante que puede optimizar los examen y mejorar los modelos de recomendación de ventas.
Podemos tratar la identificación de casos de uso como un problema de identificación de temas y exploramos diferentes modelos de identificación de temas, como el examen semántico implícito (LSA), la asignación implícito de Dirichlet (LDA) y BERTopic. Tanto en LSA como en LDA, cada documento se manejo solo como una colección de palabras y el orden de las palabras o la función gramatical no importa, lo que puede causar cierta pérdida de información al determinar el tema. Encima, requieren una cantidad predeterminada de temas, lo que fue difícil de determinar en nuestro conjunto de datos. Cedido que BERTopic superó el problema preliminar, se utilizó para identificar el caso de uso.
El enfoque utiliza tres modelos BERTopic secuenciales para gestar el agrupación final en un método jerárquico.
Cada maniquí BERTopic consta de cuatro partes:
- embutir – Se pueden utilizar diferentes métodos de incrustación en BERTopic. En este escena, los datos de entrada provienen de varias áreas y generalmente se ingresan manualmente. Como resultado, utilizamos la incrustación de oraciones para asegurar la escalabilidad y el procesamiento rápido.
- Reducción de dimensiones – Utilizamos Proyección y enfoque de colector uniforme (UMAP), que es un método de reducción de dimensiones no rectilíneo y no supervisado, para estrechar vectores de texto de ingreso dimensión.
- Agrupación – Utilizamos el método de agrupación y reducción iterativa equilibrada mediante jerarquías (BIRCH) para formar diferentes grupos de casos de uso.
- Identificación de palabras secreto – Utilizamos TF-IDF basado en clases para extraer las palabras más representativas de cada liga.
Maniquí de conjunto secuencial
No hay un número predeterminado de temas, por lo que establecemos una entrada para el número de grupos entre 15 y 25 temas. Tras la observación, algunos de los temas son amplios y generales. Por lo tanto, se les aplica individualmente otra capa del maniquí BERTopic. Posteriormente de combinar todos los temas recién identificados en el maniquí de segunda capa y adjunto con los temas originales de los resultados de la primera capa, el posprocesamiento se realiza manualmente para finalizar la identificación del tema. Por final, se utiliza una tercera capa en algunos de los grupos para crear subtemas.
Para permitir que los modelos de segunda y tercera capa funcionen eficazmente, necesita un archivo de mapeo para asignar los resultados de los modelos anteriores a palabras o frases específicas. Esto ayuda a asegurar que la agrupación sea precisa y relevante.
Estamos utilizando la optimización bayesiana para el ajuste de hiperparámetros y la subsistencia cruzada para estrechar el sobreajuste. El conjunto de datos contiene características como nombre de la oportunidad, detalles de la oportunidad, micción, nombre del producto asociado, detalles del producto y grupos de productos. Los modelos se evalúan utilizando una función de pérdida personalizada y se selecciona el mejor maniquí de incorporación.
Desafíos y consideraciones
Estos son algunos de los desafíos y consideraciones de esta opción:
- La capacidad de preprocesamiento de datos del canal es crucial para mejorar el rendimiento del maniquí. Con la capacidad de preprocesar los datos entrantes ayer del entrenamiento, podemos asegurarnos de que nuestros modelos reciban datos de ingreso calidad. Algunos de los pasos de preprocesamiento y destreza de datos incluyen convertir todas las columnas de texto a minúsculas, eliminar instrumentos de plantilla, contracciones, URL, correos electrónicos, etc., eliminar etiquetas NER no relevantes y lematizar el texto combinado. El resultado son predicciones más precisas y fiables.
- Necesitamos un entorno informático que sea en gran medida escalable para que podamos manejar y entrenar sin esfuerzo millones de filas de datos. Esto nos permite realizar tareas de modelado y procesamiento de datos a gran escalera con facilidad y reduce el tiempo y los costos de ampliación.
- Conveniente a que cada paso del flujo de trabajo de ML requiere requisitos de fortuna variables, una canalización flexible y adaptable es esencial para una asignación eficaz de fortuna. Podemos estrechar el tiempo total de procesamiento, lo que resulta en un ampliación e implementación de modelos más rápidos, al optimizar el uso de fortuna en cada paso.
- La ejecución de scripts personalizados para el procesamiento de datos y el entrenamiento de modelos requiere la disponibilidad de los marcos y dependencias necesarios.
- Coordinar el entrenamiento de múltiples modelos puede resultar un desafío, especialmente cuando cada maniquí posterior depende del resultado del preliminar. El proceso de orquestar el flujo de trabajo entre estos modelos puede ser difícil y sobrellevar mucho tiempo.
- Posteriormente de cada capa de entrenamiento, es necesario revisar un mapeo que refleje los temas producidos por el maniquí y usarlo como entrada para la capa de maniquí posterior.
Descripción universal de la opción
En esta opción, el punto de entrada es Amazon SageMaker Estudioque es un entorno de ampliación integrado (IDE) basado en web proporcionado por AWS que permite a los científicos de datos y desarrolladores de ML crear, entrenar e implementar modelos de ML a escalera de forma colaborativa y eficaz.
Los siguientes diagramas ilustran la construcción de detención nivel de la opción.
Como parte de la construcción, utilizamos los siguientes pasos de canalización de SageMaker:
- Procesamiento de SageMaker – Este paso le permite preprocesar y elaborar datos ayer del entrenamiento. Un beneficio de este paso es la capacidad de utilizar algoritmos integrados para transformaciones de datos comunes y escalado forzoso de fortuna. Asimismo puede utilizar código personalizado para el preprocesamiento de datos complejos y le permite utilizar imágenes de contenedor personalizadas.
- Entrenamiento de SageMaker – Este paso le permite entrenar modelos de ML utilizando algoritmos integrados de SageMaker o código personalizado. Puede utilizar la capacitación distribuida para acelerar la capacitación del maniquí.
- Devolución de citación de SageMaker – Este paso le permite ejecutar código personalizado durante el flujo de trabajo de ML, como expedir notificaciones o activar pasos de procesamiento adicionales. Puede ejecutar procesos externos y reanudar el flujo de trabajo de la canalización al finalizar en este paso.
- Maniquí SageMaker – Este paso le permite crear o registrar un maniquí para Amazon SageMaker
Tutorial de implementación
Primero, configuramos la canalización de Sagemaker:
import boto3
import sagemaker
# create a Session with custom region (e.g. us-east-1), will be None if not specified
region = ""
# allocate default S3 bucket for SageMaker session, will be None if not specified
default_bucket = ""
boto_session = boto3.Session(region_name=region
sagemaker_client = boto_session.client("sagemaker")
Inicializar una sesión de SageMaker
sagemaker_session = sagemaker.session.Session(boto_session=boto_session, sagemaker_client=sagemaker_client, default_bucket= default_bucket,)
Establecer el rol de ejecución de Sagemaker para la sesión
role = sagemaker.session.get_execution_role(sagemaker_session)
Administrar interacciones en contexto de canalización
pipeline_session = sagemaker.workflow.pipeline_context.PipelineSession(boto_session=boto_session, sagemaker_client=sagemaker_client, default_bucket=default_bucket,)
Fijar la imagen colchoneta para que se ejecuten los scripts
account_id = role.split(":")(4)
# create a colchoneta image that take care of dependencies
ecr_repository_name = "".
tag = "latest"
container_image_uri = "{0}.dkr.ecr.{1}.amazonaws.com/{2}:{3}".format(account_id, region, ecr_repository_name, tag)
A continuación se ofrece una explicación detallada de los pasos del flujo de trabajo:
- Preprocesar los datos – Esto implica lavar y preparar los datos para la ingeniería de funciones y dividir los datos en conjuntos de entrenamiento, prueba y subsistencia.
import os
BASE_DIR = os.path.dirname(os.path.realpath(__file__))
from sagemaker.workflow.parameters import ParameterString
from sagemaker.workflow.steps import ProcessingStep
from sagemaker.processing import (
ProcessingInput,
ProcessingOutput,
ScriptProcessor,
)
processing_instance_type = ParameterString(
name="ProcessingInstanceType",
# choose an instance type suitable for the job
default_value="ml.m5.4xlarge"
)
script_processor = ScriptProcessor(
image_uri=container_image_uri,
command=("python"),
instance_type=processing_instance_type,
instance_count=1,
role=role,
)
# define the data preprocess job
step_preprocess = ProcessingStep(
name="DataPreprocessing",
processor=script_processor,
inputs=(
ProcessingInput(source=BASE_DIR, destination="/opt/ml/processing/input/code/")
),
outputs=(
ProcessingOutput(output_name="data_train", source="/opt/ml/processing/data_train"), # output data and dictionaries etc for later steps
)
code=os.path.join(BASE_DIR, "preprocess.py"),
)
- Tren capa 1 maniquí BERTopic – Se utiliza un paso de entrenamiento de SageMaker para entrenar la primera capa del maniquí BERTopic usando un Registro de contenedores elásticos de Amazon (Amazon ECR) y un divisa de capacitación personalizado.
base_job_prefix="OppUseCase"
from sagemaker.workflow.steps import TrainingStep
from sagemaker.estimator import Estimator
from sagemaker.inputs import TrainingInput
training_instance_type = ParameterString(
name="TrainingInstanceType",
default_value="ml.m5.4xlarge"
)
# create an estimator for training job
estimator_first_layer = Estimator(
image_uri=container_image_uri,
instance_type=training_instance_type,
instance_count=1,
output_path= f"s3://{default_bucket}/{base_job_prefix}/train_first_layer", # S3 bucket where the training output be stored
role=role,
entry_point = "train_first_layer.py"
)
# create training job for the estimator based on inputs from data-preprocess step
step_train_first_layer = TrainingStep(
name="TrainFirstLayerModel",
estimator = estimator_first_layer,
inputs={
TrainingInput(
s3_data=step_preprocess.properties.ProcessingOutputConfig.Outputs( "data_train" ).S3Output.S3Uri,
),
},
)
from sagemaker.workflow.callback_step import CallbackStep, CallbackOutput, CallbackOutputTypeEnum
first_sqs_queue_to_use = ParameterString(
name="FirstSQSQueue",
default_value= , # add queue url
)
first_callback_output = CallbackOutput(output_name="s3_mapping_first_update", output_type=CallbackOutputTypeEnum.String)
step_first_mapping_update = CallbackStep(
name="FirstMappingUpdate",
sqs_queue_url= first_sqs_queue_to_use,
# Input arguments that will be provided in the SQS message
inputs={
"input_location": f"s3://{default_bucket}/{base_job_prefix}/mapping",
"output_location": f"s3://{default_bucket}/{base_job_prefix}/ mapping_first_update "
},
outputs=(
first_callback_output,
),
)
step_first_mapping_update.add_depends_on((step_train_first_layer)) # call back is run after the step_train_first_layer
- Tren capa 2 maniquí BERTopic – Se utiliza otro SageMaker TrainingStep para entrenar la segunda capa del maniquí BERTopic utilizando una imagen ECR y un script de entrenamiento personalizado.
estimator_second_layer = Estimator(
image_uri=container_image_uri,
instance_type=training_instance_type, # same type as of first train layer
instance_count=1,
output_path=f"s3://{bucket}/{base_job_prefix}/train_second_layer", # S3 bucket where the training output be stored
role=role,
entry_point = "train_second_layer.py"
)
# create training job for the estimator based on inputs from preprocessing, output of previous call back step and first train layer step
step_train_second_layer = TrainingStep(
name="TrainSecondLayerModel",
estimator = estimator_second_layer,
inputs={
TrainingInput(
s3_data=step_preprocess.properties.ProcessingOutputConfig.Outputs( "data_train").S3Output.S3Uri,
),
TrainingInput(
# Output of the previous call back step
s3_data= step_first_mapping_update.properties.Outputs("s3_mapping_first_update"),
),
TrainingInput(
s3_data=f"s3://{bucket}/{base_job_prefix}/train_first_layer"
),
}
)
- Utilice un paso de devolución de citación – De forma similar al paso 3, esto implica expedir un mensaje a una huesito dulce SQS que activa una función Lambda. La función Lambda actualiza el archivo de mapeo en Amazon S3 y envía un token de éxito a la canalización para reanudar su ejecución.
second_sqs_queue_to_use = ParameterString(
name="SecondSQSQueue",
default_value= , # add queue url
)
second_callback_output = CallbackOutput(output_name="s3_mapping_second_update", output_type=CallbackOutputTypeEnum.String)
step_second_mapping_update = CallbackStep(
name="SecondMappingUpdate",
sqs_queue_url= second_sqs_queue_to_use,
# Input arguments that will be provided in the SQS message
inputs={
"input_location": f"s3://{default_bucket}/{base_job_prefix}/mapping_first_update ",
"output_location": f"s3://{default_bucket}/{base_job_prefix}/mapping_second_update "
},
outputs=(
second_callback_output,
),
)
step_second_mapping_update.add_depends_on((step_train_second_layer)) # call back is run after the step_train_second_layer
- Tren capa 3 maniquí BERTopic – Esto implica obtener el archivo de mapeo de Amazon S3 y entrenar la tercera capa del maniquí BERTopic utilizando una imagen ECR y un script de entrenamiento personalizado.
estimator_third_layer = Estimator(
image_uri=container_image_uri,
instance_type=training_instance_type, # same type as of prvious two train layers
instance_count=1,
output_path=f"s3://{default_bucket}/{base_job_prefix}/train_third_layer", # S3 bucket where the training output be stored
role=role,
entry_point = "train_third_layer.py"
)
# create training job for the estimator based on inputs from preprocess step, second callback step and outputs of previous two train layers
step_train_third_layer = TrainingStep(
name="TrainThirdLayerModel",
estimator = estimator_third_layer,
inputs={
TrainingInput(
s3_data=step_preprocess.properties.ProcessingOutputConfig.Outputs("data_train").S3Output.S3Uri,
),
TrainingInput(
# s3_data = Output of the previous call back step
s3_data= step_second_mapping_update.properties.Outputs(' s3_mapping_second_update’),
),
TrainingInput(
s3_data=f"s3://{default_bucket}/{base_job_prefix}/train_first_layer"
),
TrainingInput(
s3_data=f"s3://{default_bucket}/{base_job_prefix}/train_second_layer"
),
}
)
- Registra el maniquí – Se utiliza un paso de maniquí de SageMaker para registrar el maniquí en el registro de modelos de SageMaker. Cuando el maniquí está registrado, puede utilizarlo a través de un canal de inferencia de SageMaker.
from sagemaker.model import Model
from sagemaker.workflow.model_step import ModelStep
model = Model(
image_uri=container_image_uri,
model_data=step_train_third_layer.properties.ModelArtifacts.S3ModelArtifacts,
sagemaker_session=sagemaker_session,
role=role,
)
register_args = model.register(
content_types=("text/csv"),
response_types=("text/csv"),
inference_instances=("ml.c5.9xlarge", "ml.m5.xlarge"),
model_package_group_name=model_package_group_name,
approval_status=model_approval_status,
)
step_register = ModelStep(name="OppUseCaseRegisterModel", step_args=register_args)
Para entrenar eficazmente un maniquí BERTopic y los métodos BIRCH y UMAP, necesita una imagen de entrenamiento personalizada que pueda proporcionar dependencias adicionales y el ámbito necesario para ejecutar el operación. Para obtener una muestra utilitario de una imagen acoplable personalizada, consulte Cree una imagen de contenedor Docker personalizada para SageMaker
Conclusión
En esta publicación, explicamos cómo puede utilizar la amplia viso de pasos que ofrece SageMaker Pipelines con imágenes personalizadas para entrenar un maniquí de conjunto. Para obtener más información sobre cómo comenzar con Pipelines utilizando una plantilla de Operaciones de ML (MLOps) existente, consulte Creación, automatización, suministro y escalado de flujos de trabajo de enseñanza forzoso mediante Amazon SageMaker Pipelines.
Acerca de los autores
Bikramjeet Singh es un irrefutable chapón en el equipo de Sales Insights, Analytics and Data Science (SIADS) de AWS, responsable de crear la plataforma GenAI y las soluciones de infraestructura AI/ML para científicos de ML adentro de SIADS. Ayer de trabajar como AS, Bikram trabajó como ingeniero de ampliación de software en SIADS y Alexa AI.
Raúl Sharma es arquitecto senior de soluciones especializado en AWS y ayuda a los clientes de AWS a crear soluciones de enseñanza forzoso e inteligencia industrial generativa. Ayer de unirse a AWS, Rahul pasó varios primaveras en las industrias de finanzas y seguros, ayudando a los clientes a crear plataformas de datos y examen.
Sachin Mishra es un profesional experimentado con 16 primaveras de experiencia en la industria en roles de liderazgo de software y consultoría tecnológica. Sachin lideró la función de ciencia e ingeniería de organización de ventas en AWS. En este puesto, fue responsable de ampliar el examen cognitivo para la organización de ventas, aprovechando tecnologías avanzadas de IA/ML para gestar conocimientos y optimizar los resultados comerciales.
Carencia Abdalla es un irrefutable investigador en AWS. Su trabajo y experiencia abarcan múltiples áreas científicas en estadística y enseñanza forzoso, incluidos examen de texto, sistemas de recomendación, modelado bayesiano y pronóstico. Anteriormente trabajó en el mundo escolar y obtuvo su ingenio y doctorado en Bioestadística de UCLA. A través de su trabajo en el mundo escolar y la industria, publicó varios artículos en prestigiosas revistas de estadística y conferencias de enseñanza forzoso chapón. En su tiempo vaco le gusta pasar y acaecer tiempo con su clan.