Crea incorporaciones mediante Swivel

En esta guía, se explica cómo entrenar un modelo de incorporación con el algoritmo Submatrix-wise Vector Embedding Learner (Swivel) mediante Vertex Pipelines.

Swivel es un método para generar incorporaciones de elementos de una matriz de simultaneidad de elementos. En el caso de los datos estructurados, como las órdenes de compra, la matriz de simultaneidad de los artículos se puede calcular mediante el conteo de la cantidad de pedidos de compra que contienen el producto A y el producto B para todos los productos que deseas generar incorporaciones.

En este instructivo, se proporciona una explicación a fin de usar esta plantilla para generar incorporaciones de texto propio o datos estructurados. Los pasos realizados incluyen los siguientes:

  1. Configurar: Habilitar las API, otorgar permisos y preparar los datos de entrada.
  2. Configurar los parámetros: Establecer los valores de parámetros apropiados para el trabajo de Swivel.
  3. Entrenar en canalizaciones de Vertex: Crear un trabajo de Swivel en canalizaciones de Vertex con la plantilla de canalización de Swivel.

Antes de comenzar

  1. Configura tu proyecto de Google Cloud para Vertex Pipelines.

  2. Habilita el servicio de la API de Dataflow.

  3. Configura una cuenta de servicio con permisos detallados

    • Si no especificas una cuenta de servicio, la ejecución de tu canalización usa la cuenta de servicio predeterminada de Compute Engine, que tiene la función de editor del proyecto de forma predeterminada.
    • Si quieres crear tu propia cuenta de servicio, sigue estos pasos:guía y otorga las siguientes funciones a la cuenta de servicio:roles/aiplatform.user, roles/iam.serviceAccountUser, roles/dataflow.developer, roles/compute.viewer, roles/storage.objectAdmin.

Datos de entrada

Puedes usar el giratorio para generar incorporaciones de palabras en un corpus de texto o elementos en conjuntos de datos estructurados. Se espera que los archivos de datos de entrada tengan el siguiente formato:

  • Cada línea representa un contexto de simultaneidad. Por ejemplo, palabras en una oración, un conjunto de productos en una cesta de compra, un conjunto de canciones en una lista de reproducción o un conjunto de URL visitadas en una sesión de usuario.

  • Los elementos de cada línea están separados por un espacio. Por lo tanto, los nombres de los elementos no deben tener espacios en ellas.

Tipos de datos de entrada

Existen dos tipos de entradas: texto y elementos. Especificar el correcto para tu caso de uso es importante, ya que afecta la forma en que se procesan los datos de entrada.

  1. Se espera que la entrada de Text tenga mayúsculas y signos de puntuación, por lo que Swivel escribe en minúsculas el texto y quita la puntuación. De esta manera, se garantiza que los tokens como “apple”, “Apple” y “APPLE!” se tratan como el mismo token y, por lo tanto, tienen las mismas incorporaciones. Por ejemplo, la entrada de texto anterior se procesaría de la siguiente manera:

    un antiguo estanque silencioso

    una rana salta al estanque

    volver a silenciar

  2. Las entradas de Elementos se dividen en espacios en blanco, y se espera que cada token sea un ID de artículo. Además, el orden no importa para la entrada de elementos, ya que los grupos de elementos en una cesta, por ejemplo, no se ordenan de forma inherente. Dicho de otra manera, cada línea para la entrada de elementos se trata como un conjunto, no un array. Por lo tanto, Swivel considerará que cada elemento de la línea esté relacionado entre sí de la misma forma.

Datos de muestra

Puedes copiar los siguientes datos de muestra en tu bucket de Cloud Storage para realizar pruebas:

  • wikipedia: Un conjunto de datos de texto corpus creado a partir de un volcado de Wikipedia que puedes usar para aprender incorporaciones de palabras. Se usa el tipo de entrada text.

Ejecuta el siguiente comando para copiar estos datos:

gsutil cp -r gs://cloud-samples-data/vertex-ai/matching-engine/swivel/wikipedia/* BUCKET_NAME/wikipedia

Reemplaza BUCKET_NAME por el nombre de un bucket de Cloud Storage que administres.

  • movielens_25m: Es un conjunto de datos de clasificación de películas que puedes usar a fin de crear incorporaciones para películas. Se usa el tipo de entrada de elementos. Este conjunto de datos se procesa de modo que cada línea contenga las películas que tengan la misma calificación del mismo usuario. El directorio también incluye movies.csv, que asigna los ID de película a sus nombres.

Ejecuta el siguiente comando para copiar estos datos:

gsutil cp -r gs://cloud-samples-data/vertex-ai/matching-engine/swivel/movielens_25m/data* BUCKET_NAME/movielesn_25m

Reemplaza BUCKET_NAME por el nombre de un bucket de Cloud Storage que administres.

Crea un trabajo de Swivel con Vertex Pipelines

Puedes usar Google Cloud Console para ejecutar una canalización. Este es un proceso de tres pasos:

  1. Desde los siguientes vínculos, descarga la plantilla de canalización compilada con anterioridad y la secuencia de comandos de configuración de manera local.

  2. Configura la plantilla con la secuencia de comandos (swivel_template_configuration.sh). La siguiente es una lista de los parámetros:

    • pipeline_suffix: Es un sufijo del nombre de la canalización (se permiten minúsculas y guiones).
    • machine_type: por ejemplo, n1-standard-16. Obtén más información sobre los tipos de máquinas.
    • accelerator_count: Es la cantidad de GPU en cada máquina.
    • accelerator_type: Por ejemplo, NVIDIA_TESLA_P100, NVIDIA_TESLA_V100. Obtén más información sobre GPU.
    • pipeline_root: Es el nombre de tu bucket de Cloud Storage. No incluyas el prefijo gs://.

    Ejecute la siguiente secuencia de comandos:

    ./swivel_template_configuration.sh -pipeline_suffix {your-pipeline-suffix} -project_id {your-project-id} -machine_type n1-standard-16 -accelerator_count 2 -accelerator_type NVIDIA_TESLA_V100 -pipeline_root {BUCKET_NAME}
    

    Se generará una plantilla de canalización swivel_pipeline.json ya compilada con tus opciones de configuración.

  3. Crea una canalización mediante swivel_pipeline.json en Cloud Console.

    En la siguiente tabla, se muestran los parámetros del entorno de ejecución que debes completar en Cloud Console que usa el trabajo de Swivel:

    Parámetro Tipo de datos Descripción Obligatorio
    embedding_dim int Dimensiones de las incorporaciones que se entrenarán. No: El valor predeterminado es 100.
    input_base string La ruta de acceso de Cloud Storage en la que se almacenan los datos de entrenamiento.
    input_type string Es el tipo de los datos de entrada. Puede ser “text” (para la muestra de wikipedia) o “items” (para la muestra de MovieLens).
    max_vocab_size int Tamaño máximo del vocabulario para el que se generan las incorporaciones. No: El valor predeterminado es 409600.
    num_epochs int Es la cantidad de ciclos de entrenamiento. No: El valor predeterminado es 20.

En resumen, el tipo de entrada items significa que cada línea de tus datos de entrada debe ser ID de artículos separados por espacios. A cada línea se le asigna un token mediante la división en espacios en blanco. El tipo de entrada text significa que cada línea de tus datos de entrada se considera equivalente a una oración. A cada línea se le asignan tokens mediante minúsculas y la división en espacios en blanco.

Para la muestra de Wikipedia, usa input_type = text y input_base = {SOURCE_DATA}/wikipedia. Para la muestra de MovieLens, usa input_type = items y input_base = {SOURCE_DATA}/movielens_25m.

Usa tu modelo de incorporación entrenado

Una vez que la ejecución de la canalización se complete de forma correcta, el modelo guardado de TensorFlow entrenado se exportará a un directorio de Cloud Storage: {BUCKET_NAME}/pipeline_root/{PROJECT_NUMBER}/swivel-{TIMESTAMP}/EmbTrainerComponent_-{SOME_NUMBER}/model/model/. Encuentra esta ruta en la sección Vertex ML Metadata de Cloud Console.

Instructivo

Para obtener una explicación detallada sobre cómo entrenar Swivel en Vertex AI, explorar las incorporaciones entrenadas y, luego, implementar el modelo de incorporación para la entrega en línea, inicia el notebook de ejemplo en Colab.

¿Qué sigue?