Creación de una gran base de conocimientos de respuesta a preguntas modelo de lenguaje basada en los servicios de tecnología en la nube de Amazon

Con la evidente mejora del efecto del modelo de lenguaje grande, sus aplicaciones relacionadas continúan surgiendo y mostrando una tendencia cada vez más popular. Una de las rutas técnicas más preocupadas es el método del modelo de lenguaje grande (LLM) + recuperación de conocimiento (Recuperación de Conocimiento), que bien puede compensar algunas deficiencias del modelo de lenguaje grande general en términos de respuesta a preguntas de conocimiento de dominio privado, y resolver el problema de los grandes modelos lingüísticos generales. Los modelos lingüísticos responden a la falta de fundamento, alucinaciones y otras cuestiones en el ámbito profesional. La idea básica es dividir los documentos de conocimiento del dominio privado y luego vectorizarlos, luego recuperarlos mediante la recuperación de vectores y luego ingresarlos como contexto en el modelo de lenguaje grande para inducción y resumen.

 En la práctica específica de esta dirección técnica, la base de conocimientos se puede construir utilizando dos métodos de índice basados ​​en inversión y vector, que desempeñan un papel clave en el paso de recuperación de conocimientos en el proceso de respuesta a preguntas de conocimientos, y el índice de documentos ordinario o índice de registro. , la vectorización del conocimiento requiere la capacidad semántica del modelo profundo, y existen pasos adicionales como la segmentación de documentos, la implementación y el razonamiento del modelo vectorial. En el proceso de construcción de la base de datos de vectorización del conocimiento, no solo se debe considerar la magnitud del documento original, sino también la granularidad de la segmentación, la dimensión del vector y otros factores. Al final, el número de elementos de conocimiento indexados por la base de datos de vectores puede alcanzar una magnitud muy grande, que puede estar determinada por los dos aspectos siguientes:

  • La cantidad de documentos existentes en diversas industrias, como las finanzas, la medicina y el derecho, es muy alta, y la cantidad de documentos nuevos también es grande.

  • Para lograr el efecto de recuperación, la segmentación de documentos a menudo adopta un almacenamiento redundante de granularidad múltiple por oración o segmento.

 Estos detalles traen ciertos desafíos al rendimiento de escritura y consulta de la base de datos de vectores de conocimiento. Para optimizar la construcción y gestión de la base de conocimientos vectorizada, basada en los servicios de la tecnología en la nube de Amazon, el proceso de construcción de la base de conocimientos como se muestra a continuación se construye la figura:

  • Lambda se activa en tiempo real a través del controlador del depósito S3 para iniciar el trabajo de pegamento correspondiente al almacenamiento de archivos de conocimiento.

  • El análisis y la división del documento se realizarán en el trabajo de pegamento y se llamará al modelo de incrustación de SageMaker para su vectorización.

  • Inyectar en Amazon OpenSearch de forma masiva

 También resume algunas de las mejores prácticas y experiencias sobre varios aspectos involucrados en todo el proceso, incluido cómo vectorizar el conocimiento y optimizar la base de datos de vectores.

 vectorización del conocimiento

 División de documentos

 El paso previo a la vectorización del conocimiento es dividir el conocimiento, y el mantenimiento de la integridad semántica es la consideración más importante. Discutir en dos aspectos. Cómo elegir los siguientes dos puntos de enfoque respectivamente resumió alguna experiencia:

 a. Método de división de fragmentos.

 Con respecto a esta parte del trabajo, Langchain, como marco popular de integración de modelos de lenguaje grande, proporciona una gran cantidad de cargadores de documentos y derrames de texto, algunos de los cuales son de valor de referencia, pero muchos de ellos son repetitivos.

 En la actualidad, el método básico más utilizado es utilizar RecursiveCharacterTextSplitter en Langchain, que es el divisor predeterminado de Langchain. Utiliza esta lista de caracteres delimitados de varios niveles: ["\n\n", "\n", " ", ""] para dividir. De forma predeterminada, se dividirá primero según el párrafo. Si el tamaño del fragmento el resultado de la división excede. Luego continúe usando el siguiente nivel de caracteres separadores para continuar dividiendo hasta que se cumplan los requisitos de tamaño de fragmento.

 Sin embargo, este enfoque es relativamente tosco y aún puede provocar que se desmonte algún contenido clave. Para algunos otros formatos de documentos puede haber algunas prácticas más matizadas.

  • El archivo de preguntas frecuentes debe dividirse según la granularidad de una pregunta y una respuesta. La entrada vectorizada posterior puede utilizar solo preguntas o preguntas + respuestas.

  • Para los archivos Markdown, "#" es un carácter especial que se utiliza para identificar el título. MarkdownHeaderTextSplitter se puede utilizar como divisor, lo que puede garantizar mejor que el contenido y el título se extraigan correspondientemente.

 Los archivos PDF contendrán información de formato más rica. Langchain proporciona muchos cargadores, pero el efecto de segmentación de PDFMinerPDFasHTMLLoader en Langchain será mejor: convierte PDF a HTML y a través de HTML.

Segmentación de bloques, este método puede retener la información del tamaño de fuente de cada bloque, de modo que se pueda deducir la relación de afiliación del contenido de cada bloque, y el título de un párrafo se puede asociar con el título principal del nivel anterior para hacer la información más completo.

 B. Soporte del modelo para la longitud del fragmento.

 Dado que los fragmentos divididos deben razonarse a través del modelo vectorizado, se debe considerar el límite Max_seq_length del modelo vectorizado. Exceder este límite puede causar truncamiento y semántica incompleta. Divididos del Max_seq_length admitido, actualmente existen dos tipos de modelos de incrustación, como se muestra en la siguiente tabla (estos cuatro son modelos con experiencia práctica).

 nombre del modelo

 Longitud_seq_máx.

 paráfrasis-multilingüe-mpnet-base-v2 (sbert.net)

 128

 text2vec-base-chino(text2vec)

 128

 text2vec-chino grande (text2vec)

 512

 incrustación de texto-ada-002 (openai)

 8192

 Max_seq_length aquí se refiere a la cantidad de tokens, que no es equivalente a la cantidad de caracteres. Según experiencias de pruebas anteriores, una ficha de los tres primeros modelos tiene aproximadamente 1,5 caracteres chinos. Para modelos de lenguaje grandes, como chatglm, un token generalmente tiene aproximadamente 2 caracteres. Si no es conveniente calcular la cantidad de tokens durante la segmentación, simplemente puede convertir de acuerdo con esta proporción para asegurarse de que no se produzca truncamiento.

 Los primeros tres modelos pertenecen al modelo de incrustación basado en Bert, y el modelo text-embedding-ada-002 de OpenAI es un modelo basado en GPT3. El primero es adecuado para la vectorización de oraciones o párrafos cortos, mientras que la interfaz SAAS de OpenAI del segundo es adecuada para la vectorización de textos largos, pero no se puede implementar de forma privada.

 La selección de validación se puede realizar en función de los efectos de recuperación. Según la experiencia práctica actual, text-embedded-ada-002 puede clasificar las puntuaciones de similitud chinas, pero el grado de discriminación no es suficiente (la concentración es de aproximadamente 0,7), lo que no conduce a juzgar directamente si existe una recuperación de conocimientos similar a través del umbral. .

 Además, hay otra forma de mejorar el problema de la limitación de longitud. Puede numerar los fragmentos divididos y los números de los fragmentos adyacentes también están cerca. Al recuperar uno de los fragmentos, puede utilizar la búsqueda de rango de la base de datos vectorial para busque los fragmentos cercanos. La recuperación también puede garantizar la integridad semántica del contenido recuperado.

 Selección de modelo vectorizado

 Los cuatro modelos mencionados anteriormente solo mencionaron la diferencia en el soporte del modelo en cuanto a la longitud del texto, y actualmente no existe una conclusión muy autorizada sobre el efecto. Puede utilizar la tabla de clasificación para comprender el rendimiento de cada modelo. La evaluación de la mayoría de los modelos en la lista todavía se basa en el punto de referencia del conjunto de datos públicos. Es necesario ver si la conclusión del punto de referencia es cierta en la escena de producción real. caso por caso. Pero, en principio, existen los siguientes aspectos de la experiencia que se pueden compartir:

  • El modelo de Finetune en el campo vertical tiene ventajas obvias sobre el modelo vectorial original.

  • Los modelos vectorizados actuales se dividen en dos categorías, simétricos y asimétricos. A falta de ajustes, se recomienda utilizar la recuperación simétrica para las preguntas frecuentes, es decir, la recuperación de una consulta a otra. Para el conocimiento de fragmentos de documentos, se recomienda utilizar un modelo de recuperación asimétrico, que es la recuperación de la consulta a la respuesta (fragmento de documento).

  • Si no hay una diferencia obvia en el efecto, intente elegir un modelo con una dimensión vectorial corta. Los vectores de alta dimensión (como el text-embedding-ada-002 de openai) ejercerán presión sobre la base de datos de vectores en términos de rendimiento y costo de recuperación. .

 paralelismo vectorizado

 En escenarios empresariales reales, el tamaño de los documentos es del orden de cien a un millón. Según el método de recuperación redundante de niveles múltiples, los elementos de conocimiento correspondientes pueden alcanzar una escala de hasta 100 millones. Debido a la gran escala de todo el cálculo fuera de línea, debe realizarse al mismo tiempo; de lo contrario, no podrá cumplir con los requisitos de adición de conocimiento y iteración del efecto de recuperación de vectores. Los pasos se dividen principalmente en las siguientes tres etapas de cálculo.

 Segmentación de documentos en paralelo

 La granularidad concurrente del cálculo está a nivel de archivo, y los formatos de archivo procesados ​​también son diversos, como texto sin formato TXT, Markdown, PDF, etc., y la lógica de segmentación correspondiente también es diferente. No es apropiado utilizar un marco de big data como Spark para el procesamiento paralelo. El uso de instancias de múltiples núcleos para el procesamiento concurrente de múltiples procesos es demasiado primitivo y no es conveniente observar y rastrear tareas. Por lo tanto, puede elegir el motor de shell Python de AWS Glue para su procesamiento. Las principales ventajas son las siguientes:

  • Es conveniente realizar la concurrencia de acuerdo con la granularidad del archivo, y el grado de concurrencia es simple y controlable. Con mecanismos como el reintento y el tiempo de espera, es conveniente realizar un seguimiento y observar las tareas, y los registros están conectados directamente a AWS CloudWatch.

  • Es conveniente crear y ejecutar paquetes de dependencia, que se pueden especificar mediante el parámetro –additional-python-modules. Al mismo tiempo, el entorno operativo Glue Python ya viene con opensearch_py y otras dependencias.

 Paralelismo de inferencia vectorizada

 Dado que los párrafos y oraciones segmentados se expanden muchas veces en comparación con la cantidad de documentos, el rendimiento de razonamiento del modelo vectorial determina el rendimiento de todo el proceso. Aquí se utiliza SageMaker Endpoint para implementar el modelo vectorizado. En términos generales, para proporcionar la capacidad de rendimiento del modelo, se utilizan el razonamiento de instancia de GPU, la escalabilidad elástica de múltiples nodos de extremo/punto final y las capacidades de razonamiento por lotes del lado del servidor/del lado del cliente. algunas de estas medidas efectivas. Específicamente para el escenario de la construcción de bases de conocimientos vectoriales fuera de línea, se pueden adoptar las siguientes estrategias:

  • Implementación de instancias de GPU: se pueden inferir instancias de CPU de modelo vectorizado. Sin embargo, en el escenario fuera de línea, la concurrencia de razonamiento es alta y el rendimiento de la GPU se puede aumentar aproximadamente 20 veces en comparación con la CPU. Por lo tanto, la inferencia de GPU se puede utilizar en escenarios fuera de línea y las estrategias de inferencia de CPU se pueden utilizar en escenarios en línea.

  • Para la generación temporal de grandes vectores concurrentes de puntos finales de múltiples nodos, se procesa implementando puntos finales de múltiples nodos y se puede cerrar después del procesamiento.

 Uso del razonamiento por lotes del lado del cliente: para el razonamiento fuera de línea, la construcción por lotes del lado del cliente es muy sencilla. No es necesario habilitar el razonamiento por lotes del lado del servidor. En general, el tiempo de espera del lote del lado del servidor es de 50 ms o 100 ms, que es más efectivo para modelos de lenguaje grandes con grandes retrasos de razonamiento, pero no es adecuado para el razonamiento vectorizado.

 Inyección por lotes de OpenSearch

 La operación de escritura de Amazon OpenSearch se puede implementar en lotes de forma masiva, lo que tiene grandes ventajas sobre la escritura única.

 Optimización de bases de datos vectoriales

 Qué algoritmo de búsqueda aproximado elegir para la base de datos vectorial, la selección de un tamaño de clúster apropiado y la optimización de la configuración del clúster también son críticos para el rendimiento de lectura y escritura de la base de conocimientos. Se deben considerar los siguientes aspectos:

 Selección de algoritmo

 En OpenSearch, se proporcionan dos algoritmos k-NN: HNSW (pequeño mundo navegable jerárquico) y IVF (archivo invertido).

 Hay varios factores a considerar al elegir un algoritmo de búsqueda k-NN. Si la memoria no es un factor limitante, se recomienda dar prioridad al uso del algoritmo HNSW, porque el algoritmo HNSW puede garantizar tanto la latencia como la recuperación. Si es necesario controlar el uso de la memoria, considere utilizar el algoritmo IVF, que reduce el uso de la memoria y al mismo tiempo mantiene la velocidad y la calidad de las consultas similares a las de HNSW. Sin embargo, si la memoria es el factor limitante más importante, considere agregar codificación PQ a los algoritmos HNSW o IVF para reducir aún más el uso de memoria. Cabe señalar que agregar codificación PQ puede reducir la tasa de precisión. Por lo tanto, al seleccionar algoritmos y métodos de optimización, se deben considerar de manera integral múltiples factores para cumplir con los requisitos de aplicaciones específicas.

 Estimación del tamaño del conglomerado

 Una vez seleccionado el algoritmo, la memoria requerida se puede calcular de acuerdo con la fórmula para derivar el tamaño del clúster k-NN

 Optimización de la inyección por lotes

 Al inyectar una gran cantidad de datos en la biblioteca de vectores de conocimiento, se debe prestar atención a algunas optimizaciones de rendimiento clave. Las siguientes son algunas estrategias de optimización principales:

  • Deshabilitar el intervalo de actualización

  • Aumentar el hilo de indexación

  • Aumentar la proporción de memoria knn

Supongo que te gusta

Origin blog.csdn.net/caijingshiye/article/details/132479005
Recomendado
Clasificación