[mob][photos] Add method for safe cosine distance

This commit is contained in:
laurenspriem 2024-05-06 16:38:19 +05:30
parent ea8846ee0c
commit 3c24345b68

View file

@ -1,9 +1,9 @@
import 'dart:math' show sqrt;
import "package:ml_linalg/vector.dart";
import "package:ml_linalg/linalg.dart";
/// Calculates the cosine distance between two embeddings/vectors using SIMD from ml_linalg
///
///
/// WARNING: This assumes both vectors are already normalized!
double cosineDistanceSIMD(Vector vector1, Vector vector2) {
if (vector1.length != vector2.length) {
@ -13,6 +13,17 @@ double cosineDistanceSIMD(Vector vector1, Vector vector2) {
return 1 - vector1.dot(vector2);
}
/// Calculates the cosine distance between two embeddings/vectors using SIMD from ml_linalg
///
/// WARNING: Only use when you're not sure if vectors are normalized. If you're sure they are, use [cosineDistanceSIMD] instead for better performance.
double cosineDistanceSIMDSafe(Vector vector1, Vector vector2) {
if (vector1.length != vector2.length) {
throw ArgumentError('Vectors must be the same length');
}
return vector1.distanceTo(vector2, distance: Distance.cosine);
}
/// Calculates the cosine distance between two embeddings/vectors.
///
/// Throws an ArgumentError if the vectors are of different lengths or