什么是正确的方法来获得单位向量索引ElasticSearch和点积?

ve7v8dk2  于 2022-12-11  发布在  ElasticSearch
关注(0)|答案(1)|浏览(421)

我试图索引词嵌入向量到ElasticSearchV8 ann dense_vectordot_product
我可以成功地将vec索引到cosine,所以我将其转换为单位向量,并使用numpy for dot_product

unit_vector = vec / np.linalg.norm(vec)

但我得到了一个400错误,这样说。

The [dot_product] similarity can only be used with unit-length vectors. Preview of invalid vector: [-0.0038341882, -0.1564709, 0.08771773, -0.14555556, -0.07952896, ...]

我错过了什么吗?

g2ieeal7

g2ieeal71#

我也遇到了同样的问题,经过多次试验,我找到了解决办法。
在我的例子中,当将大量嵌入索引到Elasticsearch(相似性参数设置为dot_product的dense_vector)时,大多数嵌入都得到了正确的索引,一小部分嵌入失败,出现The [dot_product] similarity can only be used with unit-length vectors.
经过大量测试,我发现问题是我使用的单位向量是np.float16数值类型,这导致了错误。在我的工作流中,将np.float32作为单位向量的数值类型,解决了这个问题。

相关问题