Uso práctico de Sentence Transformers en procesamiento de textos

Clase 9 de 26Curso de Embeddings y Bases de Datos Vectoriales para NLP

Contenido del curso

Bases de datos vectoriales

Resumen

Transformar texto en representaciones numéricas que capturen su significado es una de las tareas más poderosas del procesamiento del lenguaje natural. Gracias a modelos preentrenados como Sentence Transformers, podemos hacerlo de forma gratuita, rápida y sin necesidad de entrenar nada desde cero. A continuación se explica paso a paso cómo cargar este modelo, generar embeddings y aplicarlos a un dataset real.

¿Por qué usar modelos preentrenados en lugar de entrenar desde cero?

Existen múltiples métodos para entrenar modelos que comprendan representaciones semánticas de palabras en espacios vectoriales: word2vec, ELMo, BERT, entre otros [0:00]. Sin embargo, la gran mayoría de las veces no necesitamos entrenar un modelo desde cero. El lenguaje no cambia constantemente, por lo que podemos aprovechar modelos preentrenados con un alto conocimiento lingüístico y usarlos de manera global.

Sentence Transformers es un modelo open source disponible en Hugging Face que permite convertir cualquier texto en un vector numérico sin reentrenamiento [0:30]. Este modelo general sirve para diversas tareas de procesamiento del lenguaje, aunque también existen modelos específicos para resumen, question answering y otras aplicaciones.

¿Cómo se instala y configura Sentence Transformers?

  • Se instala la librería sentence-transformers directamente desde pip.
  • Se importan pandas y SentenceTransformer junto con util, que incluye métricas de distancia.
  • Se recomienda usar un runtime con GPU para acelerar el procesamiento [1:05].

El modelo utilizado en este caso es all-MiniLM-L6-v2, un modelo general que se descarga automáticamente la primera vez que se invoca [2:30].

¿Qué dimensionalidad tienen los embeddings generados?

Al pasar dos frases de ejemplo al método encode, el resultado es un arreglo con forma (2, 384) [3:10]. Esto significa que cada texto se representa en un espacio vectorial de 384 dimensiones, independientemente de la longitud del texto original. Esa es la dimensionalidad fija que maneja este modelo.

¿Cuál es el límite de longitud del texto que puede procesar?

Una prueba interesante consiste en pasar un texto extenso, como un capítulo completo de El Señor de los Anillos [3:50]. El modelo genera un embedding sin lanzar ningún error, pero esto puede ser engañoso. Al consultar la propiedad max_seq_length, se descubre que el límite es de 256 tokens [4:30].

  • El modelo no arroja error al recibir textos más largos.
  • Simplemente toma los primeros 256 tokens y descarta el resto.
  • Este comportamiento representa un riesgo importante al trabajar con cualquier modelo open source de lenguaje.

La solución práctica sería dividir textos largos en fragmentos de 256 tokens antes de generar los embeddings.

¿Cómo aplicar embeddings a un dataset completo?

El dataset utilizado es un CSV con los diálogos de la serie animada Avatar, que contiene información sobre personajes, episodios, temporadas y el texto (script) de cada diálogo [1:30].

Para generar los embeddings de toda la columna script, se usa el método encode con dos parámetros clave [5:20]:

  • batch_size=64: procesa los textos en lotes pequeños para optimizar memoria.
  • show_progress_bar=True: muestra una barra de progreso para monitorear el avance.

El resultado: 13,369 diálogos embebidos en 384 dimensiones, procesados en aproximadamente siete segundos con GPU [5:55].

¿Por qué es importante usar GPU en vez de CPU?

Al cambiar el parámetro device a "cpu", el mismo proceso apenas alcanza el 1% de avance en el mismo tiempo [6:30]. La GPU permite un procesamiento mucho más rápido y eficiente gracias a su capacidad de paralelización.

¿Cómo almacenar los embeddings en el dataframe?

Una vez generados, los embeddings se convierten a lista con tolist() y se asignan como una nueva columna llamada embedding en el dataframe original [7:10]. El dataset resultante conserva su estructura original y añade la representación vectorial de cada diálogo, lista para aplicar métricas de distancia o búsqueda semántica.

Todo este proceso es gratuito y aprovecha modelos preentrenados de alta calidad. ¿Ya has probado Sentence Transformers en tus proyectos? Comparte tu experiencia en los comentarios.