From 8b65d87640e7367cd88e72c320e4370f4ba471a6 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Wed, 20 Sep 2023 21:25:54 +0200 Subject: cosine similarity (works poorly) --- src/embedders/vecmetric.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'src/embedders') diff --git a/src/embedders/vecmetric.rs b/src/embedders/vecmetric.rs index 474a6d0..0c63911 100644 --- a/src/embedders/vecmetric.rs +++ b/src/embedders/vecmetric.rs @@ -18,8 +18,16 @@ impl VecMetric for ManhattenDistance {} #[rustfmt::skip] impl From> for ManhattenDistance { fn from(value: Vec) -> Self { Self(value) } } impl MetricElem for CosineSimilarity { - fn dist(&self, _other: &Self) -> f64 { - todo!() + fn dist(&self, other: &Self) -> f64 { + let x = self + .0 + .iter() + .zip(other.0.iter()) + .map(|(a, b)| *a * *b) + .sum::(); + let mag_a = self.0.iter().map(|x| x.powi(2)).sum::(); + let mag_b = other.0.iter().map(|x| x.powi(2)).sum::(); + (x / (mag_a * mag_b).sqrt()) as f64 } } impl MetricElem for EuclidianDistance { -- cgit v1.2.3-70-g09d2