En la primera entrega de esta serie de dos partes, analizamos cómo los modelos de integración subóptimos, las estrategias de fragmentación ineficientes y la falta de filtrado de metadatos pueden dificultar la obtención de respuestas relevantes de su LLM. Aquí se explica cómo superar estos desafíos.
Creación de aplicaciones de IA generativa que utilicen
Dividiremos este proceso en dos partes principales. El primero, que abordaremos en este primer artículo de la serie, es el canal de incorporación, que llena el
Aquí, consideraremos tres áreas principales que pueden conducir a resultados deficientes: modelos de integración subóptimos, estrategias de fragmentación ineficientes y falta de filtrado de metadatos. (En el próximo artículo, veremos la interacción real con el LLM y examinaremos algunos problemas comunes que surgen allí y pueden conducir a malos resultados).
La elección de un modelo de integración tendrá un impacto significativo en la relevancia general y la usabilidad de su aplicación RAG. Como tal, requiere una comprensión matizada de las capacidades de cada modelo y un análisis de cómo esas capacidades se alinean con los requisitos de su aplicación.
Si es relativamente nuevo en RAG y en las incrustaciones en general, uno de los mejores recursos que debe conocer es el
La tabla de clasificación puede ayudarle a identificar los modelos que funcionarán mejor para su caso de uso específico.
Una de las razones más comunes del bajo rendimiento de RAG es que los desarrolladores nuevos en este espacio realizan una búsqueda en Google para encontrar ejemplos de generación de incrustación. A menudo encuentran ejemplos que utilizan modelos de incrustación como Word2Vec, sBERT y RoBERTa que son malas opciones para casos de uso de recuperación.
Si encontró este artículo porque estaba depurando resultados de relevancia deficientes y utilizó algo como sBERT para generar sus incrustaciones, entonces probablemente hayamos identificado la causa de sus problemas de relevancia.
Si es así, la siguiente pregunta que probablemente tendrá es qué modelos de incrustación puede utilizar para mejorar sus resultados de búsqueda de similitudes. Sin conocer los detalles de su caso de uso, los tres que recomendaríamos son:
Con una longitud máxima de secuencia de entrada de hasta 8192 tokens, también le permite crear incrustaciones para fragmentos de texto mucho más largos que los modelos alternativos. Esto es a la vez una bendición y una maldición.
Tener un tamaño de secuencia grande simplifica el proceso de creación de incrustaciones para una mayor parte del contenido de texto y permite que el modelo de incrustación identifique relaciones entre palabras y oraciones en un cuerpo de texto más grande.
Sin embargo, esto también da como resultado búsquedas de similitud que pueden volverse más confusas al comparar la similitud de dos documentos largos cuando lo que se busca son fragmentos relevantes de contexto para facilitar el proceso de generación.
Hay dos grandes inconvenientes de Ada v2. La primera es que no se puede ejecutar localmente. Debe utilizar la API de OpenAI para crear la incrustación. Esto no solo puede introducir cuellos de botella en los casos en los que se desea crear incrustaciones para muchos contenidos, sino que también agrega un costo de $0,0001 por cada 1000 tokens.
La segunda es que las incrustaciones creadas a partir del modelo Open AI tienen 1.536 dimensiones cada una. Si está utilizando una base de datos de vectores en la nube, esto puede aumentar considerablemente sus costos de almacenamiento de vectores.
Cuándo elegir: desea una solución simple que solo requiera una llamada a la API, potencialmente necesita vectorizar documentos grandes y el costo no es un problema.
Jina v2 es un nuevo modelo de integración de código abierto que ofrece el mismo soporte de secuencia de 8000 entradas que Ada v2 y, de hecho, obtiene una puntuación ligeramente mejor en casos de uso de recuperación.
Jina v2 proporciona un antídoto a los problemas de Ada v2. Es de código abierto bajo la licencia Apache 2.0 y se puede ejecutar localmente, lo que, por supuesto, también es un inconveniente si no desea ejecutar su propio código para hacerlo. También produce un vector de incrustación con la mitad de las dimensiones de Ada v2.
Por lo tanto, no solo obtiene un rendimiento de recuperación ligeramente mejor en casos de uso de referencia, sino que también obtiene resultados mejorados con menores requisitos de almacenamiento y computación desde una perspectiva de base de datos vectorial.
Cuándo elegir: desea utilizar una solución de código abierto y potencialmente necesita vectorizar documentos grandes y se siente cómodo ejecutando canalizaciones de incrustación localmente. Quiere reducir los costos de las bases de datos vectoriales con incrustaciones de menor dimensión.
bge-large-en-v1.5 es de código abierto bajo la licencia MIT y actualmente es el modelo de integración mejor clasificado en la tabla de clasificación MTEB para casos de uso de recuperación. Con una secuencia de entrada más pequeña, requerirá que piense más en su estrategia de fragmentación pero, en última instancia, proporciona el mejor rendimiento general para casos de uso de recuperación.
Cuándo elegir: desea utilizar una solución de código abierto y está dispuesto a dedicar más tiempo a estrategias de fragmentación para mantenerse dentro de las limitaciones del tamaño de entrada. Se siente cómodo ejecutando canalizaciones integradas localmente. Quiere el modelo de incrustación de mejor rendimiento para casos de uso de recuperación.
Si bien está fuera del alcance de este artículo, es posible que desee profundizar en los 15 puntos de referencia de la tabla de clasificación MTEB para identificar el que más se parezca a su situación específica.
Si bien definitivamente existen patrones en términos de qué tan bien se desempeñan los distintos modelos de integración en los diferentes puntos de referencia, a menudo hay modelos específicos que se destacan en cada uno. Si necesita refinar aún más su selección de incrustaciones, esta es un posible área de investigación adicional.
La segmentación o "fragmentación" del texto de entrada es un factor fundamental que influye significativamente en la relevancia y precisión del resultado generado. Varias estrategias de fragmentación ofrecen ventajas únicas y son adecuadas para tipos específicos de tareas. Aquí profundizamos en estas metodologías y brindamos pautas para su aplicación, incorporando algunas consideraciones clave:
Cuándo usarlo : a menos que su contenido esté muy estructurado y tenga una longitud fija, normalmente querrá confiar en una estrategia de fragmentación más útil como las que aparecen a continuación.
Consideración técnica : si bien es muy sencilla de implementar, esta estrategia de fragmentación generalmente conducirá a resultados deficientes en las aplicaciones RAG.
Información adicional Si está utilizando una estrategia de longitud fija con su aplicación RAG y tiene problemas para recuperar el contexto relevante, debería considerar cambiar a un enfoque de fragmentación diferente.
Cuándo utilizarla : esta estrategia es eficaz cuando cada frase del texto de entrada es rica en significado y contexto. Permite que el modelo se concentre en las complejidades de cada oración, generando así respuestas más coherentes y contextualmente relevantes. Rara vez dependerás de la fragmentación a nivel de oración para los casos de uso de RAG.
Consideración técnica : la fragmentación a nivel de oración a menudo implica la tokenización basada en límites de oración, lo que se puede lograr utilizando bibliotecas de procesamiento de lenguaje natural (NLP).
Información adicional : la fragmentación a nivel de oración puede ser particularmente útil cuando busca declaraciones específicas, como en la transcripción de una reunión en la que intenta encontrar declaraciones semánticamente similares a un fragmento de texto determinado.
Cuándo usarlo : emplee esta estrategia cuando el texto de entrada esté organizado en secciones o párrafos distintos, cada uno de los cuales encapsule una idea o tema separado. Esto permite que el modelo se centre en la información relevante dentro de cada párrafo.
Consideración técnica : la identificación de los límites de los párrafos generalmente implica detectar caracteres de nueva línea u otros delimitadores que indican el final de un párrafo.
Información adicional : la fragmentación a nivel de párrafo puede resultar útil cuando tiene documentos que cubren muchos aspectos diferentes del mismo tema. Por ejemplo, una página de documentación del producto puede presentar una característica del producto, explicar cuándo usarla, hablar sobre cómo configurarla y dar ejemplos de diferentes configuraciones.
El uso de fragmentación a nivel de párrafo puede ayudarlo a identificar la parte más relevante del documento para proporcionarla al LLM como contexto.
Cuándo utilizar : opte por esta estrategia cuando la relevancia de secciones específicas dentro del texto sea primordial. Por ejemplo, en documentos legales, segmentar el texto en función de cláusulas o secciones puede generar respuestas más específicas del contexto.
Consideración técnica : este enfoque puede requerir técnicas avanzadas de PNL para comprender los límites semánticos dentro del texto.
Información adicional : la fragmentación basada en el contenido es especialmente útil cuando se trata de datos estructurados o semiestructurados, ya que se pueden combinar fragmentos específicos con filtrado de metadatos para una recuperación más precisa.
Por ejemplo, en un documento legal, es posible que desee extraer todas las cláusulas de garantía o indemnización, y cuando almacena incrustaciones de fragmentos en una base de datos vectorial, puede utilizar metadatos para facilitar la búsqueda de contenido de un tipo determinado al crear un Caso de uso de RAG.
Cuándo usarlo : la fragmentación recursiva divide los datos en partes cada vez más pequeñas, utilizando un enfoque jerárquico. Por ejemplo, al fragmentar un documento de texto, puede dividir el texto primero en párrafos, luego en oraciones y finalmente en palabras.
Una vez que los datos se han dividido en el primer conjunto de fragmentos, puede aplicar recursivamente el proceso de fragmentación a cada uno de los fragmentos más pequeños, repitiendo hasta alcanzar el tamaño de fragmento más pequeño que le interese.
Consideración técnica : la implementación de fragmentación recursiva podría implicar una estrategia de análisis multinivel en la que los fragmentos se dividen en subfragmentos según criterios adicionales. Si estas usando
Información adicional : este enfoque permite que el modelo comprenda el contexto en múltiples niveles, desde temas de alto nivel hasta matices detallados, lo que lo hace particularmente útil para documentos complejos como artículos académicos, manuales técnicos o contratos legales. Esto aporta beneficios de flexibilidad, ya que las búsquedas de similitudes pueden identificar texto similar para consultas tanto más amplias como más breves.
Sin embargo, esto también significa que existe la posibilidad de que fragmentos similares del mismo documento fuente acaben sobrerrepresentados en las búsquedas de similitud, especialmente si opta por una superposición más larga entre fragmentos en la configuración del divisor de texto.
Como enfoque general, antes de intentar fragmentar un corpus grande y vectorizarlo, debería considerar realizar cierta experimentación ad hoc con sus datos.
Inspeccione manualmente los documentos que le gustaría recuperar para una consulta determinada, identifique los fragmentos que representan el contexto ideal que le gustaría proporcionar al LLM y luego experimente con estrategias de fragmentación para ver cuál le brinda los fragmentos que cree que serían más relevantes. que tenga el LLM.
La ventana de contexto disponible de un LLM es un factor importante a la hora de seleccionar una estrategia de fragmentación. Si la ventana de contexto es pequeña, deberá ser más selectivo en los fragmentos que introduce en el modelo para garantizar que se incluya la información más relevante.
Por el contrario, una ventana de contexto más grande permite una mayor flexibilidad, lo que permite la inclusión de contexto adicional que puede mejorar el resultado del modelo, incluso si no todo es estrictamente necesario.
Al experimentar con estas estrategias de fragmentación y tener en cuenta estas consideraciones, se puede evaluar su impacto en la relevancia de los resultados generados. La clave es alinear la estrategia elegida con los requisitos específicos de su aplicación RAG, preservar la integridad semántica de la entrada y ofrecer una comprensión integral del contexto.
Esto le permitirá encontrar el proceso de fragmentación adecuado para un rendimiento óptimo.
A medida que crece el número de incrustaciones en su índice de búsqueda, los vecinos más cercanos aproximados (ANN) se vuelven menos útiles al buscar contexto relevante para incluir en sus indicaciones. Supongamos que tiene incrustaciones indexadas para 200 artículos en su base de conocimientos.
Si puede identificar al vecino más cercano con una precisión del 1%, es probable que encuentre resultados bastante relevantes porque el 1% representa los dos artículos principales de esos 200, y obtendrá uno de esos dos.
Ahora, considere un índice de búsqueda que contenga todos los artículos de Wikipedia. Esto equivaldría a aproximadamente 6,7 millones de artículos. Si su vecino más cercano se encuentra en el 1% superior de artículos más similares, eso significa que está obteniendo uno de los 67.000 artículos más similares.
Con un corpus como Wikipedia, esto significa que aún podrías terminar muy lejos de la realidad.
El filtrado de metadatos le ofrece una forma de limitar las piezas de contenido filtrando primero los documentos y luego aplicando el algoritmo del vecino más cercano. En los casos en los que se trata de una gran cantidad de coincidencias posibles, este prefiltrado inicial puede ayudarle a limitar las opciones posibles antes de recuperar los vecinos más cercanos.
A continuación, profundizaremos en la interacción con el LLM y examinaremos algunos problemas comunes que pueden conducir a malos resultados.
Intentar
Por Chris Latimer, DataStax
También publicado aquí