Crea incorporaciones mediante la plantilla de canalización de Swivel

Puedes entrenar un modelo de incorporación mediante Vertex AI Pipelines con el algoritmo Submatrix-wise Vector Embedding Learner (Swivel).

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 el siguiente instructivo, se muestra cómo usar la plantilla de canalización de Swivel para generar incorporaciones a partir de tu propio texto o tus 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 Vertex AI Pipelines: Crea un trabajo de Swivel en Vertex AI Pipelines con la plantilla de canalización de Swivel.

Antes de comenzar

  1. Configura tu proyecto de Google Cloud para Vertex AI 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, tu ejecución de canalización usa la cuenta de servicio predeterminada de Compute Engine, que tiene la función de editor del proyecto de forma predeterminada.
    • Para obtener información sobre cómo crear tu propia cuenta de servicio, consulta Configura una cuenta de servicio con permisos detallados 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 la plantilla de canalización de Swivel para generar incorporaciones de palabras en un corpus de texto o elementos en conjuntos de datos estructurados. La plantilla de canalización de Swivel 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. Es importante especificar el correcto para tu caso de uso, ya que la especificación de entrada 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.

  2. La entrada de los elementos se divide en espacios en blanco, y se espera que cada token sea un ID de elemento. Además, el orden no importa para la entrada de elementos, ya que los grupos de elementos en algo como 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 trata cada elemento de la línea como igual en relación con los demás.

Datos de muestra

Copia 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. Este tipo de datos usa el tipo de entrada texto.

Para copiar estos datos, ejecuta el siguiente comando:

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. 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. Este conjunto de datos usa el tipo de entrada de elementos.

Para copiar estos datos, ejecuta el siguiente comando:

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 AI Pipelines

Para ejecutar una canalización, usa Google Cloud Console:

  1. Descarga la siguiente plantilla de canalización precompilada y la secuencia de comandos de configuración de forma local.

  2. Configura la plantilla mediante la siguiente secuencia de comandos swivel_template_configuration.sh:

    ./swivel_template_configuration.sh \
        -pipeline_suffix YOUR_PIPELINE_SUFFIX \
        -project_id PROJECT_ID \
        -machine_type n1-standard-16 \
        -accelerator_count 2 \
        -accelerator_type NVIDIA_TESLA_V100 \
        -pipeline_root BUCKET_NAME \
        -region YOUR_REGION \
        -network_name YOUR_NETWORK_NAME
    

    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. Si deseas obtener más información, consulta Configura recursos de procesamiento para el entrenamiento personalizado.
    • accelerator_count: Es la cantidad de GPU en cada máquina.
    • accelerator_type: Por ejemplo, NVIDIA_TESLA_P100, NVIDIA_TESLA_V100. Para obtener más información, consulta GPU.
    • pipeline_root: Es el nombre de tu bucket de Cloud Storage. No incluyas el prefijo gs://.
    • region: Opcional: el valor predeterminado es us-central1.
    • network_name: Opcional: es tu subred.

    La secuencia de comandos swivel_template_configuration.sh genera una plantilla de canalización precompilada que usa tu configuración.

    Si no usas una dirección IP privada y no es necesario que configures una red de VPC, quita las siguientes líneas en tu swivel_pipeline.json antes de enviar el trabajo de Swivel:

    • --subnetwork=regions/%REGION%/subnetworks/%NETWORK_NAME%
    • --no_use_public_ips
    • network: projects/%PROJECT_NUMBER%/global/networks/%NETWORK_NAME%\
  3. Crea una canalización que se ejecute con swivel_pipeline.json en Cloud Console.

    En la siguiente tabla, se muestran los parámetros del entorno de ejecución que debes establecer 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. El tipo puede ser “texto” (para la muestra de Wikipedia) o “elementos” (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.
    • Para el tipo de entrada de elemenos, cada línea de tus datos de entrada deben ser ID de elementos separados por espacios. A cada línea se le asigna un token mediante la división en espacios en blanco.
    • En el tipo de entrada texto, cada línea de los datos de entrada se considera equivalente a una oración. A cada línea se le asignan tokens mediante el uso de 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 completa con éxito, el modelo guardado de TensorFlow entrenado se exporta 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 información sobre cómo entrenar la plantilla de canalización de Swivel en Vertex AI, explora las incorporaciones entrenadas, implementa el modelo de incorporación en línea y, luego, inicia el notebook de ejemplo en Colab.

¿Qué sigue?