Module recall_eval

Module recall_eval 

Source
Expand description

Recall Evaluation for ANN Indexes

Tools for evaluating the quality of Approximate Nearest Neighbor (ANN) indexes by comparing their results against ground truth exact search.

§Features

  • Ground Truth Generation: Generate exact search results for comparison
  • Recall@k Calculation: Measure how many true nearest neighbors are found
  • Precision@k: Measure accuracy of retrieved results
  • nDCG@k: Normalized Discounted Cumulative Gain for ranking quality
  • Configuration Comparison: Compare different index configurations

§Example

use oxify_vector::recall_eval::{RecallEvaluator, EvaluationConfig};
use oxify_vector::{HnswIndex, HnswConfig, SearchConfig, VectorSearchIndex};
use std::collections::HashMap;

// Create test dataset
let mut embeddings = HashMap::new();
for i in 0..1000 {
    let vec = vec![i as f32 * 0.01, (i * 2) as f32 * 0.01, (i * 3) as f32 * 0.01];
    embeddings.insert(format!("doc{}", i), vec);
}

// Build exact and approximate indexes
let mut exact_index = VectorSearchIndex::new(SearchConfig::default());
exact_index.build(&embeddings)?;

let mut hnsw_index = HnswIndex::new(HnswConfig::default());
hnsw_index.build(&embeddings)?;

// Evaluate recall
let config = EvaluationConfig::default();
let evaluator = RecallEvaluator::new(config);

let query = vec![0.5, 1.0, 1.5];
let metrics = evaluator.evaluate_single_query(
    &query,
    |q, k| exact_index.search(q, k),
    |q, k| hnsw_index.search(q, k),
)?;

// metrics is a Vec<QueryMetrics>, one for each k value
for m in &metrics {
    println!("Recall@{}: {:.2}%", m.k, m.recall_at_k * 100.0);
    println!("Precision@{}: {:.2}%", m.k, m.precision_at_k * 100.0);
}

Structs§

AggregatedMetrics
Aggregated evaluation metrics across multiple queries
EvaluationConfig
Evaluation configuration
QueryMetrics
Evaluation metrics for a single query
RecallEvaluator
Recall evaluator for comparing ANN and exact search