微软开源了 Bing 中使用的矢量搜索库

微软 опубликовала 机器学习库源代码 SPTAG (空间划分树和图)以及近似算法的实现 最近邻搜索。 图书馆 发达 在微软研究院的研究部门和搜索技术开发中心(Microsoft Search Technology Center)。 实际上,Bing 搜索引擎使用 SPTAG 根据搜索查询的上下文确定最相关的结果。 该代码是用 C++ 编写的,并且 分发者 根据麻省理工学院的许可。 支持针对 Linux 和 Windows 进行构建。 Python 语言有一个绑定。

尽管在搜索引擎中使用向量存储的想法已经存在了相当长的时间,但在实践中,它们的实现受到向量操作的高资源强度和可扩展性限制的阻碍。 将深度机器学习方法与近似最近邻搜索算法相结合,使得向量系统的性能和可扩展性达到大型搜索引擎可接受的水平成为可能。 例如,在 Bing 中,对于超过 150 亿个向量的向量索引,获取最相关结果的时间在 8 毫秒以内。

该库包括用于构建索引和组织向量搜索的工具,以及一组用于维护涵盖非常大的向量集合的分布式在线搜索系统的工具。 提供了 以下模块:用于索引的索引构建器、使用分布在多个节点的集群中的索引进行搜索的搜索器、用于在节点上运行处理程序的服务器、用于将多个服务器合并为一个的聚合器以及用于发送查询的客户端。 支持将新向量包含到索引中以及动态删除向量。

该库意味着集合中处理和呈现的数据以相关向量的形式格式化,可以根据 欧几里得 (L2) 或 余弦 距离搜索查询返回与原始向量之间的距离最小的向量。 SPTAG提供了两种组织向量空间的方法: SPTAG-KDT(K维树()和 相对邻域图)和 SPTAG-BKT(k 均值树(k均值树 和相对邻域图)。 第一种方法在使用索引时需要较少的资源,第二种方法对于非常大的向量集合展示了更高的搜索结果准确性。

同时,矢量搜索不仅限于文本,还可以应用于多媒体信息和图像,以及自动生成推荐的系统中。 例如,基于 PyTorch 框架的原型之一实现了一个矢量系统,用于基于图像中对象的相似性进行搜索,该系统使用来自多个参考集合的数据构建,其中包含动物、猫和狗的图像,这些图像被转换为​​向量集。 当接收到输入图像进行搜索时,使用机器学习模型将其转换为向量,基于该向量,使用 SPTAG 算法从索引中选择最相似的向量,并将相关图像作为结果返回。

来源: opennet.ru

添加评论