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

  • |

    El chistómetro

    El humor negro, con su capacidad de hacer reír sobre temas serios o tabúes, pisa un terreno resbaladizo. Es sabido que un mismo chiste puede provocar indignación en una persona y carcajadas en otra… Vaya manera más rara de comenzar el artículo de un modesto blog dedicado a menesteres técnicos. El caso es que vengo…

  • |

    Interferencias mentales

    Estudios recientes en España señalan que la rumiación explica el 40% de los problemas de ansiedad y el 30% de los casos de depresión (Redacción Médica, s. f.). Este fenómeno ha sido ampliamente estudiado en psicología clínica, donde se ha observado que la rumiación constituye un factor de vulnerabilidad importante para la depresión y otros…

  • |

    ssh: connect to host: Connection refused

    Escenario Esta mañana ha ocurrido algo inexplicable, por lo menos, como suele pasar en este dominio, hasta que hemos dado con la solución; luego parecía obvio. Nos avisan que una de las máquinas de nuestra red negaba el acceso por SSH provocando el siguiente error:

    Lo primero que pensamos es podía estar relacionado con…

  • Autenticación múltiple en Spring boot: JWT y formulario

    Escenario Por exigencias de un tercero debemos adaptar nuestro servicio web para que sea compatible con autenticación por JWT. Hasta ahora las llamadas al API se hacían desde dentro de la aplicación usando las mismas credenciales del usuario autenticado por cookie. La configuración de la cadena de filtros de Spring Security es la siguiente:

  • |

    El próximo gordo de lotería

    Hace poco, un amigo mío le pidió a ChatGPT que generara un script para predecir números de la Lotería Nacional basado en datos históricos. Sin embargo, no logró ejecutarlo correctamente en un intérprete online de Python. Por eso me llamó. En mi máquina funcionó sin problemas, generando números aleatorios sin usar ningún dato histórico. No…

Deja una respuesta

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