Elasticsearchでunit-length vectorsのエラー

Elasticsearchでdense_vector型を利用する際に、similarityをdot_productにして、単位ベクトルにしていても、The [dot_product] similarity can only be used with unit-length vectors. Preview of invalid vector: [... みたいなエラーが発生する場合がある。しかも、1万件中数件くらいしか、発生しないので、よくわからない感じにもなる…。

単位ベクトルを以下のようにnumpyで単位ベクトルに変換していた。

embedding = embedding / np.linalg.norm(embedding)

変換の仕方に問題はないのだが、embeddingのndarrayがnp.float16だったりすると、場合によっては、今回の問題が発生する可能性がある。なので、

embedding = embedding.astype(np.float32)
embedding = embedding / np.linalg.norm(embedding)

という感じで、np.float32にしてから単位ベクトルにして、Elasticsearchに投げてあげると、エラーにならなくなる。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です