該項目的創建是為了證明我們如何使用文本嵌入式(擁抱面變壓器)和矢量數據庫的直接結構來構建現代搜索引擎。
作為搜索數據的基礎,我使用了Commun Crumcrawl的最後六個月的爬行網站數據,但是由於我的筆記本電腦(M1 Max)花了將近兩個星期的時間來矢量化〜1MLN域,所以我假設任何使用此存儲庫的人都不會嘗試矢量化整個數據集?
要在本地運行此項目,您將需要!
data-worker和webapp (Next.js)該項目未針對生產進行優化,因此沒有“一個命令”生產部署實施。這將是如何構建網站搜索以使結果更像Google(一種…)的一個示例。
您將在其官方GitHub頁面上使用HuggingFace Text Embeddings界面找到更多信息。儘管如此,對於此存儲庫的上下文,我一直有興趣將其編譯為MACOS M1,並將其與M1 Max Metal GPU一起使用,該金屬GPU僅通過直接編譯可用。您可以使用基於英特爾的處理器的Docker容器,這些容器已預先構建,可用於NVIDIA GPU。
下面的命令將克隆文本嵌入式接口,並將其構建供MacOS金屬驅動程序使用M1處理器GPU。
git clone https://github.com/huggingface/text-embeddings-inference.git
cd text-embeddings-inference
cargo install --path router -F candle -F metal可能需要幾分鐘的CPU,因此請喝咖啡,同時☕️
data-worker目錄包含一個簡單的node.js腳本,該腳本旨在下載指定的commonCrawl數據時間範圍,並開始從爬行的HTML中矢量化文本內容,並保存結果作為向QDRANT數據庫和MongoDB的矢量保存結果,以供以後搜索參考。
重要的是要注意,“本地運行”的數據量是巨大的,因此請勿等待直到矢量化完成後,如果它甚至適合您的筆記本電腦,則需要幾個月的時間才能完成此操作。在執行2週後,我剛剛放棄了,因為它花費了近300GB的存儲空間,而在6個月的CommonCrawl數據集中,我只完成了4%。
webapp本身非常簡單。 JS應用程序,帶有尾風CSS和webapp/src/utils Directory中的一些自定義文件,在此,我具有連接到MongoDB,QDRANT數據庫的功能,並且還請求在執行實際搜索請求之前向vector intecterfacte entect entect intcection搜索搜索文本。
下面的這些命令是在本地運行此項目並開始矢量化和搜索CommonCrawl數據集的步驟。
BAAI/bge-large-en-v1.5 MTEB模型運行文本嵌入式接口 cd text-embeddings-inference
text-embeddings-router --model-id BAAI/bge-large-en-v1.5 --max-client-batch-size 5000 --port 88882。新終端:克隆此存儲庫,並運行Docker為MongoDB和Qdrant撰寫服務
git clone [email protected]:tigranbs/search-engine-example-text-embeddings.git
cd search-engine-example-text-embeddings
docker compose up -d3。新終端:運行數據工作者通過下載Common Crawl文件並將其發送到文本嵌入界面來開始對搜索數據進行矢量介紹
cd search-engine-example-text-embeddings
cd data-worker
npm i
npm start4新終端:運行WebApp開始搜索
cd search-engine-example-text-embeddings
cd webapp
npm i
npm run dev在這些步驟之後,您應該能夠導航到http:// localhost:3000並查看搜索頁面,搜索頁面將直接與您已經具有同步的文本頂部的mongodb和qdrant一起使用。