Fine-tuning en Gemini AI: Construyendo un chatbot a medida con nuestros propios datos

1. Pero antes de empezar
– ¿Qué es Gemini AI?
– Ventajas de Gemini AI
– Google AI studio, una herramienta para hacerlo sencillo
– ¿Qué entendemos por un chatbot?
– ¿En qué consiste la técnica de fine-tuning?
2. Creando nuestro chatbot propio paso a paso
– ¿Qué vamos a hacer?
– Paso 1: ¡Conociendo Google AI Studio!
– Paso 2: Preparando nuestros datos
– Paso 3: Subiendo nuestro conjunto de datos
– Paso 4: Configurando el fine-tuning
– Paso 5: Probando nuestro modelo
3. Conclusiones

Aprende paso a paso a crear un chatbot único y adaptado a tu negocio. Gracias a la herramienta Google IA Studio podemos ajustar los modelos de Gemini de forma muy sencilla y crear así nuestro propio chatbot.

Pero, antes de empezar

¿Qué es Gemini AI?

Es una familia de modelos de inteligencia artificial de Google, diseñada para mejorar capacidades de lenguaje natural y aprendizaje profundo. Gemini está basada en la evolución de los modelos previos de Google, como PaLM (Pathways Language Model), y forma parte de la estrategia de Google para liderar en IA generativa. Gemini se destaca por su capacidad para entender, generar y trabajar con texto, imágenes y otras modalidades de datos, lo que permite su uso en una amplia variedad de aplicaciones.

 Ventajas de Gemini AI

  1. Multimodalidad: Gemini es capaz de manejar múltiples tipos de datos, incluyendo texto e imágenes, lo que permite interacciones más ricas y precisas. Esto abre la puerta a tareas como la generación de imágenes a partir de descripciones de texto y el análisis combinado de texto y elementos visuales.
  2. Capacidad de diálogo avanzada: Está diseñado para mejorar la calidad de las conversaciones, proporcionando respuestas más precisas y naturales. También es capaz de recordar el contexto de una conversación, lo que mejora la experiencia en aplicaciones como chatbots y asistentes virtuales.
  3. Optimización para tareas específicas: Gemini permite personalizar modelos para tareas concretas, como análisis de sentimientos, generación de código, traducción de idiomas y otras tareas basadas en lenguaje.
  4. Integración con aplicaciones de Google: Al ser parte del ecosistema de Google, Gemini está integrado de manera fluida en productos como Google Search, Google Assistant, Google Docs, Google Workspace y otros, mejorando su funcionalidad a través de capacidades de IA generativa.
  5. Escalabilidad: Gemini puede ser utilizado tanto por usuarios individuales como empresas, desde pequeñas aplicaciones hasta soluciones empresariales a gran escala.

Google AI Studio, una herramienta para hacerlo sencillo

Google AI Studio es una plataforma desarrollada por Google que permite a los usuarios crear, entrenar y desplegar modelos de machine learning, incluyendo modelos de lenguaje como Gemini AI. Ofrece una interfaz intuitiva que facilita el proceso de fine-tuning, lo que significa que puedes personalizar un modelo pre-entrenado como Gemini AI para que se adapte a tus necesidades específicas.

Podemos acceder a la plataforma desde https://aistudio.google.com/app

¿Qué entendemos por un chatbot?

Un chatbot es un programa de computadora diseñado para simular conversaciones con humanos, ya sea por escrito o por voz. Los chatbots pueden ser utilizados para una variedad de propósitos, como atención al cliente, servicio técnico, entretenimiento y educación.

¿En qué consiste la técnica de fine-tuning?

El fine-tuning es una técnica clave en el desarrollo de IA, que se utiliza para personalizar modelos ya existentes con datos específicos. La conocí en el contexto de ajustar grandes modelos de lenguaje con contextos concretos, para tareas especializadas.

Por ejemplo, puedes entrenar un modelo de IA con un conjunto de datos de conversaciones en un entorno profesional para que el chatbot entienda mejor los matices de ese contexto.

Lo interesante del fine-tuning es que, en lugar de entrenar una IA desde cero, se aprovecha el conocimiento general del modelo base y se adapta a necesidades particulares, lo que reduce tiempo y costes.

Creando nuestro chatbot propio paso a paso.

¿Qué vamos a hacer?

Supongamos que en nuestra empresa el equipo de RRHH es el encargado de resolver las dudas que al personal les surjan respecto a diferentes temas, como, por ejemplo: ¿dónde puedo ver mis últimas nóminas?, Cuantos días de vacaciones tenemos, que días festivos están fijados en el calendario laboral, o cuales son los pasos para pedir vacaciones, o solicitar una ausencia entre otras muchas.

Con el fin de liberar al departamento de RRHH de esta tarea para centrarse en otras más prioritarias, la empresa valora la opción de crear un chatbot con el que los empleados puedan interactuar para resolver las cuestiones pertenecientes a la empresa.

Veamos cómo, con la ayuda de Gemini podemos crear de forma muy sencilla este chatbot que se integre con nuestro negocio.

Paso 1: ¡Conociendo Google AI Studio!

Lo primero que haremos es acceder a Google AI Studio, la plataforma online que nos permitirá ajustar el modelo de Gemini con nuestros propios datos. Para ello accedemos a la web  https://aistudio.google.com/app

RECUERDA: Deberás tener una cuenta Gmail para hacer acceder a esta herramienta.

Echemos un vistazo rápido a la plataforma, Podemos observar que tenemos un panel central donde se puede escribir prompts como si de el propio chat de Gemini se tratase. Y dos paneles laterales, el de la izquierda con un menú de opciones, y a la derecha con un menú de configuración y ajuste del modelo.

En principio nos centraremos en el menú lateral izquierdo, donde si clicamos en la opción New tuned model

En la pantalla tenemos un botón Create a Structure prompt que nos permite hacer un nuevo ajuste al modelo desde una estructura de prompt que la propia herramienta ofrece, o desde Google Sheets o CSV donde tendremos nuestros datos. También existe la opción de seleccionar datos ya existentes a modo de ejemplos.

En la sección Provides Details, definiremos el nombre que le vamos a dar a nuestro modelo ajustado y una breve descripción.

En la última sección, se nos permite elegir el modelo y la configuración de este. En pasos posteriores volveremos a esta configuración y veremos cada una de sus opciones.

Una vez hemos dado un vistazo rápido, es hora de empezar, pero para empezar a ajustar el modelo de Gemini con nuestros datos, necesitamos precisamente eso, nuestros datos.

Paso 2: Preparando nuestros datos

Para ajustar el modelo con datos de la empresa deberemos de recopilar de diferentes fuentes la información, debemos de tener en cuenta que a día de hoy esta opción de ajuste desde Google AI Studio solo nos permite trabajar con textos, además el ajuste solo admite ejemplos de pares de entrada y salida al estilo de chat. Las conversaciones de varios turnos no son compatibles en este momento.

ESTRUCTURA DE NUESTROS DATOS

Los ejemplos de tus datos deben coincidir con el formato y el contenido de tu tráfico de producción. Si tu conjunto de datos incluye palabras clave, instrucciones o un formato específico, los datos en producción deben seguir el mismo esquema. Por ejemplo, si tus ejemplos tienen «question:» y «context:», el tráfico de producción debe incluir ambos en el mismo orden. Si se omite el contexto, el modelo no reconocerá el patrón, incluso si la pregunta ya estaba en el conjunto de datos.

Un ejemplo de conjunto de datos sería:

LIMITACIONES EN LOS DATOS

Debemos de saber que los conjuntos de datos para fine-tuning en el modelo 1.5 flash (más adelante veremos que es el recomendado para este tipo de tareas) tiene ciertas limitaciones:

  • Las entradas tienen un máximo de 40.000 caracteres
  • Las salidas tienen un máximo de 5000 caracteres

¿QUÉ TAMAÑO SE RECOMIENDA EN LOS DATOS DE ENTRENAMIENTO?

 Se puede hacer fine-tuning con tan solo 20 ejemplos, pero cuantos más datos tengamos mejor, lo orientativo suele ser entre 100 y 500, aunque desde Google nos proveen de una tabla, dependiendo de la tarea que queremos realizar cuantos ejemplos debería de constar nuestro conjunto de datos:

NUESTRO CONJUNTO DE DATOS

Una vez hemos visto el formato de los datos, las limitaciones y recomendaciones del tamaño del conjunto de datos, vamos a pasar a crear nuestro propio conjunto de datos.

Como comentamos anteriormente, vamos a simular que tras un arduo trabajo de RRHH nos facilitan una serie de respuestas a preguntas más comunes que les hacen los empleados y nosotros normalizamos todas estas preguntas en un contexto de input/output.

Para este ejemplo, he creado un archivo de Google Sheets en mi Google Drive, donde he creado la columna input y output y la he llenado, en este caso, con 100 ejemplos:

Es importante tener en cuenta, que el proceso de recolección, normalización y estructuración de los datos es fundamental para poder hacer un ajuste fino de calidad a nuestro modelo base. Aunque los datos que utilice para la demo son totalmente ficticios, debían tener coherencia para poder tener un buen resultado final.

Paso 3: Subiendo nuestro conjunto de datos

Para subir nuestro conjunto de datos que tengo alojado en un documento de Google Sheets dentro de Drive, clicamos en el botón Import:

Y una vez seleccionamos el fichero correspondiente le damos a Insertar. A continuación, en la siguiente ventana vamos a marcar el checkbox Use first row as header, para que use la primera fila como cabecera. Y en los desplegables de assign to, vamos a mercar New input column y New output column para cada columna que corresponda, de este modo estaremos indicando a qué contexto pertenece cada columna. Una vez se nos habilita el botón, le damos Import examples

Es importante saber que el tamaño del archivo no puede superar los 4 MB. Una vez termina la carga, podemos ver una pequeña previsualización de los datos para asegurarnos que todo está bien.

Paso 4: Configurando el fine-tuning

Ahora vamos a configurar nuestro ajuste del modelo en base a los datos, para ello podemos especificar la configuración avanzada.

El modelo recomendado por Google para hacer fine-tuning es gemini-1.5-flash-001-tuning Este modelo es un modelo de LLM (lenguaje de gran tamaño) que se destaca principalmente por:

  • Ligero y rápido: Diseñado para tareas de alta frecuencia y bajo costo.
  • Multimodal: Capaz de procesar y entender formatos de datos de texto, imágenes, audio y video.
  • Contexto largo: Secuencias de entrada muy largas y generar respuesta en contexto.

Volviendo a la configuración podemos ver:

  • Tuning epoch (Ciclos de entrenamiento): En el caso de los modelos de lenguaje, un epoch es un ciclo completo en el que el modelo ve todos los datos de entrenamiento una vez. Imagina que estás enseñando a un perro nuevos trucos. Una época sería como una sesión completa de entrenamiento donde le enseñas todos los trucos que quieres que aprenda.
  • Batch size (Tamaño del lote): El tamaño del lote determina cuántos ejemplos de entrenamiento se procesan juntos en cada paso del entrenamiento. Piensa en el entrenamiento como dar de comer a un perro. Un lote sería como la cantidad de comida que usas para alimentarlo. Un lote grande acelera el entrenamiento, pero puede causar que sea más difícil de ajustar.
  • Learning rate multiplier (Multiplicador de la tasa de aprendizaje): La tasa de aprendizaje es como la velocidad a la que el modelo aprende. Si quieres que el modelo aprenda más rápido, aumentan el multiplicador (más de 1). Si quieres que aprenda más despacio y de manera más precisa, disminuyes el multiplicador (entre 0 y 1).

Los parámetros de entrenamiento recomendados son:

Vamos a usar estos valores para ajustar nuestro modelo, los agregamos al formulario y le damos a Tune

Como podemos observar una vez comienza el ajuste, en My library tenemos el estado de este, y si clicamos sobre él nos navegará al detalle del entrenamiento.

En el detalle o resultado del ajuste podemos ver el progreso, en este punto vamos a fijarnos en la gráfica Loss / Epochs

LA CURVA DE PÉRDIDA

Imagina que estás enseñándole a un niño a lanzar una pelota a una canasta. Cada vez que el niño lanza, mide qué tan lejos está la pelota de la canasta. Esa «distancia» es como la pérdida en el entrenamiento de un modelo.

  • La curva de pérdida es una gráfica que muestra cómo esa «distancia» (la pérdida) va disminuyendo a medida que el niño practica (cada época de entrenamiento). Idealmente, queremos que la pelota entre en la canasta (la pérdida sea cero), pero en la realidad, buscamos que se acerque lo más posible.

¿Por qué es importante la curva de pérdida?

  • Nos dice cuándo detener el entrenamiento: Si seguimos entrenando demasiado, el modelo puede empezar a «memorizar» los datos en lugar de generalizar, lo que empeora su rendimiento en nuevos datos. La curva de pérdida nos ayuda a encontrar el punto justo donde el modelo ha aprendido lo suficiente.
  • Muestra si el modelo está aprendiendo: Si la curva de pérdida no disminuye, significa que el modelo no está mejorando y puede haber un problema en el entrenamiento.

En resumen:

  • La curva de pérdida es una herramienta visual que nos ayuda a entender cómo está aprendiendo nuestro modelo.
  • Buscamos el punto más bajo de la curva antes de que se estabilice, ya que ahí es donde el modelo ha alcanzado un buen rendimiento sin sobrentrenarse.

Ejemplo:

Si la curva de pérdida se estabiliza entre las épocas 4 y 6, significa que entrenar más allá de la época 4 no nos dará una mejora significativa en el rendimiento del modelo. Por lo tanto, podemos establecer el número de épocas en 4 y ahorrar tiempo de entrenamiento.

En pocas palabras: La curva de pérdida es como un mapa que nos guía en el entrenamiento de nuestro modelo, ayudándonos a encontrar el mejor punto para detener el proceso y obtener los mejores resultados.

Paso 5: Probando nuestro modelo

Una vez termina nuestro ajuste, podemos probarlo clicando sobre Use in chat

Esto nos navegará a un chat prompt, donde podemos observar en el panel derecho, que se está usando nuestro modelo.

En este panel podemos observar diferentes parámetros de configuración:

  • Token count: Representa el número máximo de tokens que el modelo puede generar en una respuesta. Un token es aproximadamente equivalente a cuatro caracteres. Por ejemplo, si estableces un token count de 100, el modelo generará una respuesta de aproximadamente 60 a 80 palabras. En este caso, para las pruebas tenemos un máximo de 16384 tokens.
  • Temperature: Este parámetro controla la creatividad y la diversidad de las respuestas del modelo. Un valor de temperatura bajo (cercano a 0) generará respuestas más predecibles y concisas, mientras que un valor alto (cercano a 1) producirá respuestas más creativas y diversas, pero potencialmente menos coherentes. Para nuestro caso lo dejaremos en un punto medio 0,5.
  • Advance settings
    • Add stop sequence: Al activar esta opción, puedes especificar una secuencia de tokens que indicará al modelo cuándo detener la generación de texto. Esto es útil para controlar la longitud de las respuestas o para evitar que el modelo genere texto repetitivo.
    • Output length: Este parámetro te permite establecer una longitud máxima para la respuesta generada por el modelo, medida en tokens.
    • TopK: Este parámetro se utiliza para limitar el vocabulario del modelo durante la generación de texto. Solo se considerarán los «K» tokens más probables en cada paso de la generación. Un valor de TopK bajo hace que las respuestas sean más predecibles, mientras que un valor alto aumenta la diversidad.
    • TopP: Similar a TopK, pero en lugar de un número fijo de tokens, TopP define una probabilidad acumulada. Solo se considerarán los tokens cuya probabilidad acumulada sea menor o igual a TopP. Esto permite un control más fino sobre la diversidad de las respuestas.

CHATEANDO CON NUESTRO MODELO

Vamos a hacer algunas pruebas, voy a preguntarle cómo funcionan los turnos de guardias en la empresa, para que me de información al respecto:

Mi prompt será:

Me han asignado un turno de guardia y me gustaría saber cómo se organizan y funcionan este turno.

Y obtengo:

Probemos el modelo un poco más, tengamos una conversación tocando diferentes secciones:

Podemos ver que el modelo se ajusta perfectamente y responde con claridad en base a nuestros datos de entrenamiento.

BONUS: Obteniendo el código para implementar nuestro modelo en diferentes lenguajes de programación.

Trabajar con Google AI Studio está genial, pero probablemente queramos integrar este chatbot en nuestro sistema, para ello podemos obtener el código de este para implementarlo donde más nos encaje.

Para ello, en la esquina superior derecha, clicamos sobre Get Code y se nos abre las diferentes opciones para usar nuestro modelo en diferentes lenguajes.

Es importante remarcar que para usar nuestro modelo en algunos de los lenguajes nos van a requerir OAuth y una API Key. Para ello habrá que registrar el proyecto en Google Cloud.

La idea principal de este artículo es enseñar el proceso de fine-tuning usando la herramienta de Google AI Studio, no obstante, os facilito los recursos de las guía para poder obtener la API KEY y la autenticación con OAuth, de esta forma podéis usar vuestro modelo en cualquier plataforma.

Obtener una API KEY

Authentication con OAuth.

Conclusiones

En este artículo hemos aprendido paso a paso cómo ajustar el modelo de Gemini con la técnica fine-tuning en base a nuestro propio conjunto de datos de forma sencilla usando Google AI Studio con el objetivo de crear un chatbot capaz de resolver las dudas de los empleados en lo concerniente a la empresa donde trabaja.

Este tipo de modelos como Gemini nos dan un sinfín de opciones cuando usamos técnicas de fine-tuning orientadas a realizar tareas concretas, podemos aprovechar todas las ventajas del modelo y hacerlo en el contexto de nuestro negocio.

La herramienta de Google AI Studio nos facilita el trabajo, para aquellas personas que no estén muy familiarizados con lenguajes como python y entornos de trabajos como notebooks colab.

Sin duda, desde Google nos ponen fácil la integración con los modelos de IA generativa, ¿y tú, te animas a crear tu propio chatbot?

Anterior

Visual Testing y Appium

Siguiente

Como RAG lleva la IA a un nuevo nivel de precisión 

Talento O2O

¿Te apetece formar parte de nuestro equipo?

Mira las oportunidades