imagen artículo
|

Sobrepasando el límite

Por lo que he podido probar, de momento los modelos generativos locales están lejos de acercarse al rendimiento de los modelos de OpenAI, GPT-3 y GPT-4.

Por otro lado el API de OpenAI impone un límite al tamaño de nuestras preguntas que, dependiendo del modelo que empleemos, será menor o mayor. Con GPT-3.5 no puedes sobrepasar los 4096 tokens; con gpt-3.5-turbo-16k, en cambio, cuadruplican el límite. Según la documentación este último te permitiría enviar unas doce mil palabras de golpe. Por lo menos si el texto está escrito en inglés: la transformación de palabras a tokens depende de los tipos de caracteres, y puede haber diferencias notables según el idioma que utilicemos.

Pongamos que quiero que GPT use como referencia un texto que sobrepasa el límite impuesto, por ejemplo un documento de varias páginas desconocido —o sea con el que no haya sido entrenado el modelo. La solución pasaría por utilizar una base de datos vectorial.

¿Qué es una base de datos vectorial y por qué son tan buenas en el manejo de datos desestructurados? Un vector o incrustación (embedding) es una matriz de números capaz de representar datos más complejos como texto, imágenes, audio o incluso video. En el caso del texto, estas representaciones están diseñadas para capturar las relaciones semánticas y sintácticas entre las palabras, lo que permite que los algoritmos comprendan y procesen el lenguaje de manera más efectiva. Simplificando, los modelos incrustadores (embedding models) asignan palabras a vectores numéricos, donde las palabras similares se ubican más cerca unas de otras. El propio OpenAI ofrece un API de modelos incrustadores.

Dado que GPT puede recuperar información de una base de datos vectorial, la pregunta hecha al API también se incrustará y, en función de la búsqueda de similitud, el recuperador (retriever) devolverá las incrustaciones con los datos para responder la pregunta. Después de esto, el LLM podrá devolver una respuesta coherente y bien estructurada.

Esto que parece tan complicado, la biblioteca de programación de Langchain lo resuelve en pocas líneas. De modo que si queremos consultar un documento almacenado en nuestro disco duro, bastaría con estas líneas de código

Además de cargar el texto de un fichero, Langchain dispone de otros «cargadores» como WebBaseLoader o HuggingFaceDatasetLoader, que cargan el texto a partir de la dirección de una página web o un conjunto de datos de Hugging Face.

VectorstoreIndexCreator es un componente utilizado para crear un índice que permita consultar documentos de texto. Divide los documentos en partes más pequeñas, genera las incrustaciones (es decir, representaciones numéricas) para cada documento y almacena los documentos y sus incrustaciones en un vectorstore, que luego se puede consultar para recuperar documentos relevantes.

Con los datos del documento indexados, ahora podemos utilizar el método de consulta query. De esta manera la consulta se limitará al contenido del texto, el modelo «solo» conoce su contenido, no podrías por ejemplo preguntarle por textos relacionados. Si quisieras hacerlo, deberías añadir un segundo argumento al método query en el que se especifica el LLM que queremos usar.

Aquí he mostrado una versión muy simplificada de cómo aprovechar un base de datos vectorial (abstraída por Langchain). Tanto el vectostore como el retriever o el troceado en chunks se podrían definir más acorde con nuestras necesidades. Por último, no olvidemos que, aunque el documento se encuentre en nuestro disco duro, su contenido viajará por internet y pasará por las manos de OpenAI. Tenedlo en cuenta sobretodo si estáis tratando con datos sensibles.

Publicaciones Similares

  • Instala un certificado SSL en tres pasos

    Escenario Todavía tienes una aplicación web, servida por nginx, a la que solo se puede acceder por http. Objetivo Instalar el certificado de SSL gratuito en tres pasos. Usaremos a modo de ejemplo el subdominio certbot.technoage.net. Pasos 1. Añadir el repositorio $ sudo add-apt-repository ppa:certbot/certbot 2. Instalar el paquete de cerbot para nginx $ sudo apt-get update && sudo apt-get install python-certbot-nginx 3. Obtener el certificado…

  • |

    Bicicletas

    El cerebro tiende a engañarnos haciéndonos creer que por saber el nombre de un cosa ya entendemos cómo funciona. Cuanto más cotidiano es el objeto o evento más fácil es dejarnos engañar. Todos sabemos que la luna pasa por distintas fases, lo podemos contemplar con nuestros propios ojos, ¿pero sabemos cuál es el proceso que…

  • |

    Traducción de variables en javascript

    Escenario Estoy trabajando en una aplicación multi-lenguaje desarrollada con la plataforma spring boot. Para quien no conozca esta plataforma de desarrollo, spring boot te permite gestionar varios lenguajes gracias a un sistema que utiliza ficheros de tipo propiedades para almacenar las traducciones. Los nombres de estos ficheros han de respetar la siguiente convención, messages_{código ISO…

  • Panasonic RR-US361

    Escenario Panasonic RR-US361 es una grabadora portátil de audio que, por la información que he podido recopilar, debe datar de principios de siglo. La utilizo de vez en cuando para grabar mis sueños. Me resulta más cómodo que el móvil por dos razones. Evito la luz de la pantalla, y no corro el riesgo de…

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *