首页 » PHP教程 » xapianphp检索技巧_小白课程基于向量检索技能的UKUI智能语义搜索

xapianphp检索技巧_小白课程基于向量检索技能的UKUI智能语义搜索

访客 2024-11-23 0

扫一扫用手机浏览

文章目录 [+]

一、背景

1.1什么是向量检索?

在深度学习中,向量用于对非构造化数据进行特色表述,通过利用AI模型对图片,文本,视频和语音等非构造化数据进行特色向量提取操作,然后通过对这些特色向量的打算和检索,即可实现对非构造化数据进行剖析和检索。

xapianphp检索技巧_小白课程基于向量检索技能的UKUI智能语义搜索

向量的个中一个特性便是可以通过一些间隔打算如欧式间隔等,来判断向量之间的相似度,即其所代表的元素的相似度。
通过对相似度的打算,便可以实现基本的搜索功能。

xapianphp检索技巧_小白课程基于向量检索技能的UKUI智能语义搜索
(图片来自网络侵删)

向量检索的运用处景非常丰富,如推举系统、图片识别、自然措辞处理等。

1.2为什么要做向量检索?

UKUI中全局搜索运用(ukui-search)目前的文本内容搜索和图片搜索功能基于传统的中文关键词提取实现(图片通过OCR提取文本),数据库为基于倒排索引的Xapian数据库,搜索基于对“关键词”的搜索实现。
从根本上讲,搜索还是基于关键词匹配实现,纵然我们在一定程度上支持了“模糊搜索”,即可以在用户输入多个关键词时,做部分关键词的匹配即可召回,但根本上我们并没有办理用户输入的内容和其搜索内容之间的“模糊”关联关系,比如,假设用户有很多个描述“景象”的文件,包括包含对景象描述的文本文件和蔼象干系的照片,但每个文件中只包含对景象的描述,如“阴转小雨”,但并不包含“景象“这两个字,那么我们现在的搜索功能将不能搜到任何一个文件;其余一个例子是,如果用户输入的关键词刚好和我们在做关键词提取时提取的不一致,那么即利用户输入的内容和文件中的很类似,也无法搜索到对应的文件。

而向量搜索是基于“语义”的,我们将每个文件中的内容,通过特性模型转换成描述他们“语义”的特色向量保存在索引数据库中,当用户搜索时,我们将用户输入的内容天生向量,然后和数据库中的向量通过间隔打算,返回相似度较高的Topk向量,即可实现基于语义的模糊搜索,让用户得到的结果更加“人性化”。

二、我们要做什么?

2.1 确定得当的模型

用什么样的模型取决于我们的功能需求和利用场景,比如要实现文本内容搜索,就要利用文本转向量的模型,要实现图片搜索,即须要图片向量的模型,同时,我们还须要把稳模型对措辞的支持,大部分模型都只支持单一措辞。

同时,须要根据详细运用处景,我们还对模型的性能有一定的哀求,比如在不支持gpu加速的硬件上,如何担保索引的性能和资源占用不至于太高,同时,模型的大小也决定了我们软件包的打包大小。

如果开源模型难以知足我们的需求,或者我们须要针对用户场景对模型进行定制,那么我们就须要演习自己的模型,但演习模型须要耗费大量的人力物力,就目前来讲我们没有足够的资源。

如果开源模型能知足我们的需求,但索引过程中花费的资源过多,我们可能须要考虑对模型进行一些压缩处理,如模型蒸馏等。

2.2 构建数据库

向量搜索实在不一定依赖向量数据库,传统的关系型数据库也可以实现基本的搜索功能,但向量数据库有一些传统数据库无法实现的特性,例如,当平面索引搜索时性能不足时,可以通过分区索引等手段,在担保精度不丢失太多的情形下对搜索性能进行优化。

当向量维数很多,且数量大概多时,为了让索引数据库不占用过多磁盘空间,我们还须要考虑对向量数据进行压缩或降维。

同时,考虑到我们的运用处景,数据库还须要支持单条或批量的更新操作。

2.3 文件索引与搜索

搞定了模型和数据库,接下来要做的便是构建一个基于向量搜索的文件索引做事,基于ukui-search的文件索引机制,我们可以很方便的实现文件扫描,文件监听,目录增删,数据库管理等操作,有了这个根本,我们须要实现文件索引数据做事的构建功能,并且在UKUI上支配。

在索引数据做事的根本上,我们要实现搜索功能,重点分为两步,第一步是将用户输入的内容转换成向量,第二步是基于向量数据库的搜索接口进行搜索。
基于双塔模型,我们可以在一些用户特色数据的剖析加入搜索中,比如根据网络的用户习气做一些搜索结果推举等。

三、社区目前的考试测验

社区已经开始考试测验利用开源模型进行向量检索技能在UKUI中的运用。
针对文本内容搜索,社区选用了BERT等自然措辞处理模型,这些模型可以将文本转换为高维向量。
对付图片搜索,社区考试测验利用了clip模型来提取图片特色。

在数据库方面,社区测试了一些针对向量检索的数据库,如Faiss和Milvus等。
这些数据库供应了丰富的向量检索功能,同时支持向量的压缩和降维。
在初步测试中,我们创造这些数据库在性能和精度方面都表现良好。

为了实现文件索引与搜索功能,社区将在ukui-search的根本上进行扩展,将文件内容转换为向量并存储在向量数据库中。
同时,社区对搜索接口进行了调度,以支持基于向量相似度的搜索。
社区还考试测验利用双塔模型结合用户特色数据对搜索结果进行推举和优化。

目前,社区已经完成了部分功能的原型开拓和测试。
在实际利用中,基于向量检索的搜索功能相较于传统关键词匹配搜索,确实可以实现更加精准的模糊搜索,提高了用户体验。

3.1 文本内容向量搜索

文本内容向量搜索的demo程序利用到了sbert的开源模型和faiss向量数据库。

SBERT(Sentence-BERT)是一种天生句子嵌入表示的深度学习模型,其目的是为不同自然措辞处理任务供应高质量的文本表示。
SBERT模型通过利用双向编码器天生句子嵌入向量,以捕获句子中的语义和高下文信息,使不同句子之间的相似性得到准确的刻画。

FAISS(Facebook AI Similarity Search)是一种高性能向量数据库,用于处理大规模的向量数据集。
FAISS利用一系列的索引构造和近似算法来实现高效的向量搜索。
它支持 CPU 和 GPU,并可以在内存中存储和检索高维向量。

目前ukui-search中对付中文文本内容的处理利用到了分词,将一句话分成多个不同的关键词然后存入倒排索引数据库xapian来供应对应的关键词搜索功能。
而向量搜索则可以跳过分词的步骤将整句文本内容作为整体通过sbert模型打算出高维向量存入faiss向量数据库,搜索过程中faiss将供应多种索引构造和近似算法来高效输出近似向量干系信息。

3.1.1 相似文本内容搜索

利用pandas加载测试文本集作为本地搜索数据。
文本内容已做预处理,将单个句子作为一行保存。

cell运行对应输出:

利用sentence_transformers加载开源模型,然后将测试文本内容输入到模型中获取对应向量。

cell运行对应输出:

利用faiss向量数据库将已转换为向量的数据存入索引容器。

cell运行对应输出:

同样利用sentence_transformers加载开源模型并将要搜索的内容(测试数据集中无相同文本内容)转换为向量,然后利用索引容器搜索近似度前5的数据。

cell运行对应输出:

根据搜索结果可以看到向量搜索对付搜索不存在的内容可以输出非常附近的搜索结果。

3.1.2 精确文本内容搜索

向量搜索对付存在的内容同样有精确地搜索结果,例如将搜索内容更换为测试文本中存在的:“哈利溘然惊醒了”,再进行向量搜索。

cell运行对应输出:

可以看到对付精确文本内容的搜索faiss向量数据库依然能够供应精确的搜索结果。

3.1.3 C++接口技能验证

向量搜索的核心步骤为将文件内容转换为向量的模型和大批量存储向量的向量数据库。
目前已实现了利用开源模型中的pytorch模型通过script形式转换为C++可以利用的libtorch类模型,为桌面运用实现C++直接调用供应可能。
其余利用到了C++为核心编写的faiss向量数据库,通过修正部分cmake文件将faiss向量数据库链接到了demo工程中,

仿照之前例子中的搜索流程,利用C++编写Transfomer类实现文本通过vocab字典到张量的转换:

然后加载数据文件并完成向量转换存入数据库:

末了将搜索内容转换为向量并通过数据库搜索TOP5的内容:

程序输出内容如下:

比拟不同模型利用python的demo程序输出结果与C++版本程序输出结果:

可以看到搜索结果基本同等,相似性打算结果也基本同等。
末了一个有很小的差异预测是C++版本利用的libtorch默认精度为float32,而python版本的pytorch默认精度为float64导致。

3.2 多模态搜索

通过将不同种类的构造化数据通过CLIP模型转换到同一个语义空间中,可以实现诸如笔墨搜图,以图搜图等功能,大大扩展了桌面搜索的灵巧性。
语义搜索在单机的支配将领先竞品实现首次发布与运用。

3.3 目前面临的问题开源模型,自己演习的模型可能更适用;GPU适配,主机配置各不相同;模型效率问题,向量转换速率慢,须要模型蒸馏、剪枝等技能优化;Intel的CPU可以利用OpenVino加速,英伟达GPU可以利用TensorRT加速;开源ncnn技能,pytorch模型转换为onnx再转换为ncnn模型加载利用;模型占用存储空间大,集成到项目打包受影响;待索引内容选择,图片、文档、视频、语音...涉及多模态模型支持;多模态模型做事化支配,做事框架如triton inference server等。

四、未来操持

连续优化模型和数据库方案,提高搜索效率和准确性;考虑支持多措辞搜索,以知足更广泛的用户需求;优化搜索结果排序和推举算法,使搜索结果更加符合用户预期;针对不同文件类型(如视频和音频),考试测验引入相应的特色提取模型,实现全面的多媒体搜索功能;用户行为预测,将UKUI桌面环境各种用户操作向量化,通过用户输入内容预测用户行为。

五、总结

向量检索技能在UKUI中的运用有望为用户供应更加智能化、人性化的搜索体验。
通过不断优化模型、数据库和搜索算法,我们可以为用户供应供应更高效、准确的搜索做事。
乃至可以作为全体UKUI桌面环境的统一入口,通过输入信息预测用户行为并供应相应“一条龙”式的脚本化操作。

干系文档:

https://github.com/milvus-io/milvushttps://jina.ai/news/hype-and-hybrids-multimodal-search-means-more-than-keywords-and-vectors-2/https://github.com/openai/CLIP
标签:

相关文章

语言游戏聚会的魅力,跨界交流的盛宴

在繁忙的都市生活中,一场别开生面的语言游戏聚会悄然兴起。这不仅是一场简单的娱乐活动,更是一次跨界交流的盛宴,一场思想的碰撞与火花。...

PHP教程 2024-12-29 阅读1 评论0

语言序列逻辑在现代传播中的运用与影响

语言序列逻辑,作为现代传播学中的重要理论之一,对于理解语言传播的规律、提高传播效果具有重要作用。在信息化、网络化时代,语言序列逻辑...

PHP教程 2024-12-29 阅读1 评论0