paint-brush
Navegando por las aguas: desarrollo de aplicaciones RAG de nivel de producción con lagos de datospor@minio
5,672 lecturas
5,672 lecturas

Navegando por las aguas: desarrollo de aplicaciones RAG de nivel de producción con lagos de datos

por MinIO13m2024/06/14
Read on Terminal Reader
Read this story w/o Javascript

Demasiado Largo; Para Leer

A mediados de 2024, crear una demostración de IA que impresione y entusiasme puede ser fácil. A menudo puedes construir un bot de IA personalizado en una tarde. Sin embargo, llegar a la producción es otra cuestión. Necesitará un sistema confiable, observable, ajustable y eficaz.

People Mentioned

Mention Thumbnail
Mention Thumbnail

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Navegando por las aguas: desarrollo de aplicaciones RAG de nivel de producción con lagos de datos
MinIO HackerNoon profile picture


A mediados de 2024, crear una demostración de IA que impresione y entusiasme puede ser fácil. Tome un desarrollador sólido, algo de experimentación rápida e inteligente y algunas llamadas API a un modelo básico poderoso y, a menudo, podrá construir un bot de IA personalizado en una tarde. Agregue una biblioteca como cadena larga o índice de llamas para aumentar su LLM con un poco de datos personalizados usando RAG, y el trabajo de una tarde podría convertirse en un proyecto de fin de semana.


Sin embargo, llegar a la producción es otra cuestión. Necesitará un sistema confiable, observable, ajustable y de alto rendimiento a escala. Será esencial ir más allá de los escenarios de demostración artificiales y considerar la respuesta de su aplicación a una gama más amplia de indicaciones que representen el espectro completo del comportamiento real del cliente. El LLM puede necesitar acceso a un rico corpus de conocimientos de dominios específicos que a menudo no se encuentran en su conjunto de datos previo a la capacitación. Finalmente, si aplica la IA a un caso de uso donde la precisión importa, las alucinaciones deben detectarse, monitorearse y mitigarse.


Si bien resolver todos estos problemas puede parecer desalentador, se vuelve más manejable al deconstruir su aplicación basada en RAG en sus respectivas partes conceptuales y luego adoptar un enfoque específico e iterativo para mejorar cada una según sea necesario. Esta publicación te ayudará a hacer precisamente eso. En él, nos centraremos exclusivamente en las técnicas utilizadas para crear un proceso de procesamiento de documentos RAG en lugar de aquellas que ocurren posteriormente en el momento de la recuperación. Al hacerlo, nuestro objetivo es ayudar a los desarrolladores de aplicaciones de IA generativa a prepararse mejor para el viaje desde el prototipo hasta la producción.

El lago de datos moderno: el centro de gravedad de la infraestructura de IA


A menudo se ha dicho que en la era de la IA, los datos son su foso . Con ese fin, crear una aplicación RAG de nivel de producción exige una infraestructura de datos adecuada para almacenar, versionar, procesar, evaluar y consultar fragmentos de datos que componen su corpus propietario. Dado que MinIO adopta un enfoque de IA que prioriza los datos, nuestra recomendación de infraestructura inicial predeterminada para un proyecto de este tipo es configurar un lago de datos moderno y una base de datos vectorial. Si bien es posible que sea necesario incorporar otras herramientas auxiliares a lo largo del camino, estas dos unidades de infraestructura son fundamentales. Servirán como centro de gravedad para casi todas las tareas que se encuentren posteriormente para poner en producción su aplicación RAG.


Se puede encontrar una arquitectura de referencia de lago de datos moderna construida sobre MinIO aquí . Un documento complementario que muestra cómo esta arquitectura admite todas las cargas de trabajo de AI/ML es aquí .


Un canal de procesamiento de documentos RAG que actualiza su corpus personalizado en etapas y lo carga en una base de datos vectorial para su recuperación posterior (no se muestran los pasos de recuperación).

RAG: Pasos del proceso de documentación

Evaluación

Un primer paso fundamental para crear una aplicación RAG de nivel de producción es configurar un marco de evaluación, a menudo denominado simplemente evals. Sin evaluaciones, no tendrá forma de comprender de manera confiable qué tan bien está funcionando su sistema, saber qué componentes deben ajustarse o determinar si está logrando un progreso real. Además, las evaluaciones actúan como una función forzada para aclarar el problema que está intentando resolver. Estas son algunas de las técnicas de evaluación más comunes:


  • Evaluación heurística basada en código : puntuación de la salida mediante programación utilizando una variedad de medidas como recuento de tokens de salida, presencia/ausencia de palabras clave, validez JSON, etc. Estas a menudo se pueden evaluar de manera determinista usando expresiones regulares y bibliotecas de aserciones para pruebas unitarias convencionales.


  • Evaluación algorítmica basada en código : puntuación de resultados utilizando una variedad de métricas de ciencia de datos conocidas. Por ejemplo, al reformular el mensaje como un problema de clasificación, puede utilizar funciones de puntuación populares de los sistemas de recomendación, como la ganancia acumulativa descontada normalizada (NDCG) o la clasificación recíproca media (MRR). Por el contrario, si una pauta puede encuadrarse como un problema de clasificación, entonces la precisión, el recuerdo y la puntuación F1 podrían ser apropiados. Finalmente, puede utilizar medidas como BLEU, ROUGE y similitud de respuestas semánticas (SAS) para comparar el resultado semántico con una verdad fundamental conocida.


  • Evaluación basada en modelos : utilice un modelo para calificar el resultado de otro como se detalla en la Juzgar LLM como juez papel. Esta técnica está ganando popularidad y es mucho más barata que la humana a escala. Sin embargo, en las etapas iniciales de pasar un proyecto del prototipo a la producción, puede ser complicado implementarlo de manera confiable ya que el evaluador, en este caso, es un LLM a menudo sujeto a limitaciones y sesgos similares a los del propio sistema subyacente. Esté atento a la investigación, las herramientas y las mejores prácticas de esta área, ya que están evolucionando rápidamente.


  • Evaluación humana : pedir a los expertos en el ámbito humano que proporcionen su mejor respuesta suele ser el estándar de oro. Aunque este método es lento y costoso, no debe pasarse por alto, ya que puede ser invaluable para obtener información y desarrollar su conjunto de datos de evaluación inicial. Si desea sacar provecho adicional del trabajo realizado, puede utilizar técnicas como las que se detallan en el AutoEval bien hecho papel para complementar sus evaluaciones generadas por expertos humanos con variaciones sintéticas.


Pirámide de evaluación que muestra la distribución recomendada de varios tipos de evaluación. Los métodos hacia la cima requerirán mayor esfuerzo y complejidad y, por lo tanto, serán más indicativos de alineación con la verdad básica. Los métodos hacia el fondo pueden ejecutarse más rápido y con más frecuencia, pero sólo deben interpretarse como una aproximación de la precisión fáctica.


Junto con su decisión sobre qué técnicas de evaluación usar, considere la posibilidad de crear un conjunto de datos de evaluación comparativa personalizado, los genéricos que generalmente se usan en las tablas de clasificación de Hugging Face como la MMLU el conjunto de datos no sirve. Su conjunto de datos de evaluación personalizado contendrá una variedad de mensajes y sus respuestas ideales que son específicos del dominio y representativos de los tipos de mensajes que sus clientes reales ingresarán en su aplicación. Idealmente, hay expertos humanos disponibles para ayudar a crear el conjunto de datos de evaluación, pero si no, considere hacerlo usted mismo. Si no se siente seguro al adivinar qué indicaciones son probables, simplemente formule una hipótesis operativa y avance como si hubiera sido validada. Puede revisar continuamente sus hipótesis más adelante a medida que haya más datos disponibles.


Considere aplicar restricciones al mensaje de entrada para cada fila en su conjunto de datos de evaluación para que el LLM responda con un tipo de juicio concreto: binario, categórico, de clasificación, numérico o de texto. Una combinación de tipos de juicio mantendrá sus evaluaciones razonablemente variadas y reducirá el sesgo de salida. Ceteris paribus, más casos de prueba de evaluación son mejores; sin embargo, en esta etapa se recomienda centrarse en la calidad sobre la cantidad. Investigaciones recientes sobre el ajuste fino de LLM en el LIMA: Menos es más para el Alineamiento El artículo sugiere que incluso un pequeño conjunto de datos de evaluación de 1000 filas puede mejorar drásticamente la calidad de la producción, siempre que sean muestras representativas de la población real más amplia. Con las aplicaciones RAG, hemos observado de forma anecdótica una mejora en el rendimiento utilizando conjuntos de datos de evaluación que constan de docenas a cientos de filas.


Si bien puede comenzar a ejecutar sus evaluaciones manualmente de forma ad hoc, no espere demasiado antes de implementar una canalización de CI/CD para automatizar la ejecución de su proceso de puntuación de evaluaciones. La ejecución de evaluaciones diariamente o en activadores conectados a repositorios de código fuente y herramientas de observabilidad generalmente se considera una de las mejores prácticas de operaciones de aprendizaje automático. Considere la posibilidad de utilizar un marco de evaluación RAG de código abierto como ragas o Evaluación profunda para ayudarle a ponerse en marcha rápidamente. Utilice su lago de datos como fuente de verdad para las tablas que contienen tanto los conjuntos de datos de evaluación versionados como las diversas métricas de salida generadas cada vez que se ejecuta una evaluación. Estos datos proporcionarán información valiosa para utilizar más adelante en el proyecto para realizar mejoras estratégicas y altamente específicas.

Extractores de datos

El corpus RAG con el que inicialmente comienzas a crear prototipos rara vez es suficiente para llegar a producción. Es probable que necesite aumentar su corpus con datos adicionales de forma continua para ayudar al LLM a reducir alucinaciones, omisiones y tipos de sesgos problemáticos. Por lo general, esto se hace caso por caso mediante la creación de extractores y cargadores que convierten los datos ascendentes en un formato que se puede procesar posteriormente en un proceso de documentos descendente.


Si bien existe un pequeño riesgo de intentar hacer hervir el océano al recopilar más datos de los necesarios, es esencial ser creativo y pensar de manera innovadora sobre las fuentes de información de calidad a las que su empresa tiene acceso. Las posibilidades obvias pueden incluir la extracción de información a partir de datos estructurados almacenados en su OLTP y almacén de datos corporativos. También se deben considerar fuentes como publicaciones de blogs corporativos, documentos técnicos, investigaciones publicadas y consultas de atención al cliente, siempre que puedan anonimizarse adecuadamente y eliminarse información confidencial. Es difícil exagerar el impacto positivo en el rendimiento de agregar incluso pequeñas cantidades de datos de calidad en el dominio a su corpus, así que no tema dedicar tiempo a explorar, experimentar e iterar. Estas son algunas de las técnicas comúnmente utilizadas para iniciar un corpus en el dominio de alta calidad:


  • Extracción de documentos : los archivos PDF, documentos de Office, presentaciones y archivos de rebajas de propiedad pueden ser fuentes valiosas de información. Existe un ecosistema en expansión de herramientas SaaS y de código abierto para extraer estos datos. Generalmente, los extractores de datos son específicos de un tipo de archivo (JSON, CSV, docx, etc.), están basados en OCR o funcionan con algoritmos de aprendizaje automático y visión por computadora. Comience de manera simple y agregue complejidad solo según sea necesario.


  • Extracción de API : las API públicas y privadas pueden ser fuentes ricas de conocimiento en el dominio. Además, las API web bien diseñadas basadas en JSON y XML ya tienen alguna estructura incorporada, lo que facilita la extracción específica de propiedades relevantes dentro de la carga útil y, al mismo tiempo, descarta todo lo que se considere irrelevante. Existe un vasto ecosistema de conectores API asequibles con y sin código para ayudarlo a evitar escribir ETL personalizados para cada API que desee consumir, un enfoque que puede ser difícil de mantener y escalar sin un equipo dedicado de ingenieros de datos.


  • Web Scrapers : las páginas web se consideran datos semiestructurados con una estructura DOM en forma de árbol. Si sabe qué información busca, dónde se encuentra y el diseño de página donde reside, puede crear rápidamente un raspador para consumir estos datos incluso sin una API bien documentada. Existen muchas bibliotecas de secuencias de comandos y herramientas de código bajo para proporcionar abstracciones valiosas para el web scraping.


  • Rastreadores web : los rastreadores web pueden recorrer páginas web y crear listas de URL recursivas. Este método se puede combinar con el raspado para escanear, resumir y filtrar información según sus criterios. En una escala más significativa, esta técnica se puede utilizar para crear su propio gráfico de conocimiento.


Independientemente de las técnicas que utilice para la recopilación de datos, resista la tentación de crear scripts únicos y pirateados. En su lugar, aplique las mejores prácticas de ingeniería de datos para implementar extractores como canalizaciones ETL repetibles y tolerantes a fallas que colocan los datos en tablas dentro de su lago de datos. Asegúrese de que cada vez que ejecute estos canales (elementos clave de metadatos como las URL de origen y el momento de la extracción) se capturen y etiqueten junto con cada pieza de contenido. La captura de metadatos resultará invaluable para la limpieza, el filtrado, la deduplicación, la depuración y la atribución de datos posteriores.

fragmentación

La fragmentación reduce muestras de texto grandes en partes discretas más pequeñas que pueden caber dentro de la ventana contextual de un LLM. Si bien las ventanas de contexto son cada vez más grandes, lo que permite incluir más fragmentos de contenido durante la inferencia, la fragmentación sigue siendo una estrategia vital para lograr el equilibrio adecuado entre precisión, recuperación y eficiencia computacional.


La fragmentación eficaz requiere seleccionar un tamaño de fragmento adecuado. Los tamaños de fragmentos más grandes tienden a preservar el contexto y el significado semántico de una parte del texto a expensas de permitir que haya menos fragmentos totales presentes dentro de la ventana de contexto. Por el contrario, los tamaños de fragmentos más pequeños permitirán incluir fragmentos de contenido más discretos en la ventana contextual del LLM. Sin embargo, sin barreras de seguridad adicionales, cada contenido corre el riesgo de tener una calidad inferior cuando se elimina del contexto que lo rodea.


Resultados de recuperación de muestra para el mensaje "Cuénteme sobre los logros profesionales de Beyonce" con diferentes configuraciones de tamaño de fragmento.


Además del tamaño del fragmento, deberá evaluar varias estrategias y métodos de fragmentación. A continuación se muestran algunos métodos de fragmentación estándar a considerar:


  • Estrategia de tamaño fijo : en este método, simplemente elegimos una cantidad fija de tokens para nuestros fragmentos de contenido y lo deconstruimos en fragmentos más pequeños en consecuencia. Generalmente, se recomienda cierta superposición entre fragmentos adyacentes al utilizar esta estrategia para evitar perder demasiado contexto. Esta es la estrategia de fragmentación más sencilla y, en general, un buen punto de partida antes de aventurarse más hacia estrategias más sofisticadas.


  • Estrategia de tamaño dinámico : este método utiliza varias características de contenido para determinar dónde comenzar y detener un fragmento. Un ejemplo simple sería un fragmentador de puntuación, que divide oraciones según la presencia de caracteres específicos como puntos y nuevas líneas. Si bien un fragmentador de puntuación puede funcionar razonablemente bien para contenido breve y sencillo (es decir, tweets, descripciones de productos con caracteres limitados, etc.), tendrá inconvenientes evidentes si se utiliza para contenido más largo y complejo.


  • Estrategia basada en el contenido : los fragmentos basados en el contenido se ajustan al tipo de contenido y metadatos que se extraen y utilizan estas características para determinar dónde comenzar y detener cada fragmento. Un ejemplo podría ser un fragmentador para blogs HTML que utiliza etiquetas de encabezado para delinear los límites de los fragmentos. Otro ejemplo podría ser un fragmento semántico que compara la puntuación de similitud de coseno por pares de cada oración con sus vecinos anteriores para determinar cuándo el contexto ha cambiado lo suficiente como para justificar la delineación de un nuevo fragmento.


La estrategia de fragmentación óptima para su aplicación RAG deberá ajustarse a la longitud de la ventana de contexto del LLM, la estructura del texto subyacente, la longitud del texto y la complejidad del contenido de su corpus. Experimente generosamente con varias estrategias de fragmentación y ejecute sus evaluaciones después de cada cambio para comprender mejor el rendimiento de la aplicación para una estrategia determinada. Versione su contenido fragmentado en las tablas de su lago de datos y asegúrese de que cada fragmento tenga información de linaje para rastrearlo hasta el contenido sin procesar y sus respectivos metadatos desde el paso de extracción de datos ascendente.

Enriquecimiento

En muchos casos, los fragmentos de contenido indexados para su recuperación durante RAG son contextualmente diferentes de los mensajes reales que encontrará su aplicación en producción. Por ejemplo, si está creando un robot de respuesta a preguntas con IA, es posible que tenga un vasto corpus de información patentada que contenga numerosas respuestas correctas a las consultas de los clientes. Sin embargo, en su forma original, es poco probable que su corpus esté preorganizado en el formato de pares de preguntas y respuestas, lo cual es ideal para la recuperación de incrustaciones basada en similitudes. En este ejemplo, si en el momento de la recuperación buscáramos ingenuamente en nuestro corpus fragmentos de contenido sin procesar que sean semánticamente similares a la pregunta de un cliente entrante, podemos encontrar una relevancia subóptima del conjunto de resultados de recuperación. Esto es el resultado del hecho de que estamos comparando la similitud de elementos contextualmente dispares, es decir, preguntas con respuestas. Afortunadamente, la solución es relativamente sencilla: podemos utilizar el poder de los LLM para enriquecer nuestras posibles respuestas (también conocidas como fragmentos de contenido sin procesar) recontextualizándolas en preguntas hipotéticas. Luego indexamos esas preguntas hipotéticas en nuestra base de datos de vectores para su posterior recuperación. Esta técnica, llamada Incrustaciones de documentos hipotéticos (HyDE) , ilustra el poder de utilizar LLM para enriquecer sus datos dentro del proceso de procesamiento de documentos. A continuación se muestra un ejemplo del uso de esta técnica en algunos contenidos del conocido conjunto de datos squad_v2 :


 System Prompt: Given the provided snippet of text, generate three hypothetical questions that could be asked about it. Each question must be able to be answered using the information within the referenced snippet of text and only that information. Be concise. User Prompt: “At the 52nd Annual Grammy Awards, Beyoncé received ten nominations, including Album of the Year for I Am... Sasha Fierce, Record of the Year for "Halo", and Song of the Year for "Single Ladies (Put a Ring on It)", among others. She tied with Lauryn Hill for most Grammy nominations in a single year by a female artist. In 2010, Beyoncé was featured on Lady Gaga's single "Telephone" and its music video. The song topped the US Pop Songs chart, becoming the sixth number-one for both Beyoncé and Gaga, tying them with Mariah Carey for most number-ones since the Nielsen Top 40 airplay chart launched in 1992. "Telephone" received a Grammy Award nomination for Best Pop Collaboration with Vocals.” Response: Here are some questions that could be asked based on the provided text: * How many nominations did Beyoncé receive at the 52nd Annual Grammy Awards? * For which album was Beyoncé nominated for Album of the Year at the 52nd Annual Grammy Awards? * Which song earned Beyoncé a nomination for Record of the Year at the 52nd Annual Grammy Awards?


Si trabaja con un corpus compuesto por contenido de formato largo y/o temáticamente complejo, considere realizar un preprocesamiento adicional para resumir previamente los fragmentos de contenido y así reducir su dimensionalidad semántica. En el momento de la recuperación, puede consultar las incrustaciones de los resúmenes de fragmentos y luego sustituir el texto no resumido por la inserción de la ventana de contexto. Este método aumenta la relevancia al realizar RAG en un corpus grande, complejo y/o que cambia con frecuencia.

Tokenización

Los grandes modelos de lenguaje en 2024 son generalmente redes neuronales basadas en transformadores que no comprenden de forma nativa la palabra escrita. El texto sin formato entrante se convierte en tokens, seguido de vectores de incrustación de alta dimensión optimizados para operaciones de multiplicación de matrices. Este proceso de entrada generalmente se denomina codificación. El proceso de salida invertido se llama decodificación. Muchos LLM solo trabajarán para realizar inferencias utilizando el mismo esquema de tokenización en el que fueron capacitados. Por lo tanto, es esencial comprender los conceptos básicos de la estrategia de tokenización elegida, ya que puede tener muchas implicaciones sutiles en el rendimiento.


Aunque existen esquemas simples de tokenización a nivel de caracteres y palabras, casi todos los LLM de última generación utilizan tokenizadores de subpalabras al momento de escribir este artículo. En consecuencia, aquí nos centraremos sólo en esa categoría de tokenizadores.


Los tokenizadores de subpalabras dividen las palabras de forma recursiva en unidades más pequeñas. Esto les permite comprender palabras fuera del vocabulario sin aumentar demasiado el tamaño del vocabulario, una consideración clave para el rendimiento del entrenamiento y la capacidad del LLM para generalizar a textos invisibles.


Un método de tokenización de subpalabras predominante que se utiliza en la actualidad es la codificación de pares de bytes (BPE). En un nivel alto, el algoritmo BPE funciona así:


  • Divida las palabras en fichas de unidades de subpalabras y agréguelas al vocabulario. Cada token representa una subpalabra regida por la frecuencia relativa de patrones de caracteres adyacentes comunes dentro del corpus de entrenamiento.


  • Reemplace los pares de tokens comunes del paso anterior con un solo token que represente el par y agréguelo al vocabulario.


  • Repita recursivamente los pasos anteriores.


La tokenización BPE es generalmente un excelente lugar para comenzar con su aplicación RAG, ya que funciona bien para muchos casos de uso. Sin embargo, suponga que tiene una cantidad significativa de lenguaje de dominio altamente especializado que no está bien representado en el vocabulario del corpus de preentrenamiento utilizado para el modelo elegido. En ese caso, considere investigar métodos de tokenización alternativos, o explorar ajustes y adaptaciones de bajo rango, que están más allá del alcance de este artículo. El problema de vocabulario limitado antes mencionado puede manifestarse como un rendimiento deficiente en aplicaciones creadas para dominios especializados como medicina, derecho o lenguajes de programación oscuros. Más específicamente, prevalecerá en indicaciones que incluyan lenguaje/jerga altamente especializada. Utilice el conjunto de datos de evaluación almacenado en su lago de datos para experimentar con diferentes esquemas de tokenización y su rendimiento respectivo con varios modelos según sea necesario. Tenga en cuenta que los tokenizadores, las incrustaciones y los modelos de lenguaje a menudo están estrechamente vinculados, por lo que cambiar uno puede requerir cambiar los demás.

Conclusión

Un lago de datos moderno construido sobre un almacén de objetos MinIO proporciona una infraestructura fundamental para poner en producción con confianza aplicaciones basadas en RAG. Una vez implementado esto, puede crear evaluaciones y un conjunto de datos de evaluación específico del dominio que se puede almacenar y versionar dentro de las tablas del lago de datos. Utilizando estas evaluaciones, evalúe repetidamente y mejore incrementalmente cada componente de su canal de documentos de aplicaciones RAG (extractores, fragmentadores, enriquecimiento y tokenizadores) tanto como sea necesario para construir un canal de procesamiento de documentos de nivel de producción.


Si tiene alguna pregunta, asegúrese de comunicarse con nosotros en Flojo !