Atender las consultas de los clientes, incluidos los correos electrónicos, es una parte necesaria de la administración de muchas empresas, pero puede ser abrumador con rapidez. Con un poco de esfuerzo, los modelos de inteligencia artificial (IA) como Gemma pueden ayudar a facilitar este trabajo.
Cada empresa maneja las consultas como los correos electrónicos de forma un poco diferente, por lo que es importantes para poder adaptar tecnologías como la IA generativa a las necesidades su empresa. Este proyecto aborda el problema específico de extraer el orden desde correos electrónicos hasta una panadería y transformarlos en datos estructurados, agregado al sistema de gestión de pedidos. Con 10 a 20 ejemplos de consultas y el resultado que deseas, puedes ajustar un modelo de Gemma para procesar los correos electrónicos de tus clientes, ayudarte a responder con rapidez y realizar la integración con tus sistemas empresariales existentes. Este proyecto se compiló como un patrón de aplicación de IA que puedes extender y adaptar obtener valor de los modelos de Gemma para tu negocio.
Si quieres ver una descripción general en video del proyecto y cómo ampliarlo, incluidas las estadísticas de las personas que lo crearon, consulta el video Asistente de IA de correo electrónico empresarial de Build with Google AI. También puedes revisar el código de este proyecto en el repositorio de código de Gemma Cookbook. De lo contrario, puedes comenzar a extender el proyecto con las siguientes instrucciones.
Descripción general
En este instructivo, aprenderás a configurar, ejecutar y extender una empresa de asistencia de correo electrónico compilada con Gemma, Python y Flask. El proyecto proporciona una interfaz de usuario web básica que puedes modificar para satisfacer tus necesidades. El La aplicación está diseñada para extraer datos desde los correos electrónicos de los clientes hacia una estructura para una panadería ficticia. Puedes usar este patrón de aplicación para cualquier negocio que usa entrada de texto y salida de texto.
Figura 1: Interfaz de usuario del proyecto para procesar consultas por correo electrónico de la panadería
Requisitos de hardware
Ejecuta este proceso de ajuste en una computadora con una unidad de procesamiento gráfico (GPU) o una unidad de procesamiento tensorial (TPU) y suficiente memoria de GPU o TPU para contener el modelo existente, además de los datos de ajuste. Para ejecutar la configuración de ajuste en este proyecto, necesitas alrededor de 16 GB de memoria de GPU, aproximadamente la misma cantidad de RAM normal y un mínimo de 50 GB de espacio en disco.
Puedes ejecutar la parte de ajuste del modelo de Gemma de este instructivo con un entorno de Colab con un entorno de ejecución de GPU T4. Si estás construyendo este proyecto sobre un Google Cloud Instancia de VM, configura la instancia de acuerdo con estos requisitos:
- Hardware de GPU: Se requiere una NVIDIA T4 para ejecutar este proyecto (se recomienda NVIDIA L4 o una versión posterior).
- Sistema operativo: Elige una opción de Aprendizaje profundo en Linux. En específico, VM de aprendizaje profundo con CUDA 12.3 M124 con Controladores de software de GPU.
- Tamaño del disco de arranque: Aprovisiona al menos 50 GB de espacio en el disco para tu datos, modelos y software de respaldo.
Configura el proyecto
Estas instrucciones te guiarán a través de la preparación del proyecto para su desarrollo y pruebas. Los pasos de configuración generales incluyen instalar el software de requisitos, clonar el proyecto desde el repositorio de código, configurar variables, instalar bibliotecas de Python y probar la aplicación web.
Instalación y configuración
En este proyecto, se usan Python 3 y entornos virtuales (venv
) para administrar paquetes
y ejecutar la aplicación. Las siguientes instrucciones de instalación son para una máquina anfitrión Linux.
Para instalar el software requerido, sigue estos pasos:
Instala Python 3 y el paquete de entorno virtual
venv
para Python:sudo apt update sudo apt install git pip python3-venv
Cómo clonar el proyecto
Descarga el código del proyecto en tu computadora de desarrollo. Necesitas el software de control de código fuente git para recuperar el código fuente del proyecto.
Para descargar el código del proyecto, haz lo siguiente:
Clona el repositorio de git con el siguiente comando:
git clone https://github.com/google-gemini/gemma-cookbook.git
De manera opcional, configura tu repositorio de git local para usar el control de revisión disperso, de modo que solo tengas los archivos del proyecto:
cd gemma-cookbook/ git sparse-checkout set Demos/business-email-assistant/ git sparse-checkout init --cone
Instala bibliotecas de Python
Instala las bibliotecas de Python con el entorno virtual venv
de Python
activado para administrar paquetes y dependencias de Python. Asegúrate de activar el entorno virtual de Python antes de instalar las bibliotecas de Python con el instalador pip
. Para obtener más información sobre el uso de entornos virtuales de Python, consulta el
Python venv.
Para instalar las bibliotecas de Python, sigue estos pasos:
En una ventana de terminal, navega al directorio
business-email-assistant
:cd Demos/business-email-assistant/
Configura y activa el entorno virtual de Python (venv) para este proyecto:
python3 -m venv venv source venv/bin/activate
Instala las bibliotecas de Python necesarias para este proyecto con el Secuencia de comandos
setup_python
:./setup_python.sh
Configure las variables de entorno
Este proyecto requiere algunas variables de entorno para ejecutarse, como un nombre de usuario y un token de la API de Kaggle. Debes tener un Kaggle
y solicitar acceso a los modelos de Gemma para poder descargarlos. Para
este proyecto, agrega tu nombre de usuario de Kaggle y tu token de la API de Kaggle a dos .env
que lee la aplicación web y el programa de ajuste,
respectivamente.
Para configurar las variables de entorno, sigue estos pasos:
- Obtén tu nombre de usuario de Kaggle y tu clave de token siguiendo las instrucciones. en la documentación de Kaggle.
- Para obtener acceso al modelo de Gemma, sigue las instrucciones de Obtén acceso a Gemma en la página Configuración de Gemma.
- Crea archivos de variables de entorno para el proyecto creando un
.env
en cada ubicación de tu clonación del proyecto:email-processing-webapp/.env model-tuning/.env
Después de crear los archivos de texto
.env
, agrega la siguiente configuración a ambos archivos:KAGGLE_USERNAME=<YOUR_KAGGLE_USERNAME_HERE> KAGGLE_KEY=<YOUR_KAGGLE_KEY_HERE>
Ejecuta y prueba la aplicación
Cuando hayas completado la instalación y configuración del proyecto, ejecuta la aplicación web para confirmar que la configuraste correctamente. Debes hacerlo como una verificación de referencia antes de editar el proyecto para tu propio uso.
Para ejecutar y probar el proyecto, haz lo siguiente:
En una ventana de terminal, navega al directorio
email-processing-webapp
:cd business-email-assistant/email-processing-webapp/
Ejecuta la aplicación con la secuencia de comandos
run_app
:./run_app.sh
Después de iniciar la aplicación web, el código del programa muestra una URL en la que puedes navegar y realizar pruebas. Por lo general, esta dirección es la siguiente:
http://127.0.0.1:5000/
En la interfaz web, presiona el botón Obtener datos debajo de la primera entrada. para generar una respuesta del modelo.
La primera respuesta del modelo después de ejecutar la aplicación tarda más ya que debe completar los pasos de inicialización en la ejecución de primera generación. Solicitudes de instrucciones posteriores y generación en una aplicación web que ya está en ejecución completar en menos tiempo.
Extiende la aplicación
Una vez que la aplicación esté en ejecución, puedes extenderla modificando el nombre de usuario y la lógica empresarial para que funcione en tareas que son relevantes para ti o tu empresa. También puedes modificar el comportamiento del modelo Gemma usando el el código de la aplicación cambiando los componentes del mensaje que la app envía el modelo de IA generativa.
La aplicación proporciona instrucciones al modelo junto con los datos de entrada. una instrucción completa del modelo por parte del usuario. Puedes modificar estas instrucciones para cambiar el comportamiento del modelo, como especificar los nombres de los parámetros y la estructura del JSON que se generará. Una forma más sencilla de cambiar el comportamiento de el modelo es proporcionar instrucciones o guías adicionales a los datos de respuesta, como especificar que las respuestas generadas no deben incluir ningún Formato Markdown.
Para modificar las instrucciones de la instrucción, haz lo siguiente:
- En el proyecto de desarrollo, abre el archivo de código
business-email-assistant/email-processing-webapp/app.py
. En el código
app.py
, agrega instrucciones adicionales al Funciónget_prompt():
:def get_prompt(): return """ Extract the relevant details of this request and return them in JSON code, with no additional markdown formatting:\n"""
En este ejemplo, se agrega la frase "sin formato de Markdown adicional" a las instrucciones.
Proporcionar instrucciones adicionales puede influir en gran medida en la generación del rendimiento y su implementación requiere mucho menos esfuerzo. Primero, debes probar este método para ver si puedes obtener el comportamiento que deseas del modelo. Sin embargo, usar instrucciones instrucciones para modificar el comportamiento de un modelo Gemma tiene su límites. En particular, el límite general de tokens de entrada del modelo, que se 8,192 tokens para Gemma 2, requiere que equilibras las instrucciones de instrucción detalladas con el tamaño de los nuevos datos que proporciones para mantenerte por debajo de ese límite.
Ajusta el modelo
La forma recomendada de hacer que un modelo de Gemma responda de manera más confiable en tareas específicas es realizar un ajuste fino. En particular, si deseas que el modelo genere JSON con una estructura específica, incluidos parámetros con nombres específicos, deberías considerar ajustar el modelo para ese comportamiento. Según la tarea que quieras que realice el modelo, puedes lograr con 10 a 20 ejemplos. Esta sección del instructivo se explica cómo configurar y realizar ajustes en un modelo Gemma para una tarea específica.
Las siguientes instrucciones explican cómo realizar la operación de ajuste en una en un entorno de VM, también puedes realizar esta operación de ajuste asociadas Notebook de Colab para este proyecto.
Requisitos de hardware
Los requisitos de procesamiento para el ajuste son los mismos que requisitos de hardware para el resto del proyecto. Puedes ejecutar la operación de ajuste en un entorno de Colab con un entorno de ejecución de GPU T4 si limitas los tokens de entrada a 256 y el tamaño del lote a 1.
Preparar los datos
Antes de comenzar a ajustar un modelo de Gemma, debes preparar los datos para el ajuste. Cuándo un modelo para una tarea específica, necesitas un conjunto de solicitudes de respuesta ante incidentes. Estos ejemplos deben mostrar el texto de la solicitud, sin instrucciones y el texto de respuesta esperado. Para empezar, debes preparar un conjunto de datos con alrededor de 10 ejemplos. Estos ejemplos deben representar una variedad completa de solicitudes y las respuestas ideales. Asegúrate de que las solicitudes y respuestas no sean repetitivas, ya que eso puede hacer que las respuestas de los modelos sean repetitivas y no se ajusten de forma adecuada a las variaciones en las solicitudes. Si eres ajustar el modelo para producir un formato de datos estructurados, asegúrate de que todos los se ajustan estrictamente al formato de salida de datos que desees. En la siguiente tabla, se muestran algunos registros de muestra del conjunto de datos de este ejemplo de código:
Solicitud | Respuesta |
---|---|
Hola Indian Bakery Central:\n¿Tienes 10 pendas? treinta bundi lados a mano? ¿También venden glaseado de vainilla y pasteles de chocolate? Busco un tamaño de 6 pulgadas | { "type": "inquiry", "items": [ { "name": "pendas", "quantity": 10 }, { "name": "bundi ladoos", "quantity": 30 }, { "name": "cake", "filling": null, "frosting": "vanilla", "flavor": "chocolate", "size": "6 in" } ] } |
Vi tu empresa en Google Maps. ¿Vendes jellabi y gulab? Jamun? | { "type": "inquiry", "items": [ { "name": "jellabi", "quantity": null }, { "name": "gulab jamun", "quantity": null } ] } |
Tabla 1: Lista parcial del conjunto de datos de ajuste para el extractor de datos de correo electrónico de la panadería.
Carga y formato de datos
Puedes almacenar tus datos de optimización en cualquier formato que te resulte conveniente, incluidos
los registros de la base de datos, los archivos JSON, CSV o de texto sin formato, siempre que tengas los
medios para recuperar los registros con código Python. Este proyecto lee archivos JSON de un directorio data
en un array de objetos de diccionario.
En este ejemplo de programa de ajuste, el conjunto de datos de ajuste se carga en el módulo model-tuning/main.py
con la función prepare_tuning_dataset()
:
def prepare_tuning_dataset():
# collect data from JSON files
prompt_data = read_json_files_to_dicts("./data")
...
Como se mencionó anteriormente, puedes almacenar el conjunto de datos en un formato que sea conveniente, siempre que puedas recuperar las solicitudes con las respuestas asociadas y ensamblarlas en una cadena de texto que se use como registro de ajuste.
Cómo ensamblar registros de ajuste
Para el proceso de ajuste real, el programa organiza cada solicitud y respuesta
en una sola cadena con las instrucciones y el contenido de la
respuesta. Luego, el programa de ajuste tokeniza la cadena para que el
modelo la consuma. Puedes ver el código para ensamblar un registro de ajuste en la
función prepare_tuning_dataset()
del módulo model-tuning/main.py
, de la siguiente manera:
def prepare_tuning_dataset():
...
# prepare data for tuning
tuning_dataset = []
template = "{instruction}\n{response}"
for prompt in prompt_data:
tuning_dataset.append(template.format(instruction=prompt["prompt"],
response=prompt["response"]))
return tuning_dataset
Esta función toma los datos como su entrada y los formatea agregando un salto de línea. entre la instrucción y la respuesta.
Genera pesos del modelo
Una vez que tengas los datos de ajuste en su lugar y se estén cargando, puedes ejecutar el programa de ajuste. El proceso de ajuste de esta aplicación de ejemplo usa la biblioteca de NLP de Keras para ajustar el modelo con una adaptación de clasificación baja, o técnica LoRA, para generar nuevas ponderaciones del modelo. En comparación con el ajuste de precisión completa, usar LoRA es mucho más eficiente en términos de memoria porque se aproxima a los cambios los pesos del modelo. Luego, puedes superponer estos pesos aproximados en los pesos del modelo existente para cambiar su comportamiento.
Para realizar la ejecución del ajuste y calcular los pesos nuevos, haz lo siguiente:
En una ventana de terminal, navega al directorio
model-tuning/
.cd business-email-assistant/model-tuning/
Ejecuta el proceso de ajuste con la secuencia de comandos
tune_model
:./tune_model.sh
El proceso de ajuste tarda varios minutos según los recursos de procesamiento disponibles. Cuando se completa correctamente, el programa de ajuste escribe nuevos archivos de peso *.h5
en el directorio model-tuning/weights
con el siguiente formato:
gemma2-2b_inquiry_tuned_4_epoch##.lora.h5
Solución de problemas
Si el ajuste no se completa correctamente, existen dos motivos posibles:
- Sin memoria o recursos agotados: Estos errores se producen cuando el proceso de ajuste solicita memoria que supera la memoria disponible de la GPU o de la CPU. Asegúrate de no ejecutar la aplicación web mientras se ejecuta el proceso de ajuste. Si realizas la configuración en un dispositivo con 16 GB de memoria de GPU, asegúrate de que
token_limit
esté configurado en 256 ybatch_size
en 1. - Controladores de GPU no instalados o incompatibles con JAX: El proceso de giro requiere que el dispositivo de procesamiento tenga controladores de hardware instalados compatible con la versión del Bibliotecas JAX Para obtener más detalles, consulta la Instalación de JAX en la documentación de Google Cloud.
Implementa el modelo ajustado
El proceso de ajuste genera varios pesos según los datos de ajuste y las la cantidad total de ciclos de entrenamiento establecidos en la aplicación de ajuste. De forma predeterminada, el programa de optimización genera 3 archivos de pesos del modelo, uno para cada época de optimización. Cada de ajuste sucesivo produce pesos que reproducen con mayor precisión el resultados de los datos de ajuste. Puedes ver las tasas de precisión de cada ciclo de entrenamiento en el resultado de la terminal del proceso de ajuste, como se muestra a continuación:
...
8/8 ━━━━━━━━━━━━━━━━━━━━ 121s 195ms/step - loss: 0.5432 - sparse_categorical_accuracy: 0.5982
Epoch 2/3
8/8 ━━━━━━━━━━━━━━━━━━━━ 2s 194ms/step - loss: 0.3320 - sparse_categorical_accuracy: 0.6966
Epoch 3/3
8/8 ━━━━━━━━━━━━━━━━━━━━ 2s 192ms/step - loss: 0.2135 - sparse_categorical_accuracy: 0.7848
Si bien quieres que la tasa de precisión sea relativamente alta, alrededor de 0.80, no quieren que la tasa sea muy alta, o muy cercana a 1.00, porque eso significa que los pesos se acercaron a sobreajustar los datos de ajuste. Cuando eso sucede, el modelo no funciona bien en solicitudes significativamente diferentes de los ejemplos de ajuste. De forma predeterminada, la secuencia de comandos de implementación elige el ciclo de entrenamiento 3. con una tasa de exactitud de alrededor de 0.80.
Para implementar las ponderaciones generadas en la aplicación web, haz lo siguiente:
En una ventana de terminal, navega al directorio
model-tuning
:cd business-email-assistant/model-tuning/
Ejecuta el proceso de ajuste con la secuencia de comandos
deploy_weights
:./deploy_weights.sh
Después de ejecutar esta secuencia de comandos, deberías ver un nuevo archivo *.h5
en el
email-processing-webapp/weights/
.
Prueba el modelo nuevo
Una vez que hayas implementado las nuevas ponderaciones en la aplicación, es hora de probar el modelo ajustado. Para ello, vuelve a ejecutar la aplicación web y genera una respuesta.
Para ejecutar y probar el proyecto, haz lo siguiente:
En una ventana de terminal, navega al directorio
email-processing-webapp
:cd business-email-assistant/email-processing-webapp/
Ejecuta la aplicación con la secuencia de comandos
run_app
:./run_app.sh
Después de iniciar la aplicación web, el código del programa enumera una URL donde puede explorar y probar. Esta dirección suele ser la siguiente:
http://127.0.0.1:5000/
En la interfaz web, presiona el botón Get data debajo del primer campo de entrada para generar una respuesta del modelo.
Ya ajustaste e implementaste un modelo de Gemma en una aplicación. Experimenta con la aplicación y trata de determinar los límites de la capacidad de generación del modelo ajustado para tu tarea. Si encuentras situaciones en las que el modelo no tiene un buen rendimiento considera agregar algunas de esas solicitudes a tu lista de datos de ejemplo de ajuste agregando la solicitud y proporcionando una respuesta ideal. Luego, vuelve a ejecutar el ajuste. implementar las ponderaciones nuevas y probar el resultado.
Recursos adicionales
Para obtener más información sobre este proyecto, consulta el repositorio de código de Gemma Cookbook. Si necesitas ayuda para compilar la aplicación o deseas colaborar con otros desarrolladores, consulta el servidor de Discord de la comunidad de Google Developers. Para ver más proyectos de la IA de Build with Google, consulta la lista de reproducción de videos.