Este proyecto se ha creado para demostrar cómo podemos construir motores de búsqueda modernos utilizando una estructura directa de incrustaciones de texto (transformadores de superficie de abrazos) y una base de datos vectorial.
Como base para los datos de búsqueda, utilicé los últimos seis meses de datos del sitio web de CommonCrawl, pero debido a que tomó casi dos semanas en mi computadora portátil (M1 Max) para vectorizar ~ 1 mln dominios, supongo que cualquiera que use este repositorio no intentaría vectorizar el conjunto de datos completo?
Para ejecutar este proyecto localmente, ¡ necesitará!
data-worker y webapp (next.js)Este proyecto no fue optimizado para la producción, por lo que no existe una implementación de implementación de producción de "un comando". Este será un ejemplo de cómo crear una búsqueda de su sitio web para hacer que los resultados sean más como Google (algo de ...)
Encontrará más información sobre el uso de la interfaz de incrustaciones de texto Huggingface en su página oficial de GitHub. Aún así, para el contexto de este repositorio, he estado interesado en compilarlo para el MacOS M1 y usarlo con la GPU M1 Max Metal, que está disponible solo a través de la compilación directa. Puede usar los contenedores Docker de procesadores basados en Intel, que están prebuilados y disponibles para las GPU NVIDIA.
Los comandos a continuación clonarán la interfaz de incrustaciones de texto y los construirán para que el controlador de metal macOS use GPU del procesador M1.
git clone https://github.com/huggingface/text-embeddings-inference.git
cd text-embeddings-inference
cargo install --path router -F candle -F metalPuede tomar unos minutos y el 100% de su CPU, así que toma un café mientras tanto ☕️
El directorio data-worker contiene un simple nodo.js scripts, que están diseñados para descargar el marco de tiempo de datos de CommonCrawl especificado y comenzar a vectorizar el contenido de texto de HTML rastreo y guardar resultados como vectorios de la base de datos Qdrant y MongoDB para una referencia de búsqueda posterior.
Es importante tener en cuenta que la cantidad de datos es enorme para una "ejecución local", así que no intente esperar hasta que se completara la vectorización, llevará meses seguidos completar esto si incluso se ajustará a su computadora portátil. Después de 2 semanas de ejecución, me di por vencido, porque tomó casi 300 GB de almacenamiento y solo tuve el 4% de esos 6 meses de conjunto de datos CommonCrawl.
La webapp en sí es muy simple Next.js App con un CSS de viento de cola y algunos archivos personalizados dentro del directorio webapp/src/utils , donde tengo la funcionalidad de conectarme a MongoDB, bases de datos de Qdrant y también solicita la interfaz de integración de texto para vectorizar el texto de búsqueda antes de realizar una solicitud de búsqueda real.
Esos comandos a continuación son los pasos para ejecutar este proyecto localmente y comenzar a vectorizar y buscar el conjunto de datos CommonCrawl.
BAAI/bge-large-en-v1.5 MTEB para la vectorización cd text-embeddings-inference
text-embeddings-router --model-id BAAI/bge-large-en-v1.5 --max-client-batch-size 5000 --port 88882. Nuevo terminal: Clone este repositorio y ejecute los servicios de composición de Docker para MongoDB y Qdrant
git clone [email protected]:tigranbs/search-engine-example-text-embeddings.git
cd search-engine-example-text-embeddings
docker compose up -d3. Nuevo terminal: ejecute Data Worker para comenzar a vectorizar los datos de búsqueda descargando los archivos CommonCrawl y enviándolo a la interfaz de envoltura de texto
cd search-engine-example-text-embeddings
cd data-worker
npm i
npm start4 NUEVA TERMINAL: Ejecute WebApp para comenzar a buscar
cd search-engine-example-text-embeddings
cd webapp
npm i
npm run devDespués de esos pasos, debería poder navegar al http: // localhost: 3000 y ver la página de búsqueda, que funcionará directamente con el MongoDB y el Qdrant sobre los textos ya sincronizados que ya tendrá.