使用 python sdk 时,weaviate 是否支持点积相似度

Does weaviate support dot product similarity when using the python sdk

我已经在 Weaviate 中保存了我想使用点积查询的向量。 我正在使用 python sdk,但无论如何我都看不到指定它。 有谁知道这是否 possible/not 可能?

您好,感谢您的提问。

写这篇文章时的简单回答是“还没有,但很快”,但我想我需要详细说明一下以解释更多。

距离函数

通常,Weaviate 中的距离函数是完全可插拔的。任何可以产生分数的东西都可以插入。例如,see this folder。事实上,您甚至会在其中看到一个名为 dot_product.go 的文件。这是因为在内部计算余弦 sim 时,Weaviate 将在读取时对所有向量进行归一化,然后只计算点积。

APIs

那么,如果 Weaviate 可以计算点积,为什么你不能 select 这个选项?这是因为过去决定在 API 中引入 certainty 字段。此字段用于 return 分数并按分数限制结果。确定性背后的最初想法是我们想要一个单一的度量标准,它可以产生一个介于 01 之间的数字来指示距离。用cosine sim就简单了,因为这已经在-1, 1的范围内了,所以很容易把它转化成一个确定性。对于点积这样的无限分数,这并不容易。

前进的道路

这里is a discussion on this topic。欢迎参与本次讨论。当前最喜欢的选项是弃用 certainty 并将原始值公开为 scoredistance.

任何快速修复?

在解决上述 API 问题之前,我们可以轻松启用新的距离分数,例如点积。可能作为使用功能标志的实验功能。但是,您将无法在 API 中看到结果 scores/distances。

时间表

我希望上述问题在撰写本文时的几周内(2022 年 4 月 28 日)得到解决。