Compartir a través de


Fase de enriquecimiento de fragmentos RAG

Después de dividir los documentos en una colección de fragmentos, el siguiente paso consiste en enriquecer cada fragmento mediante su limpieza y aumento con metadatos. La limpieza de los fragmentos permite lograr mejores coincidencias para las consultas semánticas en una búsqueda vectorial. Agregar metadatos le permite admitir búsquedas de los fragmentos que van más allá de las búsquedas semánticas. Tanto la limpieza como la ampliación implican extender el esquema del fragmento.

En este artículo se describen varias maneras de aumentar los segmentos, incluidas algunas operaciones comunes de limpieza que usted puede realizar en los segmentos para mejorar las comparaciones de vectores. También describe algunos campos de metadatos comunes que puede agregar a los fragmentos para aumentar el índice de búsqueda.

Este artículo forma parte de una serie. Esta es la introducción.

En el ejemplo de código siguiente se muestran fragmentos enriquecidos con datos.

Diagrama que muestra registros JSON. Se está enriqueciendo un solo campo.

Limpieza de datos

La fragmentación de los datos ayuda a la carga de trabajo a encontrar los fragmentos más relevantes, normalmente mediante la vectorización de esos fragmentos y su almacenamiento en una base de datos vectorial. Una búsqueda de vectores optimizada devuelve solo las filas de la base de datos que tienen las coincidencias semánticas más cercanas a la consulta. El objetivo de limpiar los datos es admitir coincidencias de proximidad mediante la eliminación de posibles diferencias que no afectan al significado del texto. A continuación se muestran algunos procedimientos comunes de limpieza.

Nota:

Debe devolver el fragmento original sin limpiar como resultado de la consulta, por lo que debe agregar un campo adicional para almacenar los datos limpios y vectorizados.

  • Implementar estrategias de reducción. La reducción en minúsculas permite que las palabras que se escriben en mayúsculas, como las palabras al principio de una oración, coincidan con las palabras correspondientes dentro de una oración. Las incrustaciones suelen distinguir entre mayúsculas y minúsculas, por lo que "Cheetah" y "cheetah" generarían un vector diferente para la misma palabra lógica. Por ejemplo, para la consulta insertada "¿qué es más rápido, un guepardo o un puma?" la incrustación "los guepardos son más rápidos que los pumas" es una coincidencia más cercana que "Los guepardos son más rápidos que los pumas". Algunas estrategias convierten todas las palabras en minúsculas, incluidos los nombres propios, mientras que otras estrategias solo ponen en minúscula las primeras palabras de las oraciones.

  • Quitar palabras irrelevantes. Las palabras irrelevantes son palabras como "a", "an" y "the". Puede quitar palabras irrelevantes para reducir la dimensionalidad del vector resultante. Si quita palabras irrelevantes en el ejemplo anterior, "un cheetah es más rápido que un puma" y "el cheetah es más rápido que el puma" son vectorialmente iguales a "el cheetah es más rápido que el puma". Sin embargo, es importante comprender que algunas palabras irrelevantes contienen significado semántico. Por ejemplo, "no" puede considerarse una palabra irrelevante, pero contiene un significado semántico significativo. Debe probar para determinar el efecto de quitar palabras irrelevantes.

  • Corregir errores ortográficos. Una palabra mal escrita no coincide con la palabra escrita correctamente en el modelo de inserción. Por ejemplo, "cheatah" no es lo mismo que "cheetah" en la inserción. Debe corregir errores ortográficos para solucionar este problema.

  • Eliminar caracteres Unicode. Quitar caracteres Unicode puede reducir el ruido en sus fragmentos y reducir la dimensionalidad. Al igual que las palabras irrelevantes, algunos caracteres Unicode pueden contener información relevante. Es importante realizar pruebas para comprender el impacto de quitar caracteres Unicode.

  • Normalizar texto. Normalizar texto según estándares como expandir abreviaturas, convertir números en palabras y expandir contracciones, por ejemplo, expandir "I'm" a "I'am", puede ayudar a aumentar el rendimiento de las búsquedas vectoriales.

Aumento de fragmentos

Las búsquedas semánticas en los fragmentos vectoriales funcionan bien para algunos tipos de consultas, pero no para otros. En función de los tipos de consultas que necesite admitir, es posible que tenga que aumentar los fragmentos con información adicional. Todos los campos de metadatos adicionales se almacenan en la misma fila que las incrustaciones y se pueden usar en la solución de búsqueda como filtros o como parte de una búsqueda.

En la imagen siguiente se muestra el JSON de contenido totalmente enriquecido y se describe cómo una plataforma de búsqueda podría usar los metadatos.

Diagrama que muestra el JSON de contenido totalmente enriquecido y cómo pueden usarse los metadatos en una plataforma de búsqueda.

Las columnas de metadatos que necesita agregar dependen del dominio del problema, incluido el tipo de datos que tiene y los tipos de consultas que desea admitir. Debe analizar la experiencia del usuario, los datos disponibles y la calidad de los resultados que intenta lograr. Desde allí, puede determinar qué metadatos pueden ayudarle a abordar los requisitos de la carga de trabajo.

A continuación se muestran algunos campos de metadatos comunes, junto con el texto del fragmento original, algunas instrucciones sobre sus posibles usos y herramientas o técnicas que se usan normalmente para generar el contenido de metadatos.

  • Id. Un identificador identifica de forma única un fragmento. Un identificador único es útil durante el procesamiento para determinar si ya existe un fragmento en el almacén. Un identificador puede ser un hash de algún campo de clave. Tools: una biblioteca de hash.

  • Título. Un título es un valor devuelto útil para un fragmento. Proporciona un resumen rápido del contenido del fragmento. El resumen también puede ser útil para consultar con una búsqueda indizada porque puede contener palabras clave para buscar coincidencias. Tools: un modelo de lenguaje.

  • Resumen. El resumen es similar al título en que es un valor devuelto común y se puede usar en búsquedas indexadas. Los resúmenes suelen ser más largos que los títulos. Tools: un modelo de lenguaje.

  • Reformulación del fragmento. La reformulación de un fragmento puede ser útil como un campo de búsqueda vectorial, ya que la reformulación captura variaciones en el lenguaje, como sinónimos y parafraseos. Tools: un modelo de lenguaje.

  • Palabras clave. Las búsquedas de palabras clave son útiles para los datos que no son de texto, para buscar una coincidencia exacta y cuando un término o valor específico es importante. Por ejemplo, un fabricante de automóviles podría tener reseñas o datos de rendimiento para cada uno de sus modelos para varios años. La "Reseña del producto X del año 2009" es semánticamente similar a "Reseña del producto X del 2010" y "Reseña del producto Y del 2009." En este caso, es más eficaz hacer coincidir las palabras clave del producto y del año. Tools: un modelo de lenguaje, RAKE, KeyBERT, multi-rake.

  • Entidades. Las entidades son fragmentos específicos de información, como personas, organizaciones y ubicaciones. Al igual que las palabras clave, las entidades son adecuadas para búsquedas exactas de coincidencias o cuando las entidades específicas son importantes. Herramientas: spaCy, Stanford Named Entity Recognizer (Stanford NER), scikit-learn, Natural Language Toolkit (NLTK).

  • Texto de fragmento limpiado. Texto del fragmento limpiado. Tools: un modelo de lenguaje.

  • Preguntas que el fragmento puede responder. A veces, la consulta insertada no coincide con el fragmento incrustado. Por ejemplo, la consulta podría ser pequeña en relación con el tamaño del fragmento. Puede ser mejor formular las consultas que el fragmento puede responder y realizar una búsqueda vectorial entre la consulta real del usuario y las consultas pre formuladas. Tools: un modelo de lenguaje.

  • Origen. El origen del fragmento puede ser útil como respuesta para las consultas. Devolver la fuente permite al consultante citar la fuente original.

  • Idioma. El lenguaje del fragmento puede ser útil como filtro en las consultas.

El coste del aumento

El uso de algunos modelos de lenguaje para aumentar fragmentos puede ser costoso. Debe calcular el costo de cada enriquecimiento que está considerando y multiplicarlo por el número estimado de fragmentos a lo largo del tiempo. Debe usar esta información, junto con las pruebas de los campos enriquecidos, para determinar la mejor decisión empresarial.

Paso siguiente