Technical
Detección de duplicados en datos de texto
Beatriz Santos · 25 de octubre de 2022
Un caso de uso común en varias industrias es la creación de sistemas capaces de detectar la similitud entre pares de objetos, tanto imágenes como textos. Por ejemplo, la detección de duplicados en plataformas de comercio electrónico o sistemas de recomendación que muestran objetos similares a los que el usuario ha buscado pueden utilizar tales sistemas. También resultan útiles para detectar plagio en tesis o artículos dada la ingente cantidad de publicaciones a lo largo de los años. Por tanto, siendo el texto una modalidad de datos tan extendida, la capacidad de detectar duplicados en texto es una tarea crítica en aprendizaje automático.
Pero, ¿cómo podemos construir estos sistemas? Un humano percibe fácilmente la similitud entre dos frases expresadas de manera diferente. Por ejemplo, las frases "Ella sobrevivió" y "Ella no murió" tienen el mismo significado. Se espera que un algoritmo de similitud textual identifique una tasa de similitud muy alta. Para lograr esto, el aprendizaje automático es el camino correcto, pero no es sencillo debido a las complejidades del procesamiento del lenguaje natural (PLN).
Este artículo describe la creación de dos herramientas que desarrollé bajo la orientación de Pedro Dias, científico de datos en NILG.AI, para mi prácticas curriculares.
Procesamiento del lenguaje natural y modelado de texto
El PLN es un subcampo de la inteligencia artificial que se ocupa de las interacciones entre computadoras y lenguaje humano, en particular de cómo programar máquinas para procesar y analizar grandes volúmenes de datos de lenguaje natural.
El modelado de texto fue la base principal de mi trabajo. Consiste en analizar datos textuales para identificar un grupo de palabras de una colección de documentos que mejor represente la información contenida en esa colección.
Por supuesto, existen muchas formas de realizar extracción de características a partir de textos, pero la opción elegida fue utilizar Word2vec y bag-of-N-gram.
Word2Vec es un método para obtener representaciones de palabras (word embedding), un término utilizado para representar palabras en un espacio vectorial para análisis textual. Una vez entrenado, puede detectar palabras sinónimas o sugerir palabras adicionales para una oración incompleta.
Bag-of-N-gram es una técnica que cuenta cuántas veces aparece un N-grama en un documento. Un N-grama es una secuencia de N palabras donde N es un número entre 1 e infinito. Por ejemplo, dada la oración "Hola vecino puerta al lado", "Hola vecino" es un bigrama (2-grama) mientras que "Hola vecino puerta al lado" es un 4-grama.
Detección de duplicados en texto mediante aprendizaje automático
Una de las herramientas creadas tuvo como objetivo calcular la similitud entre dos textos introducidos por el usuario. Para ello, se creó una representación abstracta de estos textos con diferentes métodos. El siguiente paso fue calcular la distancia entre estas representaciones abstractas, generando la probabilidad de ser similares. A continuación se presenta un esquema para comprender mejor estos pasos.
La otra herramienta creada permitía al usuario introducir un texto y recibía los 10 textos más similares de un banco de textos. Este banco de textos pertenece a un conjunto de datos de Quora Question Pairs.
Se emplearon tres enfoques diferentes en el desarrollo del producto: uno no supervisado, utilizando Word2Vec y Bag-of-N-gram para la representación abstracta, uno supervisado, utilizando Regresión Logística, y otro que simula situaciones del mundo real que se explica más adelante.
Todos estos métodos utilizaron el conjunto de datos mencionado anteriormente, representado en la figura inferior, para entrenar el modelo.
Simulación de situaciones del mundo real
En este enfoque, el conjunto de datos inicial presenta una particularidad. La segunda pregunta se reemplaza por una frase sinónima, pero solo en las filas que indican que las preguntas son duplicados. Esto simula el caso en que dos frases con palabras diferentes pero similares tienen el mismo significado, y un escenario donde no hay datos anotados para los duplicados, pero aún así podemos entrenar un modelo.
Desarrollo de una API REST y una aplicación web
Además, se crearon dos servicios para implementar la herramienta que recupera la similitud entre dos textos, y la que, dado un texto, devuelve los textos más similares de un banco de textos. Estos servicios se implementaron para cada método. Integrando estos modelos en una API REST (backend) e interfaz Dash (frontend), el resultado final se encuentra en este dashboard.
Automatización del despliegue
Esto se realizó para lanzar versiones con menos esfuerzo y una manera mucho más fluida de entregar productos en la industria. Para poner en producción los servicios mencionados anteriormente utilizando Terraform, se crearon una máquina EC2 y un repositorio ECR para almacenar las imágenes docker de cada interfaz.
Generando la imagen docker en una computadora e introduciéndola en el repositorio ECR, solo es necesario acceder a la instancia EC2 generada y extraer estas imágenes del repositorio ECR. La imagen inferior pretende aclarar este proceso.
Todos estos pasos se integran en un script de despliegue para facilitar el lanzamiento a un posible cliente.
Conclusiones sobre mis prácticas: Detección de duplicados en datos de texto
Considero que el trabajo en detección de duplicados en texto se realizó con éxito, aunque tengo la convicción de que habría podido mejorar la precisión y confiabilidad de las herramientas creadas con más tiempo.
Esta experiencia me permitió formar parte de un proyecto que tiene gran utilidad para empresas o entidades privadas, como la detección de datos duplicados para eliminarlos o la detección de plagio.
En general, sentí que fue una experiencia de prácticas que me acercó más al mundo empresarial y me proporcionó mucho conocimiento en el área del aprendizaje automático, especialmente sobre PLN y aprendizaje supervisado y no supervisado. También me brindó mayor conocimiento sobre cómo realizar un despliegue, sin enfocarse únicamente en el área de inteligencia artificial.
Por último, me gustaría agradecer a mi excelente tutor de NILG.AI, quien siempre estuvo dispuesto a ayudar y enseñar durante todo el semestre.
