我试图索引词嵌入向量到ElasticSearchV8 ann dense_vector
dot_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, ...]
我错过了什么吗?
1条答案
按热度按时间g2ieeal71#
我也遇到了同样的问题,经过多次试验,我找到了解决办法。
在我的例子中,当将大量嵌入索引到Elasticsearch(相似性参数设置为dot_product的dense_vector)时,大多数嵌入都得到了正确的索引,一小部分嵌入失败,出现
The [dot_product] similarity can only be used with unit-length vectors.
经过大量测试,我发现问题是我使用的单位向量是np.float16数值类型,这导致了错误。在我的工作流中,将
np.float32
作为单位向量的数值类型,解决了这个问题。