Los algoritmos considerados en el estado del arte son los que reportan mejor recall y menor tiempo de consulta. Estudiamos dos clases de t ´ecnicas, las que se implementan en memoria prin- cipal (RAM) y las que se implementan en memoria secundaria ya que a ´un en un disco de estado s ´olido (SSD) la lectura y escritura es ordenes de magnitud m ´as lento.
2..1. Memoria principal.
El estado del arte en ´ındices en memoria principal es llamado HNSW (Hierarchical Navigable Small Worlds) propuesto en Malkov y Yashunin (2018). La idea es la construcci ´on de un gr ´afo KNN aproximado y realizar las b ´usquedas con las rutas formadas por las aristas entre nodos. Una de las principales propiedades de este trabajo es la estructura en capas jer ´arquicas del gr ´afo, esto es todos los puntos aparecen en la capa0o nivel inferior. Cada punto aparecer ´a en loslsiguientes niveles donde para cada punto se definel=b−ln(unif(0,1)c·mlconmlel nivel m ´aximo, es decir,
entre m ´as alto sea el nivel menos probable es que aparezca un punto.
capa 2 capa 1 capa 0 ep ep ep
Figura 18.Ilustraci ´on de idea en el HNSW.
El objetivo de esta estructura jer ´arquica es poder encontrar un nodo de entrada epque es el m ´as cercano en un cierto nivel aq, para despu ´es en un nivel inferior comenzar la b ´usqueda en el nodoep, que se espera resulte en tener que revisar menos nodos en el nivel inferior para terminar la b ´usqueda. En cada nivel se mantiene una lista temporal deef nodos m ´as cercanos en la capa y se va actualizando conforme la b ´usqueda desciende en la estructura. Desp ´ues de terminar la b ´usqueda en el nivel inferior se toman como respuesta loskm ´as cercanos aq.
Para construir el grafo se insertan secuencialmente todos los elementos del conjuntoP. Una inserci ´on puede ser vista como una b ´usqueda de los k vecinos en cada nivel y el uso de una heur´ıstica que depende del par ´ametroef Construction. Por cada elemento encontrado como ve- cino de un punto en una capa se puede considerar la existencia de una arista entre el punto y su vecino, pero para mantener bajo el n ´umero de aristas en el gr ´afo se consideran ´unicamente un n ´umero m ´aximoMmax0 de aristas para la capa inferior yMmax para cualquier otra capa, los au-
tores recomiendanMmax0 = 2Mmax para obtener un recall satisfactorio. Es importante mantener
este par ´ametro lo m ´as bajo posible ya que el mayor consumo de memoria en la estructura est ´a dado por el n ´umero de conexiones entre los nodos, esto esMmax0·ml·Mmaxpara cada elemento.
Se recomienda asignarMmax en el rango de6a48lo que hace que cada nodo tenga un peso de
60y450bytes en conexiones por elemento enP (ver el Algoritmo 7). Algoritmo 6Seleccionar Vecinos
Entrada: elemento baseq, candidatosC, n ´umero de vecinosM Salida: losM vecinos m ´as cercanos aq
Funci ´onSELECCIONARVECINOS(q,C,M)
RegresalosM vecinos m ´as cercanos deqenC Fin Funci ´on
Algoritmo 7Insertar en hnsw
Entrada: grafo hnsw, nuevo elemento q, n ´umero de conexiones M, n ´umero m ´aximo de co- nexiones para cada elemento por capa M max, tama ˜no de la lista din ´amica de candidatos ef Construction, factor de normalizaci ´on para generaci ´on de nivelml
Salida: hnswactualizado con el elementoq insertado
Funci ´onINSERTARHNSW(hnsw,q,M,M max,ef Construction,ml) W ← ∅lista temporal para los elementos m ´as cercanos encontrados ep←punto de entrada ahnsw
L←nivel del punto de entradaepo capa m ´as alta delhnsw l← b−ln(unif(0..1))mlcel nivel del elementoq
Paralc←L . . . l+ 1Hacer
W ←BuscarEnCapa(q, ep, ef = 1, lc)
ep←el vecino m ´as cercano enW aq Fin Para
Paralc←min(L, l). . .0Hacer
W ←BuscarEnCapa(q, ep, ef Construction, lc)
vecinos←SeleccionarV ecinos(q, W, M, lc)
agregar conexiones bidireccionales de vecinos aq en la capalc
Paracadae∈vecinosreduce conexiones si es necesarioHacer eConn←vecindad(e)en la capalc
Si |eConn| > M max se reducen las conexiones de e, si lc = 0 M max = M max0
Entonces
eN ewConn←SeleccionarV ecinos(e, eConn, M max, lc)
actualizar el vecindario deeen la capalc
Fin Si Fin Para ep←W Fin Para
Sil > LEntonces
tomarepcomo el punto de entrada alhnsw Fin Si
Regresahnsw Fin Funci ´on
Algoritmo 8Buscar en capa
Entrada: elemento consultaq, punto de entradaep, n ´umero de elementos cercanos aqa regresar ef, capalc
Salida: losef vecinos m ´as cercanos aq en la capalc
Funci ´onBUSCARENCAPA(q,ep,ef,lc)
v ←epconjunto de elementos visitados C ←epconjunto de candidatos
W ←eplista din ´amica de los vecinos m ´as cercanos encontrados Mientras|C|>0Hacer
c←obtener el elemento m ´as cercano aqenC f ←obtener el elemento m ´as lejano aqenW Sidistancia(c, q)> distancia(f, q)Entonces
salirtodos los elementos enW se evaluaron Fin Si
Paracadae∈vecindario(c)en la capalcHacer
Sie6∈v Entonces v←v∪e
f ←obtener el elemento m ´as lejano aqenW
Sidistancia(e, q)< distance(f, q)o|W|< ef Entonces C←C∪e
W ←W ∪e
Si|W|> ef Entonces
quitar el elemento m ´as lejano aq enW Fin Si Fin Si Fin Si Fin Para Fin Mientras RegresaW Fin Funci ´on
Una b ´usqueda empieza en el nivel superior, donde se espera haya muy pocos nodos, de esta capa se obtiene un listaL de candidatos temporales de tama ˜no ef Search que se requiere sea mayor a loskvecinos que se estan buscando, entre mayor seaef Searchse espera mejor recall, incrementando el tiempo de b ´usqueda. En la siguiente capa el punto de entradaepser ´a el punto m ´as cercano enLa la consulta, en esta capa se espera haya m ´as nodos que en la capa superior. Posteriormente se actualizaL con los vecinos m ´as cercanos a la consulta en esta capa y este proceso se repite hasta llegar al nivel inferior. Al terminar de actualizar la listaL en la capa0 se obtienen loskobjetos m ´as cercanos a la consulta en la listaLcomo respuesta (ver Algoritmo 9).
Algoritmo 9B ´usqueda de los k vecinos m ´as cercanos
Entrada: grafohnsw, elemento consultaq, n ´umero de elementos m ´as cercanosK, tama ˜no de la lista din ´amicaef Search
Salida: losKvecinos m ´as cercanos aq
Funci ´onBUSQUEDAKNN(hnsw,q,K,ef Search)
W ← ∅conjunto din ´amico de elementos m ´as cercanos ep←el punto de entrada delhnsw
L←nivel delep
Paralc←L . . .1Hacer
W ←BuscarEnCapa(q, ep, ef = 1, lc)
ep←el vecino m ´as cercano aqenW Fin Para
W ←BuscarEnCapa(q, ep, ef Search, lc= 0)
RegresalosK vecinos m ´as cercanos aq enW Fin Funci ´on
Para observar el rendimiento del hnsw con respecto a algunos algoritmos en la bibliograf´ıa utilizamos un conjunto de un mill ´on de vectores en un espacio Euclidiano de 128 dimensiones. Construimos ´ındices con diferentes par ´ametros para cada t ´ecnica y realizamos1000consultas en cada ´ındice. En la Figura 19 se puede observar que se pueden realizar cerca de1000consultas en un segundo con unrecall casi perfecto. En la Figura 20 se observa que el tama ˜no requerido para esterecall es de alrededor de un gigabyte. Este algoritmo es considerado el estado del arte en memoria principal pero debido al requerimiento en tama ˜no no escala a bases de datos m ´as grandes, por ejemplo, para una base de datos de1,000,000,000de vectores enR128se requieren
1,000gigabytes . Adem ´as t ´ecnicas comohnswno toman en cuenta los accesos a memoria, por lo tanto, no tienen buen rendimiento en memoria secundaria. Las t ´ecnicas para memoria secundaria generalmente limitan los accesos a memoria utilizando la estructura de ´ındice invertido.
0.4 0.6 0.8 1 101 102 103 104 Recall Consultas por segundo (1/s) annoy secuencial hnsw kdtree
Figura 19.Recall-Consultas por segundo (1/s)
0.8 0.85 0.9 0.95 1 104 105 106 Recall T ama ˜no del ´ındice (kB) annoy secuencial hnsw kdtree
Figura 20.Recall- Tama ˜no del ´ındice (kB)
2..2. Memoria secundaria.
En memoria secundaria los algoritmos en la literatura se basan enproduct quantization (pq)y el algoritmo con el mejor rendimiento actualmente se presenta en (J ´egouet al., 2011). La idea en ese trabajo es descomponer el espacio en un producto de subespacios de dimensi ´on m ´as baja y cuantizar cada subespacio por separado. Cada vector es representado por un c ´odigo en cada uno de los subespacios. La distancia Euclidiana entre dos vectores puede estimarse de manera eficiente con la distancia entre sus c ´odigos.
Un cuantizador es una funci ´on f que mapea un vector x ∈ Rn a un vector f(x) ∈ C =
{ci;i∈I}, donde el conjunto de ´ındicesI ={1, ..., k}. Los valores deci son llamados centroides.
El conjunto de valores que puede tomarCse le conoce como libro de c ´odigos y es de tama ˜nok.
El conjunto de vectoresVi mapeados a un ´ındiceipuede ser visto como una celda voronoi y
definida como
Vi :={x∈Rn:f(x) =ci}. (4)
Para ser eficiente ante la maldici ´on de la dimensi ´on se propone partir el espacio Rn en m
subespacios de dimensi ´onn∗ = n/m. Los subvectores se cuantizan utilizando m cuantizadores distintos. Un vectorxse mapea de la siguiente manera:
(x1, ..., xn) = (f1(u1(x)), ..., fm(um(x))) (5)
dondeu1(x) = (x1, ..., xn∗), ..., um(x) = (xn−n∗+1, ..., xn)y fj es el cuantizador de baja dimensi ´on
asociado con elj−´esimo subvector. El libro de c ´odigos es definido por el producto cartesiano:
C=C1×...×Cm (6)
En ese trabajo se propone el uso de una aproximaci ´on a la distancia Euclidiana que se define por: ˆ d(x, y) =d(x, f(y)) = s X j d(uj(x), qj(uj(y)))2 (7)
Para mejorar en tiempo de consulta proponen utilizar la aproximaci ´on de la distancia y un ´ındice invertido. La idea es utilizar el c ´odigo de la cuantizaci ´on de un vector como entrada a un ´ındice invertido, con el objetivo de obtener un conjunto candidato r ´apidamente. Una vez que se tiene el conjunto candidato se refina la b ´usqueda utilizando una cuantizaci ´onfp del residuo el cual
se define como:
El estimador de d(x, y), donde x es la consulta y y un vector en la base de datos, est ´a dado comod¨(x, y)la cual se define por:
¨
d(x, y) =d(x−f(y), fp(y−f(y))) (9)
En la pr ´actica se calcula de la siguiente manera:
¨ d(x, y)2 =X j d(uj(x−f(y)), fpj(uj(y−f(y))))2 (10) 0.4 0.6 0.8 1 101 102 103 104 Recall Consultas por segundo (1/s) annoy secuencial pq hnsw kdtree
0.75 0.8 0.85 0.9 0.95 1 104 105 106 Recall T ama ˜no del ´ındice (kB) annoy secuencial pq hnsw kdtree
Figura 22.Recall-Tama ˜no del ´ındice (kB)
La t ´ecnicapqes considerada el estado del arte en ´ındices para memoria secundaria, el rendi- miento comparado con otras t ´ecnicas de la literatura se muestra en las Figuras 21 y 22. Se puede observar en la Figura 21 que con unrecall casi perfecto se pueden lograr alrededor de500con- sultas. Adem ´as se requiere de un ´ındice de casi800megabytes en tama ˜no para obtener unrecall
casi perfecto. Esta t ´ecnica tiene la desventaja de que solamente se puede aplicar en espacios vectoriales pero no en otros espacios m ´etricos, por ejemplo, en nubes de puntos.
Para espacios m ´etricos generales, es decir, donde la ´unica informaci ´on disponible es la dis- tancia entre cualquier pareja de puntos, la t ´ecnica que ha reportado mejor rendimiento es MI-File (Amatoet al., 2014a). Dado el dominio X, la funci ´on distanciad : X×X → R y el conjunto de
q r1 r2 r5 r3 r5 o2 o1 o3 o4 x∗1= (3,2,4,5,1) x∗2= (4,5,2,1,3) x∗ 3= (4,2,3,5,1) x∗ 4= (4,3,1,5,2) q= (2,3,4,5,1) d∗(q, x∗1) = 1 + 1 + 0 + 0 + 0 = 2 d∗(q, x∗ 2) = 2 + 1 + 1 + 0 + 0 = 4 d∗(q, x∗3) = 2 + 0 + 3 + 0 + 1 = 6 d∗(q, x∗4) = 2 + 2 + 2 + 4 + 2 = 12
Figura 23.Ejemplo del mapeo al espacio de permutaciones. a) los puntos negros son los puntos referencia, los puntos blancos los objetos en la base de datos y el cuadro blanco una consulta. b) La transformaci ´on de los objetos al espacio de permutaciones. c) La distancia SFD en el mapeo.
Se representax∈X como el ordenamiento de los objetos de referenciaRde acuerdo con la distancia ax. Formalmente, dadox∈X,xes representado como el objetox∗=p1, ..., pm, donde
pies la posici ´on del objeto referenciarien el ordenamiento. Por ejemplo, six∗(4) = 3, la referencia
r4 es la tercera m ´as cercana ax.
La similitud entre dos representaciones x∗1 y x∗2 es calculada con la distancia Spearman Foo- trule (SFD), que se define de la siguiente manera:
SF D(x∗1, x∗2) = X
i=1...m
|x∗1(i)−x∗2(i)| (11)
Adicionalmente, probaron con otras distancias para permutaciones como la distancia de Kendall Tau y la distancia Spearman Rho sin observar cambios en la calidad de las respuestas.
La t ´ecnica utiliza el ´ındice invertido para implementarse en memoria secundaria. Las llaves de acceso a las listas invertidas son los objetos referencia enR. Las listas invertidas asociadas a una llaveri ∈ R es una lista de duplas(x, x∗(i))para alg ´un x ∈ X. Por ejemplo, si la dupla(x,7)se
encuentra en la lista invertida asociada ari, indica que la referencia ri es la s ´eptima referencia
r1→(x1,3),(x2,4),(x3,4),(x4,4) r2→(x1,2),(x2,5),(x3,2),(x4,3) r3→(x1,4),(x2,2),(x3,3),(x4,1) r4→(x1,5),(x2,1),(x3,5),(x4,5) r5→(x1,1),(x2,3),(x3,1),(x4,2)
Figura 24.El ´ındice invertido que se obtuvo del ejemplo en la Figura 23.
Para mejorar en tiempo de consulta y en espacio, limitan las representaciones de los objetos en la base de datos y la consulta. Esto lo hacen considerando ´unicamente laskxreferencias m ´as
cercanas para los objetos en la base de datos y los kq referencias m ´as cercanas a la consulta.
Formalmente,Φkx(x) ={ri|x
∗(i)≤k
x}, el proceso es el mismo para el objeto consulta conkq. Pa-
ra esta reducci ´on de las representaciones se propone el uso de una aproximaci ´on de la distancia Spearman Footrule, la distancia Footrule Inducida (IFD), definida como:
IF D(x∗, q∗) = X
ri∈Φkq(q)
|x∗(i)−q∗(i)| (12)
Hay que notar que la funci ´on IFD obtiene la distancia calculando la suma de la diferencia de posiciones de los objetos referencia en las representaciones de los objetos consulta y los objetos en la base de datos. Sin embargo, ahora un objeto referencia puede aparecer en la representaci ´on de una consulta y no en la representaci ´on de un objeto en la base de datos. Cuando esto ocurre se sumakx a la suma en la funci ´on (ver la Figura 25).
Dado un objeto referenciari y su posici ´onpen la representaci ´on de una consultaq. Proponen
acceder solo a una parte de la lista invertida asociada a ri. Se utiliza un umbral de diferencia
m ´axima en la posici ´on (MPD), para filtrar las duplas donde la posici ´on deri en la representaci ´on
x∗ 1= (3,2,4,5,1) x∗ 2= (4,5,2,1,3) x∗3= (4,2,3,5,1) x∗4= (4,3,1,5,2) q= (2,3,4,5,1) r1→(x1,3) r2→(x1,2),(x3,2),(x4,3) r3→(x2,2),(x3,3),(x4,1) r4→(x2,1) r5→(x1,1),(x2,3),(x3,1),(x4,2) kx= 3 kq= 2 IF D(q∗, x∗ 1) = 1 + 0 = 1 IF D(q∗, x∗ 2) =kx+ 2 = 5 IF D(q∗, x∗3) =kx+ 0 = 3 IF D(q∗, x∗4) =kx+ 1 = 4 a) b) c)
Figura 25.Indexando con laskx referencias m ´as cercanas a los objetos en la base de datos y consultan- do con laskq referencias m ´as cercanas. a) Representaci ´on completa de los objetos. b) ´Indice invertido. c)Distancia a la consulta en la transformaci ´on.
Para un conjunto de un mill ´on de vectores de64dimensiones conm= 2000,kx = 200,kq = 50,
M P D= 50y revisando alrededor de1000distancias se reporta un recall de90 %. Esta t ´ecnica al no alcanzar niveles de recall cercanos al100 %, se propone para el uso de recuperaci ´on multime- dia, en particular para la recuperaci ´on de im ´agenes.
Algunas de las desventajas de este trabajo son las siguientes:
El n ´umero de referencias es limitado para las representaciones. Si se quisiera tener mejor recall aumentando las referencias en la permutaci ´on se requiere m ´as memoria y tiempo en una consulta.
La b ´usqueda de las referencias m ´as cercanas se podr´ıan acelerar utilizando un algoritmo auxiliar en memoria principal.
El n ´umero de candidatos que se obtienen al filtrar una lista con el par ´ametro M P Dno est ´a acotado. Si el n ´umero de candidatos es grande, el tiempo de evaluaci ´on deIF Dpara cada candidato, incrementa significativamente el tiempo en responder una consulta.
No reportan el n ´umero de consultas que se pueden realizar en un segundo. No se puede determinar si es competitivo con los ´ındice para memoria principal.
MI-File es considerado el estado del arte en ´ındices para memoria secundaria para espa- cios m ´etricos generales. A ´un cuando la t ´ecnica tiene limitaciones en tiempo de respuesta en una
consulta con respecto a otras t ´ecnicas comopq, MI-File tiene como ventaja el solo requerir de la existencia de una m ´etrica para comparar parejas de objetos en un dominio, por ejemplo, el dominio de las cadenas con la distancia de Levenshtein.