Código de Dice.com para implementar las ideas discutidas en las siguientes charlas:
Esto amplía mi trabajo anterior sobre 'Búsqueda conceptual' que se puede encontrar aquí: https://github.com/DiceTechJobs/ConceptualSearch (incluidas diapositivas y enlaces de videos). En esta charla, presento varios enfoques diferentes para buscar vectores a escala utilizando un índice invertido. Esto implementa enfoques para la búsqueda aproximada de k vecinos más cercanos, que incluyen:
y describe cómo estas ideas se pueden implementar y consultar de manera eficiente dentro de un índice invertido.
ACTUALIZACIÓN: Después de hablar con Trey Grainger y Erik Hatcher de LucidWorks, recomendaron usar la frecuencia de términos en lugar de cargas útiles para las soluciones en las que incorporo ponderaciones de términos en el índice y uso una función especial de similitud consciente de la carga útil (que tampoco sería necesaria). Las cargas útiles conllevan una importante penalización en el rendimiento. El desafío con esto son las ponderaciones negativas, supongo que no es posible codificar frecuencias de términos negativos, pero esto se puede solucionar teniendo diferentes tokens para los tokens ponderados positivos y negativos, y haciendo ajustes similares en el momento de la consulta (donde los aumentos negativos pueden aplicarse en Solr según sea necesario).
Documentación de Lucene: Filtro de frecuencia de términos delimitados de Lucene
También ha habido una actualización reciente del núcleo de Lucene que se aplica aquí y pronto llegará a la búsqueda elástica al momento de escribir este artículo: Block Max WAND. Esto produce una aceleración significativa para consultas OR booleanas grandes en las que no es necesario saber el número exacto de resultados, sino que solo le importa obtener los N primeros resultados lo más rápido posible. Todos los enfoques que analizo aquí generan consultas OR relativamente grandes, por lo que esto es muy relevante. También leí que la implementación actual de la coincidencia mínima también incluye optimizaciones similares, por lo que es posible que ya se logre el mismo tipo de ganancia de rendimiento utilizando la configuración de mm adecuada, algo con lo que ya estaba experimentando en mi código.
Activar 2018: 'Vectores en Búsqueda'
Haystack 2019: 'Búsqueda con vectores'
Simon Hughes (científico jefe de datos, Dice.com)