Memoria Caso Práctico PLN

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 13

MEMORIA CASO PRÁCTICO PLN

Integrantes:
Roberto Rojas
Danilo Vera

DESARROLLO
El desarrollo del Caso Práctico consistente en el desarrollo de una propuesta para un
chatbot que permita identificar una solicitud de viajes y extraer los elementos de una
cadena de un texto o voz para que sea almacenado en un archivo .json con la finalidad
de almacenar de forma adecuada en un repositorio o base de datos.

La dinámica empleada por el grupo consiste en dos componentes que implica la


utilización de dos enfoques para el entrenamiento de las frases. Por un lado, se hace uso
del corpus inicial y se va generando un entrenamiento con frases nuevas las cuales se
verifican que se hayan taggeado correctamente para posteriormente por medio de
reglas REGEX (expresiones regulares) identificar los elementos del pedido que el cliente
puede realizar por texto o voz. Por otro lado, se hace uso de entidades spacy que de
igual manera parten de un corpus que tiene que ver con la temática de reservas de
vuelos. Estos dos enfoques principalmente se desarrollan en la parte básica.

A continuación, se resumen los elementos del caso práctico estructurados en los tres
puntos que sostiene el enunciado: (1) Parte básica, (2) Parte intermedia y (3) Parte
avanzada.

1. Parte Básica
Generar una tabla o JSON que contenga la siguiente información de cada mensaje:

Para el mensaje: “Comprar tres billetes para el 15 de octubre con Iberia de Madrid a
Bilbao”. Se debe obtener:

{'origen': 'Madrid',
'destino': 'Bilbao',
'fecha': '15 de octubre',
'cantidad': 3,
'aerolinea': 'Iberia'}

Para la frase “Billete de Berlín a Madrid con Lufthansa”. Se debe obtener:

{'origen': 'Berlín',
'destino': 'Madrid',
'fecha': None,
'cantidad': 1,
'aerolinea': 'Lufthansa'}

1.1. Componente 1

Se trabajará con la librería NLTK, con el tokenizador incluido en la librería y los 4 taggers
vistos en los contenidos del módulo. También es necesario contar con el RegEx Parser
de NLTK. Por último, como complementos no obligatorios pero que utilizaremos para dar
formato o hacer más sencillo el trabajo
Se carga el corpus al cual se le incluyen frases adicionales que se consideran necesarias
para un correcto entrenamiento de los taggers para lo cual es necesario generar los
conjuntos de Train y Test

Teniendo los conjuntos ya creados, se procede a entrenar los taggers. Para entrenar se
hará uso de HiddenMarkovModelTagger mediante la función .train(). Esto con la
finalidad de ganar precisión en el entrenamiento. Este proceso brinda un resultado de:

Test con nuevas frases


Luego, es necesario realizar un proceso repetitivo de test de nuevas frases con la
finalidad de incrementar el corpus y mejorar la precisión. Para ello es necesario generar
nuevas frases de la temática para ver cómo es el rendimiento con nuestro conjunto de
datos. Hay que tener cuidado de no eliminar las stopwords, lematicemos o derivemos,
al contrario; si hacemos todos estos pasos estaremos eliminando información que
utilizarán los taggers para encontrar las etiquetas.
COMENTARIO: La corrección del tagger es un proceso repetitivo para conseguir
mejorar los resultados. Es un proceso que se podría podríamos acortar en gran manera
si tuviésemos un corpus con miles de frases taggeadas, pero de nuestro contexto en
concreto, veamos qué resultados se obtienen con un entrenamiento de más de 20
frases.

Elaborar una función que reconozca una solicitud de pasajes


Para ello tendremos que utilizar RegEx Parser y las reglas lógicas. En nuestro caso,
podemos utilizar las que hemos visto en la teoría del módulo estudiado. con la gramática
creada (y probada), vamos a crear la función del regex que extraiga la información

Una definidas la estructura que nos ayudará a identificar el contenido de una frase por
medio de expresiones regulares definimos una función para reutilizar el proceso las veces
que sean necesarias.

Esto permite identificar los elementos necesarios para generar el proceso de reserva:
1.2. Componente 2

CREACION DEL CORPUS


Dentro de este caso práctico se ha desarrollado un código en Python para generar un
corpus de frases centrado en las reservaciones de viaje. Inicialmente, se han definido
listas de ciudades y aerolíneas, proporcionando una base para las opciones de viaje. Se
ha implementado una función para crear fechas aleatorias, adaptándose a la
variabilidad en los planes de viaje.

Posteriormente, se han diseñado estructuras de frases que reflejan distintas maneras de


realizar solicitudes de vuelo. Finalmente, se ha combinado estos elementos para formar
frases realistas, utilizando selección aleatoria de los datos. Este corpus tiene un papel
clave en el entrenamiento de modelos de lenguaje para la comprensión y generación
de texto en contextos de inteligencia artificial, especialmente en aplicaciones que
requieren interacciones naturales en escenarios específicos, como las reservaciones de
viajes. Este trabajo ilustra la importancia de los datos variados y realistas en el ámbito de
la IA.
TOKENIZACIÓN Y LEMATIZACIÓN
Continuando con el desarrollo del proyecto, se ha integrado el uso de la biblioteca nltk
para el procesamiento del lenguaje natural, específicamente para la tokenización de
las frases en el corpus. El objetivo de esta etapa es desglosar cada frase en
componentes individuales, conocidos como 'tokens', que son esencialmente palabras y
números.

El proceso comienza convirtiendo cada frase del corpus en una lista de tokens utilizando
word_tokenize, configurada para el idioma español. Luego, se realiza un filtrado para
conservar solo palabras y números, excluyendo otros caracteres. Esto se logra mediante
una comprensión de lista que verifica si cada token es alfabético o numérico.

Este enfoque de tokenización y filtrado es vital para simplificar el análisis del lenguaje y
facilitar el procesamiento de los datos. Al enfocarse en palabras y números relevantes,
se elimina el ruido y se preparan los datos para etapas posteriores de análisis, como la
generación de modelos de lenguaje o la clasificación de texto. Este proceso refleja un
compromiso con la precisión y la eficiencia en el tratamiento de datos lingüísticos, un
aspecto crucial en el campo de la inteligencia artificial y el procesamiento del lenguaje
natural.
El avance en el proyecto incluye ahora la integración de un proceso de limpieza de los
tokens utilizando la biblioteca nltk. Este paso es crucial para eliminar las palabras que no
aportan significado relevante al análisis, conocidas como 'stopwords'. Se ha obtenido
una lista de estas palabras en español, de la cual se han excluido intencionalmente
ciertas preposiciones como 'a', 'de', 'desde' y 'hasta' debido a su posible relevancia en
el contexto de reservaciones de viajes.

Posteriormente, se ha procedido a filtrar los tokens de cada frase, eliminando aquellas


palabras que son parte de la lista de stopwords. Este proceso resulta en un conjunto de
tokens más limpio y enfocado, que representa de manera más precisa el contenido
significativo de cada frase.

Este paso de limpieza es fundamental para afinar el análisis de los datos y preparar el
corpus para aplicaciones más avanzadas, como el entrenamiento de modelos de
clasificación o análisis de sentimiento. Refleja un enfoque detallado y cuidadoso en el
procesamiento de lenguaje natural, asegurando que los datos sean lo más relevantes y
útiles posible para las aplicaciones de inteligencia artificial.

El proceso de lematización se ha integrado en el proyecto utilizando la biblioteca spacy,


específicamente el modelo es_core_news_sm para el español. Esta etapa es
fundamental para reducir los tokens a su forma base o lema, lo que ayuda a
estandarizar las variaciones de palabras y facilita el análisis lingüístico.

Para cada conjunto de tokens limpios, se crea un documento en spacy y se realiza la


lematización. Los lemas obtenidos se almacenan en una nueva estructura, creando así
un corpus de tokens lematizados.

El proceso de lematizacion es esencial para la normalización del corpus y juega un


papel crucial en tareas de procesamiento de lenguaje natural como el análisis de
temas, la clasificación de texto y el entrenamiento de modelos de lenguaje. Al centrarse
en la forma lematizada de las palabras, se aumenta la eficiencia del análisis y se mejora
la calidad de los datos para futuras aplicaciones en inteligencia artificial y aprendizaje
automático.
CORPUS CON ETIQUETAS SPACY
El siguiente paso en el proyecto involucra la aplicación de etiquetado gramatical
utilizando spacy. Este proceso es esencial para identificar las categorías gramaticales
(como sustantivos, verbos, adjetivos) de cada token en el corpus. Utilizando el modelo
en español de spacy, es_core_news_sm, se realiza un análisis detallado de cada frase.

La función etiquetar_con_spacy toma los tokens lematizados y los convierte en frases,


sobre las cuales spacy realiza el análisis gramatical. Cada token se etiqueta con su
categoría gramatical correspondiente, resultando en un corpus enriquecido con
información sintáctica.

Este enriquecimiento es crucial para comprender mejor la estructura y el contenido de


las frases, lo cual es especialmente valioso en tareas avanzadas de procesamiento de
lenguaje natural como el análisis sintáctico, la extracción de información y la
comprensión del texto. La combinación de lematización y etiquetado gramatical refleja
un enfoque sofisticado y completo en el tratamiento de datos lingüísticos.

ENTRENAMIENTO DEL CORPUS


El caso práctico avanza con la implementación de un modelo de Reconocimiento de
Entidades Nombradas (NER) utilizando Conditional Random Fields (CRF), una técnica
avanzada en el campo del procesamiento del lenguaje natural. Primero, se extraen
características relevantes de cada palabra en el corpus etiquetado, considerando
aspectos como la forma de la palabra, su posición y su etiqueta gramatical.

Luego, se preparan los datos para entrenar el modelo, dividiéndolos en conjuntos de


entrenamiento y prueba. Se utiliza el modelo CRF de la biblioteca sklearn_crfsuite,
configurado con parámetros específicos para optimizar su rendimiento. Tras entrenar el
modelo con los datos de entrenamiento, se realiza una evaluación utilizando el conjunto
de prueba.

Finalmente, se emplea classification_report de Scikit-learn para generar un informe


detallado de la clasificación, proporcionando métricas como precisión, recall y F1-score
para cada etiqueta. Este informe es esencial para evaluar la eficacia del modelo y
comprender su rendimiento en la tarea de etiquetado de entidades nombradas. Este
paso demuestra una aplicación práctica y avanzada de técnicas de aprendizaje
automático en el procesamiento de lenguaje natural.

A continuación, se realiza la parte básica del caso práctico implica la integración de


varias tecnologías para analizar y procesar consultas de viaje en lenguaje natural. Se
utiliza spacy para la tokenización y el etiquetado gramatical, junto con un modelo CRF
previamente entrenado para la identificación de entidades. Además, se incorpora una
función para convertir consultas de viaje en formato JSON, lo que permite una
interpretación estructurada y detallada de la información.

La función generar_json procesa la frase del usuario, identificando y extrayendo


elementos clave como el origen, destino, fecha, cantidad de billetes y aerolínea. Utiliza
una lógica específica para identificar estos componentes, incluyendo la búsqueda de
ciudades y aerolíneas predefinidas, así como la interpretación de números y fechas.

Este enfoque demuestra una aplicación práctica de procesamiento del lenguaje


natural y aprendizaje automático en un contexto de interacción con el usuario,
ofreciendo una solución automatizada para entender y responder a consultas
relacionadas con reservaciones de viaje. La capacidad de convertir consultas en un
formato estructurado como JSON es particularmente útil para aplicaciones que
requieren un procesamiento posterior o integración con otros sistemas.
2. PARTE INTERMEDIA
El proyecto ahora incluye la integración de reconocimiento de voz y síntesis de voz para
crear un asistente interactivo. Utilizando la biblioteca speech_recognition para el
reconocimiento de voz y pyttsx3 para la síntesis de voz, se ha desarrollado una interfaz
que permite a los usuarios interactuar verbalmente.

El asistente inicia preguntando al usuario cómo puede ayudar. Luego, procesa la


respuesta del usuario mediante el reconocimiento de voz. La frase reconocida se analiza
utilizando spacy y la función generar_json para extraer la información relevante de la
consulta de viaje. Dependiendo de los términos identificados en la consulta, el asistente
proporciona una respuesta adecuada, ya sea buscando vuelos, ofreciendo
promociones o solicitando más detalles.

Este desarrollo representa un avance significativo en la creación de un sistema de


asistencia de viajes automatizado y conversacional, utilizando técnicas avanzadas de
procesamiento del lenguaje natural y aprendizaje automático para ofrecer una
experiencia de usuario interactiva y eficiente.

3. PARTE AVANZADA
Este código avanza en el proyecto al integrar la funcionalidad de traducción y consulta
a una API para obtener códigos de aeropuertos IATA. Utiliza la biblioteca googletrans
para traducir los nombres de las ciudades al inglés y luego consulta la API de Air-Port-
Codes para obtener los códigos IATA correspondientes.
El proceso comienza con la función traducir_ciudad_a_ingles, que traduce el nombre
de una ciudad del español al inglés. Luego, obtener_codigo_iata utiliza esta traducción
para hacer una solicitud a la API y obtener el código IATA.

La función generar_json se ha mejorado para incluir esta nueva funcionalidad. Ahora,


después de extraer la información esencial de la frase del usuario, como origen y
destino, busca los códigos IATA correspondientes y los incorpora en el JSON generado.
Este enfoque mejora significativamente la utilidad del sistema, permitiendo una
integración más precisa y útil con sistemas de reservas de vuelos y otros servicios
relacionados con viajes.

EJEMPLOS

Se define entonces una función que permita realizar las veces que se desee la
extracción de los códigos IATA:
EJEMPLOS

Los ejemplos finales integran la posibilidad de generar una solicitud tanto con ingreso
de texto o con ingreso de voz utilizando las funciones elaboradas. Finalmente,
guardamos los resultados obtenidos en un archivo .json de acuerdo a los requerimientos
iniciales:

También podría gustarte

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy