View Source Vettore.Distance (Vettore v0.3.1)
Independent distance, similarity, normalization, and reranking helpers.
Named distance functions return raw metric values:
- distance metrics return a distance where lower is better
- similarity metrics return a similarity where higher is better
Link to this section Summary
Functions
Chebyshev/L-infinity distance.
Compress a float vector into packed sign bits.
Cosine similarity. Defaults to L2-normalizing inputs and returns [-1.0, 1.0].
Compatibility alias for inner product.
Compatibility alias for L2 distance.
Hamming distance for equal-length bit/integer vectors.
Inner product.
Jaccard distance for truthy/non-truthy coordinates.
L2 distance.
Squared L2 distance.
Manhattan/L1 distance.
Collection-agnostic MMR reranker.
Negative inner product.
Normalizes a vector.
Hamming distance over packed bit vectors.
Jaccard distance over packed bit vectors.
Converts a raw metric value into the explicit result score and distance fields.
Link to this section Types
Link to this section Functions
Chebyshev/L-infinity distance.
examples
Examples
iex> Vettore.Distance.chebyshev([1.0, 2.0], [4.0, 6.0])
{:ok, 4.0}
@spec compress_f32_vector(vector()) :: [non_neg_integer()]
Compress a float vector into packed sign bits.
examples
Examples
iex> Vettore.Distance.compress_f32_vector([1.0, -2.0, 0.0])
[5]
Cosine similarity. Defaults to L2-normalizing inputs and returns [-1.0, 1.0].
examples
Examples
iex> Vettore.Distance.cosine([2.0, 0.0], [4.0, 0.0])
{:ok, 1.0}
iex> Vettore.Distance.cosine([2.0, 0.0], [4.0, 0.0], normalize: :none)
{:ok, 8.0}
Compatibility alias for inner product.
examples
Examples
iex> Vettore.Distance.dot_product([1.0, 2.0], [3.0, 4.0])
{:ok, 11.0}
Compatibility alias for L2 distance.
examples
Examples
iex> Vettore.Distance.euclidean([0.0, 0.0], [3.0, 4.0])
{:ok, 5.0}
Hamming distance for equal-length bit/integer vectors.
examples
Examples
iex> Vettore.Distance.hamming([1, 0, 1], [0, 0, 0])
{:ok, 2.0}
Inner product.
examples
Examples
iex> Vettore.Distance.inner_product([1.0, 2.0, 3.0], [4.0, 5.0, 6.0])
{:ok, 32.0}
iex> Vettore.Distance.inner_product([1.0], [1.0, 2.0])
{:error, :dimension_mismatch}
Jaccard distance for truthy/non-truthy coordinates.
examples
Examples
iex> {:ok, distance} = Vettore.Distance.jaccard([1, 0, 1], [0, 1, 1])
iex> Float.round(distance, 6)
0.666667
L2 distance.
examples
Examples
iex> Vettore.Distance.l2([0.0, 0.0], [3.0, 4.0])
{:ok, 5.0}
iex> Vettore.Distance.l2([1.0], [1.0, 2.0])
{:error, :dimension_mismatch}
Squared L2 distance.
examples
Examples
iex> Vettore.Distance.l2_squared([0.0, 0.0], [3.0, 4.0])
{:ok, 25.0}
iex> Vettore.Distance.l2_squared([1.0, :bad], [1.0, 2.0])
{:error, :invalid_vector}
Manhattan/L1 distance.
examples
Examples
iex> Vettore.Distance.manhattan([1.0, 2.0], [4.0, 6.0])
{:ok, 7.0}
@spec mmr_rerank( [{String.t(), number()}], [{String.t(), vector()}], metric() | atom() | String.t(), number(), pos_integer() ) :: {:ok, [{String.t(), number()}]} | {:error, :invalid_mmr_args | {:unknown_metric, term()}}
Collection-agnostic MMR reranker.
examples
Examples
iex> initial = [{"a", 0.9}, {"b", 0.8}, {"c", 0.1}]
iex> embeddings = [{"a", [1.0, 0.0]}, {"b", [1.0, 0.0]}, {"c", [0.0, 1.0]}]
iex> Vettore.Distance.mmr_rerank(initial, embeddings, :cosine, 0.5, 2)
{:ok, [{"a", 0.9}, {"c", 0.1}]}
iex> Vettore.Distance.mmr_rerank(initial, embeddings, :unknown, 0.5, 2)
{:error, {:unknown_metric, :unknown}}
Negative inner product.
examples
Examples
iex> Vettore.Distance.negative_inner_product([1.0, 2.0, 3.0], [4.0, 5.0, 6.0])
{:ok, -32.0}
Normalizes a vector.
examples
Examples
iex> Vettore.Distance.normalize([3.0, 4.0], :l2)
{:ok, [0.6, 0.8]}
iex> Vettore.Distance.normalize([2.0, 4.0, 6.0], :minmax)
{:ok, [0.0, 0.5, 1.0]}
iex> Vettore.Distance.normalize([1.0], :unknown)
{:error, {:unknown_normalization, :unknown}}
@spec packed_hamming([non_neg_integer()], [non_neg_integer()], pos_integer()) :: {:ok, float()} | {:error, term()}
Hamming distance over packed bit vectors.
examples
Examples
iex> left = Vettore.Distance.compress_f32_vector([1.0, -2.0, 0.0])
iex> right = Vettore.Distance.compress_f32_vector([-1.0, -2.0, 0.0])
iex> Vettore.Distance.packed_hamming(left, right, 3)
{:ok, 1.0}
@spec packed_jaccard([non_neg_integer()], [non_neg_integer()], pos_integer()) :: {:ok, float()} | {:error, term()}
Jaccard distance over packed bit vectors.
examples
Examples
iex> left = Vettore.Distance.compress_f32_vector([1.0, -2.0, 0.0])
iex> right = Vettore.Distance.compress_f32_vector([1.0, 2.0, -1.0])
iex> {:ok, distance} = Vettore.Distance.packed_jaccard(left, right, 3)
iex> Float.round(distance, 6)
0.666667
Converts a raw metric value into the explicit result score and distance fields.
examples
Examples
iex> Vettore.Distance.result_values(:l2, 5.0, :raw)
{-5.0, 5.0}
iex> Vettore.Distance.result_values(:cosine, 0.25, :raw)
{0.25, 0.75}
iex> Vettore.Distance.result_values(:l2, 5.0, :similarity)
{0.16666666666666666, 5.0}