Prueba

Obtención de información de emails vía IA NLP

//Arteco - Tecnologías de la información
  • :)
  • :0
  • :D
  • ;)
  • :]
foto Ramón Arnau

Ramón Arnau

Gerente de Arteco Consulting SL

En este artículo os enseñamos a utilizar las potentes IAs para procesar emails con lenguaje natural para hacer integraciones automáticas

En este artículo, exploraremos cómo utilizar un modelo de lenguaje de gran escala (LLM) de código abierto y de forma totalmente confidencial junto con Python para procesar correos electrónicos y extraer información estructurada. Nos centraremos en la creación de un sistema que lee emails y crea automáticamente reservas hoteleras basadas en las confirmaciones recibidas, usando inteligencia artificial de forma local partiendo de un modelo pre-entrenado y disponible por la comunidad.

¿Qué es un LLM y por qué usarlo para procesar emails?

Los modelos de lenguaje de gran escala (LLM) son sistemas de inteligencia artificial avanzados capaces de comprender y generar texto de manera similar a los humanos. Al utilizar un LLM de código abierto para procesar emails, podemos:

  1. Interpretar el lenguaje natural de los correos electrónicos
  2. Extraer información relevante de manera precisa
  3. Adaptarnos a diferentes formatos y estilos de email
  4. Manejar variaciones en la forma en que se presenta la información

Configuración del entorno de desarrollo

Para comenzar, necesitaremos configurar nuestro entorno de Python e instalar las bibliotecas necesarias:

pip install transformers torch pandas

Si te da error, prueba con pip3. También te recomendamos que para mantener los directorios de tu computadora lo más limpio posible es que uses virtualenv.

Selección e implementación del LLM

Para este proyecto, utilizaremos el modelo ROBERTA, que es de código abierto y tiene un buen rendimiento en tareas de procesamiento de lenguaje natural:

from transformers import pipeline
model_name = "deepset/roberta-base-squad2"
nlp = pipeline('question-answering', model=model_name, tokenizer=model_name)

Procesamiento de emails y extracción de información

Este modelo es capaz de responder a preguntas sobre un contexto, así que prepararemos una función que iterará sobre las preguntas que queremos hacer sobre el email:

def extract_info_from_email(email_content):
    questions = [
        "What is the hotel name?",
        "What is the check-in date?",
        "What is the check-out date?",
        "How many adults are staying?",
        "How many children are staying?"
    ]

    results = {}

    for question in questions:
        QA_input = {
            'question': question,
            'context': email_content
        }
        res = nlp(QA_input)
        results[question] = res['answer']

    return results

El funcionamiento es muy simple, iteramos sobre cada una de las preguntas predefinidas que se evaluarán contra el contenido textual del email, valor que entra como argumento en la función. Al finalizar ésta, tenemos en results el contenido arrojado por el large language model de inteligencia artificial pre-entrenado.

Creación de reservas hoteleras a partir de la información extraída

Siguiendo con el ejemplo, pasaremos las respuestas predichas por el modelo a una estructura que podamos procesar. Por ejemplo una clase de reserva de hotel:

class HotelReservation:
    def __init__(self, hotel, check_in, check_out, adults, children):
        self.hotel = hotel
        self.check_in = check_in
        self.check_out = check_out
        self.adults = adults
        self.children = children

Datos de prueba como emails

Para realizar las pruebas usaremos emails escritos en lenguaje natural como pueda ser el siguiente:

Dear Guest,

We are pleased to confirm your reservation at Hotel Sunset. Your check-in date is July 15, 2023, and your check-out date is July 20, 2023. The reservation is for 2 adults and 1 child.

Thank you for choosing Hotel Sunset. We look forward to welcoming you.

Best regards, Hotel Sunset Reservations Team

Si el modelo está suficientemente dimensionado y entrenado debería ser capaz de responder con facilidad a las preguntas que se le plantean sobre este texto.

Implementación del sistema completo

El proceso es muy sencillo, veamos como quedaría el sistema completo con todas las funciones mencionadas con anterioridad:

from transformers import pipeline

model_name = "deepset/roberta-base-squad2"
nlp = pipeline('question-answering', model=model_name, tokenizer=model_name)

# Definir la función para extraer información del contenido del email
def extract_info_from_email(email_content):
    questions = [
        "What is the hotel name?",
        "What is the check-in date?",
        "What is the check-out date?",
        "How many adults are staying?",
        "How many children are staying?"
    ]
    
    results = {}
    
    for question in questions:
        QA_input = {
            'question': question,
            'context': email_content
        }
        res = nlp(QA_input)
        results[question] = res['answer']
    
    return results

# Definir la clase de reserva de hotel
class HotelReservation:
    def __init__(self, hotel, check_in, check_out, adults, children):
        self.hotel = hotel
        self.check_in = check_in
        self.check_out = check_out
        self.adults = adults
        self.children = children

# Definir la función para crear una reserva a partir del contenido del email
def create_reservation_from_email(email_content):
    info = extract_info_from_email(email_content)
    
    return HotelReservation(
        hotel=info.get("What is the hotel name?", "Unknown"),
        check_in=info.get("What is the check-in date?", "Unknown"),
        check_out=info.get("What is the check-out date?", "Unknown"),
        adults=int(info.get("How many adults are staying?", "0") or "0"),
        children=int(info.get("How many children are staying?", "0") or "0")
    )

import pandas as pd

# Definir la función para procesar los emails y crear reservas
def process_emails_and_create_reservations(emails):
    reservations = []
    
    for email in emails:
        reservation = create_reservation_from_email(email)
        reservations.append(reservation)
    
    return pd.DataFrame([vars(r) for r in reservations])

# Ejemplo de uso
emails = [
    """
    Dear Guest,
    We are pleased to confirm your reservation at Hotel Sunset. 
    Your check-in date is July 15, 2023, and 
    your check-out date is July 20, 2023. 
    The reservation is for 2 adults and 1 child.
    Thank you for choosing Hotel Sunset. 
    We look forward to welcoming you.
    Best regards,
    Hotel Sunset Reservations Team
    """,
    """
    Dear Guest,
    We are excited to confirm your booking at Playa Resort. 
    Your check-in date is August 1, 2023, and 
    your check-out date is August 7, 2023. 
    The reservation includes 3 adults and 0 children.
    We appreciate your choice of Playa Resort 
    and can't wait to have you with us.
    Best wishes,
    Playa Resort Booking Team
    """
]

reservations_df = process_emails_and_create_reservations(emails)
print(reservations_df)

Resultado de la ejecución

El proceso necesitará realizar unos pasos iniciales que sólo se realizan una vez, como es descargar el modelo llm de internet para alojarlo localmente. Tras su descarga estará disponibles para las siguientes ejecuciones. El proceso mantiene la privacidad de los datos ya que todo ocurre localmente sin compartir información fuera de su computadora.

Si la ejecución es correcta veremos una salida como la siguiente:

python3 main.py
hotel        check_in       check_out  adults  children
0  Hotel Sunset   July 15, 2023   July 20, 2023       2         1
1  Playa Resort  August 1, 2023  August 7, 2023       3         0

Y de esta manera tan sencilla podemos incorporar procesos automáticos para la ingesta de datos con la consecuente reducción de costes y de errores en el mecanografiado.

Conclusiones y próximos pasos

En este artículo, hemos explorado cómo utilizar un LLM de código abierto junto con Python para automatizar el proceso de creación de reservas hoteleras a partir de emails de confirmación. Este enfoque puede mejorar significativamente la eficiencia y precisión en la gestión de reservas.

Algunos próximos pasos podrían incluir:

  1. Mejorar la precisión del modelo con fine-tuning
  2. Implementar manejo de errores y validación de datos
  3. Integrar el sistema con una base de datos de reservas
  4. Desarrollar una interfaz de tipo API para la integración con otras herramientas

Con estas herramientas y técnicas, puedes crear sistemas inteligentes que automaticen tareas complejas de procesamiento de información, ahorrando tiempo y reduciendo errores en diversos contextos empresariales.

Si soluciones como estas, pero más elaboradas, crees que pueden servir para mejorar los procesos en tu organización, no dudes en consultarnos.

Mantente Conectado

Newsletter

¡Mantente al día con lo último en tecnología y negocios! Suscríbete a nuestra newsletter y recibe actualizaciones exclusivas directamente en tu correo.

Reunión Online

No dejes pasar la oportunidad de explorar nuevas posibilidades. ¡Agenda una reunión online con nosotros hoy y comencemos a construir juntos el futuro de tu negocio!

  • :)
  • :0
  • :D
  • ;)
  • :]