Ir al contenido principal

Buscar en CooLWJ

选择搜索范围,输入关键词后按回车。

Idioma

¿Qué es una base de datos vectorial?

I、Proceso completo de negocio con grandes modelos

1.png

  1. Construcción de clústeres de IA: infraestructura de cómputo, comunicaciones y almacenamiento

  2. Datos para grandes modelos: conjuntos de datos para grandes modelos, procesamiento de datos, bases de datos vectoriales

  3. Algoritmos de grandes modelos:del NLP tradicional a los grandes modelos de lenguaje preentrenados, LLM

  4. Entrenamiento de grandes modelos:métodos algorítmicos habituales y análisis de estabilidad en el entrenamiento de grandes modelos

  5. Paralelismo distribuido: paralelismo de modelos, de datos, del optimizador, etc.

  6. Ajuste fino de grandes modelos:algoritmos de ajuste fino de todos los parámetros, de pocos parámetros y mediante instrucciones

  7. Inferencia de grandes modelos: compresión por cuantización, inferencia con ampliación de secuencias largas y métodos de caché

  8. Evaluación de grandes modelos: tareas posteriores de PLN, tareas posteriores de visión artificial, planes de evaluación

  9. Agentes de grandes modelos: proceso de RLHF, agentes, aprendizaje permanente

II、Vectores

Quienes conocen bien a los perros pueden distinguir rápidamente sus razas; podemos hacerlo porque observamos sus características desde distintos puntos de vista, como el tamaño corporal.
2.pngSi utilizamos un eje de coordenadas para representar su tamaño, estos perros se situarán en distintas coordenadas. Sin embargo, basarse únicamente en el tamaño no basta, ya que algunos tienen tamaños muy similares.
3.pngSi observamos otra característica, como la longitud del pelo, y creamos otro eje de coordenadas, podremos distinguir a algunos perros que tienen el mismo tamaño
4.pngPero todavía hay una parte que se solapa, así que hay que seguir observando desde más perspectivas, por ejemplo, la longitud de la nariz.
5.pngTambién podemos añadir más dimensiones, como el tamaño de los ojos. No podemos dibujar en un espacio de cuatro dimensiones, pero sí resulta muy fácil representarlo mediante los valores de las coordenadas: basta con seguir añadiendo valores al final.
6.pngTambién podemos observar las características de un perro desde más perspectivas, o dimensiones, como el grosor de las patas, el rizado del pelo e incluso aspectos abstractos, como la obediencia, la utilidad como animal de trabajo, etc. Cuantas más dimensiones utilicemos, mayor será nuestra capacidad para distinguir entre perros. Al mismo tiempo, también aumentará la dimensionalidad del espacio en el que se encuentran los puntos de coordenadas.
7.pngNo solo los perros: en realidad, casi cualquier cosa puede representarse así. Puede ser algo concreto, o algo abstracto, como la alegría, la ira, la tristeza y el placer, las penas y alegrías de las separaciones y los reencuentros. Las distintas cosas presentan manifestaciones diferentes, o valores diferentes, en las distintas dimensiones de sus características, por lo que al final cada una corresponde a un punto de coordenadas en un espacio de características de alta dimensionalidad. Simplemente, dentro de estos ámbitos más amplios, quizá necesitemos más dimensiones de características para distinguir bien unas cosas de otras. Pueden ser cientos, miles o incluso decenas de miles.
8.pngPero, como no podemos dibujar gráficos de más de tres dimensiones, lo explicaremos con coordenadas bidimensionales.
9.pngObservaremos que los puntos conceptualmente más próximos se agrupan más en el espacio, mientras que los que representan conceptos muy distintos están muy alejados entre sí. Si vamos un paso más allá y tomamos el origen de coordenadas como punto inicial y estos puntos como extremos, obtenemos vectores con dirección y magnitud.

Si se convierte una imagen en un vector, la búsqueda de vectores similares permite implementar la búsqueda de imágenes a partir de otra imagen
Si representamos los vídeos mediante vectores, podemos recomendar vídeos similares buscando vectores semejantes
Si los productos se representan mediante vectores, se pueden buscar vectores similares para ofrecer recomendaciones relacionadas con el producto que el usuario está viendo en ese momento
Si convertimos el texto en vectores, un sistema inteligente de preguntas y respuestas podrá encontrar, a partir de la pregunta actual del usuario, preguntas similares ya resueltas que sirvan de referencia

III、Bases de datos vectoriales

Con la llegada de la IA, los vectores se convertirán en una forma importante de datos. Las bases de datos tradicionales no son adecuadas para almacenar y recuperar datos vectoriales, por lo que se necesita una base de datos diseñada específicamente para abordar estas cuestiones; quizá llegue a convertirse en infraestructura básica de la capa de datos en el futuro. A diferencia de las bases de datos tradicionales, que almacenan tablas de datos y permiten búsquedas precisas mediante sentencias de consulta, las bases de datos vectoriales almacenan vectores. La consulta consiste en buscar en la base de datos los vectores más similares al vector de consulta, por lo que tiene cierto carácter aproximado.

Diagrama de puntos de datos vectoriales en un espacio tridimensional

1、Consulta vectorial

Uno de los principales casos de uso de los datos vectoriales es el siguiente: dado un vector de consulta, encontrar entre muchos vectores aquellos que más se le parecen. Esto es lo que se conoce como el problema de los vecinos más cercanos, y los algoritmos que lo resuelven se llaman algoritmos de vecinos más cercanos. Uno de los métodos más intuitivos puede ser la búsqueda por fuerza bruta: comparar uno por uno todos los vectores con el vector de consulta y seleccionar los que tengan mayor similitud. Existen muchos métodos concretos para comparar la similitud entre dos vectores,Distancia euclídea y similitud del coseno.
10.png

  • La distancia euclídea consiste en calcular la distancia en línea recta entre dos vectores. En un sistema de coordenadas bidimensional, dados dos vectores p y q, la distancia euclídea es la longitud de la línea recta que une p con q. En un sistema de coordenadas tridimensional, cada vector contiene tres coordenadas, x, y y z, y se calcula la distancia entre dos puntos cualesquiera mediante la fórmula. En un sistema de coordenadas de n dimensiones, hay 100 coordenadas, y se calcula la distancia entre dos puntos cualesquiera mediante la fórmula. Cuanto menor sea la distancia, mayor será la similitud de estos dos vectores en ciertas dimensiones
    11.png

  • Otra opción es la similitud del coseno. Además de la distancia, también podemos describir la relación entre los vectores mediante el ángulo que forman. En un sistema de coordenadas bidimensional, cuanto menor sea el ángulo, mayor será la relación entre los dos vectores. Podemos utilizar una fórmula para calcular la similitud del coseno entre dos vectores cualesquiera. En un sistema de coordenadas tridimensional, el mismo principio permite calcular el ángulo y la similitud del coseno entre dos vectores cualesquiera.
    12.png
    Si hay demasiados datos vectoriales, este método de fuerza bruta, carente de sofisticación técnica, provocará tiempos de búsqueda extremadamente elevados. Sin embargo, la calidad de la búsqueda es perfecta, porque realmente compara todos los vectores. Por ello, si el volumen de datos de la base de datos es relativamente pequeño y el tiempo necesario para recorrer todos los vectores es aceptable, también puede ser un buen método. No obstante, en las aplicaciones reales el volumen de datos no suele ser tan pequeño, por lo que es necesario encontrar formas de optimizarlo.

2、Índice vectorial

Antes explicamos el principio de búsqueda de las bases de datos vectoriales, pero, en la práctica, al buscar coincidencias por similitud en una base de datos vectorial, no se puede recurrir exclusivamente al cálculo mediante fórmulas, porque estas bases suelen contener grandes volúmenes de datos y vectores de muchas dimensiones. Calcular mediante una fórmula la similitud entre dos vectores de 1000 dimensiones requiere muchas operaciones y una elevada capacidad de procesamiento de la CPU. Si hubiera cien millones de vectores y hubiera que calcular la similitud de cada uno, el tiempo y el coste computacional serían aún mayores. Por eso introducimos aquí un concepto llamado índice vectorial.
Los índices vectoriales se parecen a los índices de las bases de datos relacionales, pero hay una diferencia. En una base de datos vectorial, los resultados obtenidos mediante un índice vectorial son aproximados, en lugar de ser 100% exactos.El índice vectorial describe el grado de similitud, mayor o menor. Por ello, lo llamamos búsqueda aproximada del vecino más cercano(ANS). Sin un índice vectorial, buscar por similitud un vector se parece a realizar un recorrido completo de una tabla en una base de datos relacional. Sin embargo, además de ese recorrido completo, hay que añadir otra capa de cálculo, por lo que el coste es mucho mayor que el de recorrer una tabla completa en una base de datos relacional.
Según su implementación, los índices vectoriales ANNS pueden dividirse en cuatro grandes categorías:

  • Índice basado en árboles

  • Índice basado en grafos

  • Índice basado en hash

  • Índice basado en cuantización

1、Métodos basados en árboles

La idea principal de los métodos basados en árboles consiste en dividir los datos, de forma similar a un árbol de búsqueda binaria, para reducir el espacio de búsqueda y permitir una recuperación rápida. Sin embargo, este enfoque no es adecuado para espacios de alta dimensionalidad. Entre estos métodos destacan KDTree(árbol de K dimensiones)y Annoy(Approximate Nearest Neighbors Oh Yeah, «vecinos más cercanos aproximados, ¡oh, sí!»).
1.1 KDTree
La construcción de un KDTree también se basa en la idea de la partición recursiva. Primero se selecciona la dimensión con mayor varianza y se toma como punto de corte la mediana de todos los datos de esa dimensión, dividiendo la región hiperrectangular en dos subregiones. Los valores inferiores a la mediana se asignan a la izquierda y los inferiores a la mediana a la derecha. Se construyen recursivamente los subárboles izquierdo y derecho hasta que todos los datos quedan divididos.
13.png

Proceso de búsqueda basado en KDTree:
1、Consulta el dato p y la dimensión de partición d del nodo actual; compara la coordenada del dato p en la dimensión d con el valor del nodo: si es mayor, pasa al hijo izquierdo; si es menor, pasa al hijo derecho;
2、Continuar el recorrido hasta llegar a un nodo hoja, marcarlo como visitado y calcular la distancia hasta él como la distancia mínima;
3、Realiza el retroceso en los nodos hoja y, en cada paso, evalúa la distancia entre p y las ramas aún no visitadas del nodo padre.
a)Si la distancia entre ese nodo de bifurcación y p es mayor que la distancia mínima actual, se sigue retrocediendo hacia arriba hasta llegar al nodo raíz;
b)Si la distancia entre ese nodo de ramificación y p es menor que la distancia mínima actual, utilizar esa rama y seguir los pasos 1 y 2 hasta llegar a un nodo hoja, actualizando la distancia mínima entre la hoja y Q.
14.png

1.2Annoy
Annoy utiliza hiperplanos para dividir el espacio. Para encontrar el hiperplano, emplea KMeans(k=2) para localizar dos centros de agrupamiento; el plano perpendicular a la línea que une ambos centros constituye el hiperplano de división. El proceso se repite hasta que la cantidad de datos de cada subespacio queda por debajo del umbral especificado.
 15.png16.png17.png

18.png

Para buscar cualquier punto de este espacio, se puede recorrer el árbol binario desde la raíz. Cada nodo intermedio —los cuadrados pequeños del árbol anterior— define un hiperplano, de modo que este permite decidir si se continúa por el hijo izquierdo o por el derecho. La búsqueda de un punto puede completarse en tiempo logarítmico, correspondiente a la altura del árbol.

Ventajas: mayor precisión con datos de baja dimensionalidad Desventajas: no captura plenamente la complejidad de los datos y ofrece menor precisión con datos de alta dimensionalidad

2、Métodos basados en grafos

Los métodos basados en grafos utilizan principalmente esta estructura de datos y aprovechan la conectividad entre nodos vecinos para construir autopistas, transformando el problema en un recorrido del grafo. Así pueden reducir rápidamente el ámbito de búsqueda y acelerar la recuperación. Sin embargo, los grafos son estructuras de datos bastante complejas y, para alcanzar la máxima velocidad de recuperación, suele cargarse el grafo completo en memoria, lo que provoca un consumo muy elevado. A cambio, la recuperación es rápida y la tasa de recuperación es alta.

Actualmente, el algoritmo de búsqueda en grafos más utilizado es HNSW (Hierarchical Navigating Small World, navegación jerárquica de mundo pequeño), mientras que NSW (Navigating Small World, navegación de mundo pequeño) es su predecesor y también conviene conocerlo.
2.1 NSW
NSW añade las siguientes convenciones a la construcción básica del grafo: todos los nodos deben tener nodos vecinos; los nodos vecinos deben estar conectados por aristas; el número de vecinos se establece como un hiperparámetro especificado por el usuario. Se utiliza principalmente para resolver algunas limitaciones del método básico de construcción de grafos.
19.pngProceso de construcción del grafo NSW:
Al insertar un nodo nuevo, primero se buscan los m nodos más cercanos y se conecta el nuevo nodo con esos m nodos.
Proceso de búsqueda de NSW:
Para el dato de consulta q, elegir al azar en el grafo un nodo de entrada y sus nodos vecinos, y calcular las distancias del nodo de entrada y sus vecinos a p. Si algún vecino está más cerca de p que el nodo de entrada, establecerlo como el punto de distancia mínima, hasta encontrar finalmente un punto cuyos vecinos estén todos más lejos de la consulta que dicho punto.
Como muestra la figura anterior, para buscar en el grafo de vecinos ya construido el nodo más cercano al nodo verde de consulta, se parte de puntos de entrada elegidos al azar; primero se llega rápidamente a los nodos cercanos al de consulta mediante los enlaces largos rojos y, después, se encuentra un punto que cumple los requisitos mediante los enlaces cortos negros.
NSW también utiliza un cálculo aproximado y no puede garantizar que el resultado sea el vecino más cercano real. Los puntos insertados primero tienen más aristas redundantes y más probabilidades de formar autopistas; cuanto más tarde se inserta un punto, menor es la probabilidad de que disponga de ellas.
2.1 HNSW
HNSW es una mejora de NSW que se basa principalmente en la idea de las listas de saltos y se implementa mediante capas. Cada capa es un NSW, por lo que también puede denominarse método NSW jerárquico. Cuanto más alta es la capa, más escasos son los nodos y mayor es la distancia entre ellos; al descender, aumentan los nodos y las conexiones, y disminuye la distancia media.
20.png

Ventaja: permite encontrar vecinos cercanos similares en datos de alta dimensionalidad, lo que mejora el rendimiento de búsqueda. Desventaja: la construcción del grafo es compleja y afecta a la eficiencia de la memoria.

3、Método basado en hash

Los métodos basados en hash aprovechan principalmente las propiedades de las funciones hash: los datos con un alto grado de similitud también tienen valores hash similares. Las funciones hash pueden transformar datos de alta dimensionalidad en datos de baja dimensionalidad, lo que mejora enormemente la eficiencia de construcción. Sin embargo, también presentan otra limitación: los datos con valores hash similares no son necesariamente similares, por lo que la exhaustividad de estos métodos no es muy alta. El principal método basado en hash es LSH (Locality-Sensitive Hashing, hash sensible a la localidad). Se supone que, si dos vectores son similares, sus valores hash también lo serán. Se utiliza una función hash para asignar vectores similares al mismo contenedor. Durante la consulta, primero se encuentra el contenedor más similar al vector de consulta y después se consultan los datos de ese contenedor para calcular los topk más similares.
21.pngLSH (hash sensible a la localidad) también es un método basado en la partición del espacio. Se implementa como muestra la siguiente figura: se genera una recta aleatoria que distingue un lado positivo y otro negativo. Si un vector está en el lado positivo, vale 1; si está en el negativo, vale 0. Después se genera otra recta aleatoria: de nuevo, el lado positivo vale 1 y el negativo, 0; al generar varias rectas de este modo, calculamos para cada vector 4 valores de 0 o 1, obteniendo para cada uno un código binario de 4 bits. Ahora observemos el grado de similitud entre estos 4 códigos binarios.
22.png23.png24.png25.png26.png27.png

Ventaja: procesa los datos muy rápidamente al ampliarse a grandes volúmenes; desventaja: la precisión es regular

5、Índices basados en cuantización (Quantized)

5.1、Agrupamiento
Si pudiéramos delimitar un ámbito aproximado para buscar el vector de consulta y después realizar la búsqueda dentro de él, aumentaríamos considerablemente la velocidad. Primero elegimos el número de categorías que queremos obtener, por ejemplo, las 4 categorías de la figura siguiente, y generamos aleatoriamente 4 centroides. Después asignamos cada vector al centroide más cercano. A continuación, calculamos el vector medio de los vectores asignados a una categoría y desplazamos su centroide hasta ese punto medio; luego volvemos a determinar qué centroide está más cerca de cada vector y los reclasificamos. Este proceso repetitivo se llama entrenamiento; al final, los centroides tenderán a estabilizarse, es decir, a converger. Al buscar, basta con localizar el centroide más cercano al vector de consulta y buscar entre los vectores de ese grupo. Así se consigue reducir el ámbito de búsqueda
29.png29.png

5.2、Cuantización(Quantization)
Pero, cuando se trata de grandes volúmenes de datos vectoriales, además de la velocidad de búsqueda, el consumo de memoria también supone un enorme reto. En las aplicaciones reales, no es raro trabajar con miles de dimensiones vectoriales y cientos de millones de vectores, por lo que el consumo de memoria puede ser muy elevado.
30.png

En la agrupación anterior hemos conocido el punto central, que en realidad se llama centroide. ¿Podríamos utilizar el centroide para representar los puntos del grupo? Debería ser posible; de hecho, este método es un ejemplo típico de Compresión con pérdida ,si lo ilustramos con una imagen, sería así:
31.png32.png

Aunque esto hace que se pierdan algunos valores del vector, la correlación entre el centroide de un grupo y los vectores de ese grupo permite conservar en gran medida parte de la información original. Frente a la pérdida de algunos detalles que provoca esta compresión con pérdida, los beneficios son muy considerables. El almacenamiento puede realizarse como muestra la figura siguiente: al utilizar un vector, su código permite encontrar el centroide correspondiente en el libro de códigos y recuperar los valores concretos de ese centroide. Representar un vector mediante el código de un centroide es lo que se denomina cuantización vectorial (Quantization).
33.png

5.3、Cuantización por productos PQ(Product Quantization)
Tras cuantizar los vectores, aparece además un libro de códigos. El consumo de memoria de los propios vectores sin duda disminuye, pero este libro de códigos genera un consumo adicional considerable. Esto no resulta tan evidente con pocas dimensiones, pero en escenarios reales, con vectores de cientos o miles de dimensiones, el tamaño de este libro de códigos puede volverse descomunal. Para una cantidad fija de vectores, cuanto más dispersa sea su distribución, más vectores de agrupación se necesitarán para garantizar la calidad de la cuantización.
34.png35.png36.png37.png39.png39.png


En las aplicaciones reales, con cientos o miles de dimensiones vectoriales, los datos serán muy dispersos. Por ello, en espacios de alta dimensionalidad, para garantizar la calidad de la cuantización, podemos necesitar una cantidad enorme de clústeres. La siguiente figura muestra un caso típico:un vector de 128 dimensiones podría necesitar 2 elevado a 64 centros de clúster, lo que haría que el libro de códigos utilizado para registrar la codificación de los centroides fuera gigantesco. La memoria consumida para almacenar este libro de códigos ya superaría con creces la que ahorra la propia cuantización
40.pngLa solución consiste en dividir primero el vector de alta dimensión en varios subvectores de menor dimensión y cuantizarlos de forma independiente. Por ejemplo, se divide un vector de 128 dimensiones en 8 subvectores de 16 bits y, después, se realiza por separado el entrenamiento de agrupamiento en cada uno de los 8 subvectores de 16 dimensiones.
42.png42.png

Así, cada vector puede cuantizar sus 8 subvec tores correspondientes utilizando los resultados del entrenamiento de 8 subespacios; además, cada subvector tiene una dimensión de 16, que no es muy elevada, por lo que cada subespacio de 16 dimensiones solo necesita 256 clústeres para lograr una cuantización bastante buena. Por eso, el código de cada subvector está en el intervalo 0-255; al combinar los códigos de cuantización de los 8 subvectores se obtiene el código de cuantización final del vector original. Es decir, ahora un vector se cuantiza en 8 códigos. Asimismo, cada subespacio construye su propio subdiccionario de códigos; durante el uso, los 8 códigos permiten recuperar de los subdiccionarios 8 subvectores de 16 dimensiones y combinarlos para reconstruir un vector de 128 dimensiones
45.png45.png45.png46.png


Comentarios

Enviando

Elige tu tema

El tema se aplica a todo el sitio.