该项目的创建是为了证明我们如何使用文本嵌入式(拥抱面变压器)和矢量数据库的直接结构来构建现代搜索引擎。
作为搜索数据的基础,我使用了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一起使用。