向量搜索
kumosearch 能够对任何机器学习模型生成的 embedding 嵌入进行索引,并对这些数据进行最近邻(KNN)搜索和近似最近邻(ANN)搜索。
[[toc]]
使用场景
以下是向量搜 索的一些示例应用场景:
您还可以将上述功能与过滤、分面、排序、分组等功能相结合,以构建用户友好的搜索体验。
什么是 embedding?
embedding 嵌入是 JSON 文档的数字表示形式,通常为浮点数数组(例如:[0.4422, 0.49292, 0.1245, ...])。
这些 embedding 由机器学习模型生成,用于表示文档的 相似性(根据模型的不同,相似性的定义也有所不同)。相似的文档会有彼此 更接近 的嵌入(余弦相似度)。
以下是一些常见的生成文档 embedding 的模型:
- Sentence-BERT
- E-5
- CLIP
- OpenAI's Text Embeddings model
- Google's PaLM API
- Google's Vertex API
您可以将这些模型生成的 embedding 导入到 kumosearch 中的专用向量字段中,然后进行最近邻搜索。输入另一组向量或文档 ID,kumosearch 会返回与输入最接近的文档。
您可以使用 OpenAI、PaLM API 或此处列出的内置 ML 模型之一为您生成这些 embedding 嵌入。
案例演示
这是向量搜索的实际应用之一 - 电子商务中的 查找相似 功能:ecommerce-store.kumosearch.org。
Read More
这里有两篇文章更详细地讨论了 :
现在让我们看看如何在 kumosearch 中进行 embedding 的索引和搜索。
索引向量
选项 A:将外部生成的 embbding 嵌入导入到 kumosearch 中
如果您已经在 kumosearch 之外使用自己的模型生成了embbding,则可以将它们导入到 kumosearch 中。
这里 有一个如何使用 Sentence-BERT 模型生成嵌入的快速示例。
文档 embedding 准备就绪后,您需要创建一个包含 float[] 字段的索引表,并使用 num_dim 属性来索引它们。num_dim 属性指定了 embedding 的维度(浮点数组的长度)。
让我们创建一个名为 docs 的索引表,其中包含一个名为 embedding 的向量字段,该字段包含 4 个维度的向量。
我们在示例中创建了一个 4 维向量,以保持代码片段的可读性。