En este tutorial, ajustaremos un modelo IBM® Granite utilizando un conjunto de datos que contiene comentarios de clientes de un negocio de peluquería canina.
Prompt tuning es una forma eficiente y de bajo costo de adaptar un modelo fundacional de inteligencia artificial (IA) a nuevas tareas posteriores sin volver a entrenar todo el modelo y actualizar sus ponderaciones.
Los modelos fundacionales se basan en modelos de lenguaje grandes (LLM) y reciben grandes cantidades de datos de entrenamiento. Los casos de uso comunes de los modelos fundacionales son los chatbots y los asistentes virtuales.
Hay varias formas de mejorar la interpretación de la entrada de un modelo fundacional y la calidad de las respuestas. Para comprender mejor estos matices, comparemos algunos de los métodos.
Las hard prompts están orientadas al usuario y requieren la acción del usuario. Una hard prompt puede considerarse como una plantilla o instrucciones para que el LLM genere respuestas. A continuación, se presenta un ejemplo de una hard prompt. Le recomendamos que consulte la página de documentación de IBM para obtener más información sobre este tipo de instrucciones y varios otros.
Con esta plantilla de instrucciones, se puede proporcionar a un LLM instrucciones específicas sobre la estructura y el estilo de salida preferidos. A través de esta instrucción explícita, el LLM tendría más probabilidades de producir respuestas deseables de mayor calidad.
A diferencia de las hard prompts, las soft prompts no están escritas en lenguaje natural. En cambio, las instrucciones se inicializan como vectores numéricos generados por IA que se agregan al inicio de cada incorporación de entrada que extrae el conocimiento del modelo más grande. Esta falta de interpretabilidad se extiende a la IA que elige instrucciones optimizadas para una tarea determinada. A menudo, la IA no puede explicar por qué eligió esas incorporaciones. En comparación con otros métodos de instrucciones, estos tokens son menos costosos desde el punto de vista informático que el ajuste, ya que el modelo en sí permanece congelado con ponderaciones fijas. Las soft prompts también tienden a superar a las hard prompts creadas por humanos.
En este tutorial, trabajaremos con soft prompts para prompt tuning.
Necesita una cuenta de IBM® Cloud para crear un proyecto en watsonx.ai .
Si bien puede elegir entre varias herramientas, este tutorial lo guiará a través de cómo configurar una cuenta de IBM para usar un Jupyter Notebook.
Inicie sesión en watsonx.ai con su cuenta de IBM Cloud.
Cree un proyecto watsonx.ai.
Puede obtener su ID de proyecto desde dentro de su proyecto. Haga clic en la pestaña Manage. Luego, copie el ID del proyecto de la sección Details de la página General. Necesita este ID para este tutorial.
Cree un Jupyter Notebook.
Este paso abrirá un entorno de Notebook donde puede copiar el código de este tutorial para implementar prompt tuning por su cuenta. También puede descargar este Notebook en su sistema local y cargarlo en su proyecto watsonx.ai como activo. Este Jupyter Notebook con los conjuntos de datos utilizados se pueden encontrar en GitHub.
Cree una instancia de servicio watsonx.ai Runtime (seleccione la región adecuada y elija el plan Lite, que es una instancia gratuita).
Genere una clave de API.
Asocie la instancia del servicio watsonx.ai Runtime al proyecto que creó en watsonx.ai.
Necesitaremos algunas bibliotecas y módulos para este tutorial. Asegúrese de importar los siguientes; si no están instalados, puede resolver esto con una instalación rápida de pip.
Configure sus credenciales. Ingrese su clave de API y el ID del proyecto.
Como primer paso para establecer el entorno, cree una instancia de APIClient con sus detalles de autenticación y establezca su project_id.
Resultado:
'SUCCESS'
Para este tutorial, utilizaremos un conjunto de datos que consiste en comentarios de negocios de peluquería canina. Con la URL adecuada, podemos conectar el conjunto de datos al cliente de API.
Puede utilizar cualquier conjunto de datos de su elección. Varios conjuntos de datos de código abierto están disponibles en plataformas como HuggingFace.
Resultado:
Creando activo de datos...
SUCCESS
Resultado:
3b1db894-8d9e-428d-8fee-d96f328c7726
Para obtener insight sobre el formato de estos comentarios de clientes, carguemos los datos en un marco de datos de Pandas e imprimiremos algunas filas que muestren comentarios tanto positivos como negativos. Un resultado de "1" denota comentarios positivos y "0" se utiliza para comentarios negativos.
Resultado:
La clase TuneExperiment se utiliza para crear experimentos y programar ajustes. Usémosla para inicializar nuestro experimento y establecer nuestro modelo fundacional base, datos de entrenamiento y parámetros. El objetivo de este ejercicio de prompt tuning es que el LLM adapte sus respuestas de acuerdo con las calificaciones de satisfacción del cliente extraídas de nuestro conjunto de datos. Esta es una tarea de clasificación, ya que los comentarios se pueden clasificar como positivos ("1") o negativos ("0").
Para este tutorial, sugerimos utilizar IBM Granite como modelo de lenguaje grande para lograr resultados similares.
Ahora que tenemos nuestro experimento de ajuste configurado, necesitamos conectarlo a nuestro conjunto de datos. Para esto, usemos la clase DataConnection . Esto requiere el asset_id que producimos anteriormente al iniciar el activo de datos con nuestro cliente API.
Puede utilizar cualquier modelo de IA de su elección. Los modelos fundacionales disponibles para ajustar a través de watsonx se pueden encontrar aquí o ejecutando el siguiente comando.
Resultado:
{'FLAN_T5_XL': 'google/flan-t5-xl', 'GRANITE_13B_INSTRUCT_V2': 'ibm/granite-13b-instruct-v2', 'LLAMA_2_13B_CHAT': 'meta-llama/llama-2-13b-chat'}
Resultado:
##############################################
Running '20671f17-ff53-470b-9bfe-04318ecb91d9'
##############################################
pending......
running....................................................................................................................................
completed
Training of '20671f17-ff53-470b-9bfe-04318ecb91d9' finished successfully.
Para asegurarnos de que nuestro prompt tuning ha concluido, podemos verificar el estado. Si el estado que se imprime no es "completed", espere a que finalice el ajuste antes de continuar.
Resultado:
completed
Ahora podemos recuperar el resumen de prompt tuning. En este resumen, verá un valor de pérdida. Para cada ejecución de entrenamiento, la función de pérdida mide la diferencia entre los resultados previstos y los reales. Por lo tanto, se prefiere un valor de pérdida más bajo.
También podemos trazar la curva de aprendizaje del ajuste de nuestro modelo mediante la función plot_learning_curve(). Una curva con pendiente negativa que se nivela cerca de cero indica que el modelo está mejorando su generación de salida esperada. Para obtener más información sobre la interpretación de los gráficos de funciones de pérdida, consulte la documentación pertinente de IBM watsonx.
Resultado:
Este paso de desplegar el modelo ajustado es crítico para completar el siguiente paso de comparar el rendimiento del modelo ajustado con el modelo previamente ajustado.
Nota: SERVING_NAME se establece en la fecha y hora actuales, ya que debe ser un valor único.
Resultado:
######################################################################################
Synchronous deployment creation for id: '6aa5dd5c-0cc4-44e0-9730-18303e88e14a' started
######################################################################################
initializing.......................
ready
-----------------------------------------------------------------------------------------------
Successfully finished deployment creation, deployment_id='24a97b84-47d0-4490-9f5f-21ed2376fdd6'
-----------------------------------------------------------------------------------------------
Ahora, probemos el rendimiento tanto del modelo ajustado como del modelo fundacional original para ver los impactos de nuestro proceso de ajuste. Primero, carguemos el conjunto de datos de prueba. Este conjunto de datos debe ser un subconjunto de datos que no estuvo presente durante el ajuste. A menudo, el conjunto de prueba también es más pequeño que el conjunto de entrenamiento. Además, cada entrada en el conjunto de datos de prueba tiene la instrucción como prefijo del comentario del usuario.
Vamos a mostrar una pequeña parte del conjunto de datos para comprender mejor su estructura.
Resultado:
Al cargar el conjunto de datos de prueba, extraigamos las entradas y salidas.
También podemos imprimir una entrada y salida de prueba de muestra para comprender mejor cómo hemos extraído el contenido del conjunto de datos.
Resultado:
'Extract the satisfaction from the comment. Return simple 1 for satisfied customer or 0 for unsatisfied.\nComment: Long wait times.\nSatisfaction:\n'
En este ejemplo, se presenta la instrucción, seguida de la opinión del cliente sobre los largos tiempos de espera y, finalmente, la satisfacción es 0 para indicar un comentario negativo.
Resultado:
0
Ahora que tenemos el conjunto de datos de prueba, probemos la precisión y la puntuación F1 de nuestro modelo ajustado. La puntuación F1 es la media de la precisión y la recuperación del modelo. Necesitaremos el deployment_id para hacer esto. Tenga en cuenta que concurrency_limit se establece en 2 para evitar alcanzar el límite de velocidad de la API. Este es el número de solicitudes que se enviarán en paralelo.
Resultado:
accuracy_score: 0.9827586206896551, f1_score: 0.9827586206896551
Dada la alta precisión de nuestro modelo y la puntuación F1, probemos el rendimiento del mismo modelo Granite sin ningún ajuste.
Resultado:
base model accuracy_score: 0.9310344827586207, base model f1_score: 0.9298245614035088
Nuestro modelo ajustado supera al modelo fundacional previamente ajustado. Dado que el modelo ajustado se especializa en extraer puntuaciones de satisfacción, se puede utilizar para otras tareas de extracción de satisfacción. ¡Gran trabajo!
En este tutorial, realizó un ajuste de instrucciones en un modelo de IBM Granite utilizando la API de watsonx. Su modelo ajustado y desplegado superó con éxito al modelo fundacional con una precisión aproximadamente un 5 % mayor.