使用 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 分数并按分数限制结果。确定性背后的最初想法是我们想要一个单一的度量标准,它可以产生一个介于 0
和 1
之间的数字来指示距离。用cosine sim就简单了,因为这已经在-1, 1
的范围内了,所以很容易把它转化成一个确定性。对于点积这样的无限分数,这并不容易。
前进的道路
这里is a discussion on this topic。欢迎参与本次讨论。当前最喜欢的选项是弃用 certainty
并将原始值公开为 score
或 distance
.
任何快速修复?
在解决上述 API 问题之前,我们可以轻松启用新的距离分数,例如点积。可能作为使用功能标志的实验功能。但是,您将无法在 API 中看到结果 scores/distances。
时间表
我希望上述问题在撰写本文时的几周内(2022 年 4 月 28 日)得到解决。
我已经在 Weaviate 中保存了我想使用点积查询的向量。 我正在使用 python sdk,但无论如何我都看不到指定它。 有谁知道这是否 possible/not 可能?
您好,感谢您的提问。
写这篇文章时的简单回答是“还没有,但很快”,但我想我需要详细说明一下以解释更多。
距离函数
通常,Weaviate 中的距离函数是完全可插拔的。任何可以产生分数的东西都可以插入。例如,see this folder。事实上,您甚至会在其中看到一个名为 dot_product.go
的文件。这是因为在内部计算余弦 sim 时,Weaviate 将在读取时对所有向量进行归一化,然后只计算点积。
APIs
那么,如果 Weaviate 可以计算点积,为什么你不能 select 这个选项?这是因为过去决定在 API 中引入 certainty
字段。此字段用于 return 分数并按分数限制结果。确定性背后的最初想法是我们想要一个单一的度量标准,它可以产生一个介于 0
和 1
之间的数字来指示距离。用cosine sim就简单了,因为这已经在-1, 1
的范围内了,所以很容易把它转化成一个确定性。对于点积这样的无限分数,这并不容易。
前进的道路
这里is a discussion on this topic。欢迎参与本次讨论。当前最喜欢的选项是弃用 certainty
并将原始值公开为 score
或 distance
.
任何快速修复?
在解决上述 API 问题之前,我们可以轻松启用新的距离分数,例如点积。可能作为使用功能标志的实验功能。但是,您将无法在 API 中看到结果 scores/distances。
时间表
我希望上述问题在撰写本文时的几周内(2022 年 4 月 28 日)得到解决。