From 04443be92cd685ed7272477867ac7a95cf4f1510 Mon Sep 17 00:00:00 2001 From: Naren Datha Date: Tue, 7 Jul 2026 15:28:10 +0530 Subject: [PATCH 01/11] disk: attribute-bucket diversity via post-processing (Design A) Remove the experimental_diversity_search feature gate (graduate the diverse-search primitives to always-on) and add a post-processing-only attribute-bucket diversity path: a plain greedy search over the top-L pool followed by AttributeBucketDiversity, which keeps at most diverse_results_k results per distinct attribute value. Exposed as SearchMode::DiverseAttribute and wired into the disk benchmark via new attributes/diverse_attribute_id/diverse_results_k inputs. --- diskann-benchmark/src/disk_index/search.rs | 34 ++++- diskann-benchmark/src/inputs/disk.rs | 29 ++++ diskann-benchmark/src/utils/attributes.rs | 77 ++++++++++ diskann-benchmark/src/utils/mod.rs | 2 + diskann-bftree/Cargo.toml | 1 - diskann-disk/Cargo.toml | 4 - .../src/search/provider/disk_provider.rs | 133 +++++++++++++++++- diskann-disk/src/search/search_mode.rs | 34 +++++ diskann-providers/Cargo.toml | 1 - diskann-providers/src/index/diskann_async.rs | 1 - diskann/Cargo.toml | 3 - diskann/src/graph/misc.rs | 2 - diskann/src/graph/mod.rs | 1 - diskann/src/graph/search/mod.rs | 4 - diskann/src/neighbor/mod.rs | 2 - diskann/src/neighbor/queue.rs | 10 -- 16 files changed, 298 insertions(+), 40 deletions(-) create mode 100644 diskann-benchmark/src/utils/attributes.rs diff --git a/diskann-benchmark/src/disk_index/search.rs b/diskann-benchmark/src/disk_index/search.rs index a1e84e79b..2a790a020 100644 --- a/diskann-benchmark/src/disk_index/search.rs +++ b/diskann-benchmark/src/disk_index/search.rs @@ -37,7 +37,7 @@ use serde::{Deserialize, Serialize}; use crate::{ disk_index::json_spancollector::JsonSpanCollector, inputs::disk::{DiskIndexLoad, DiskSearchPhase}, - utils::{datafiles, SimilarityMeasure}, + utils::{attributes::FileAttributeProvider, datafiles, SimilarityMeasure}, }; #[derive(Serialize, Deserialize, Debug)] @@ -236,6 +236,17 @@ where logger.log_checkpoint("index_loaded"); + // Optional attribute-bucket diversity (Design A): loaded once and shared + // across all queries and search-list values. + let diverse_attribute_provider = match &search_params.attributes { + Some(attributes_file) => Some(std::sync::Arc::new(FileAttributeProvider::load( + attributes_file, + )?)), + None => None, + }; + let diverse_results_k = search_params.diverse_results_k; + let diverse_attribute_id = search_params.diverse_attribute_id; + let pool = create_thread_pool(search_params.num_threads)?; let mut search_results_per_l = Vec::with_capacity(search_params.search_list.len()); let has_any_search_failed = AtomicBool::new(false); @@ -271,12 +282,21 @@ where // Construct the SearchMode from the JSON-driven // `adaptive_l` is now encapsulated in `DiskSearchMode`, so the // benchmark only supplies the per-query filter and post-processor. - let has_filter = search_params.vector_filters_file.is_some(); - let mode: SearchMode<'_> = search_params.search_mode.search_mode( - has_filter, - vf, - search_params.post_processor.as_ref(), - ); + let mode: SearchMode<'_> = match diverse_attribute_provider.as_ref() { + Some(provider) => SearchMode::diverse_attribute( + provider.clone(), + diverse_attribute_id, + diverse_results_k.unwrap_or(search_params.recall_at as usize), + ), + None => { + let has_filter = search_params.vector_filters_file.is_some(); + search_params.search_mode.search_mode( + has_filter, + vf, + search_params.post_processor.as_ref(), + ) + } + }; match searcher.search( q, diff --git a/diskann-benchmark/src/inputs/disk.rs b/diskann-benchmark/src/inputs/disk.rs index 7ed521a87..c09fc45aa 100644 --- a/diskann-benchmark/src/inputs/disk.rs +++ b/diskann-benchmark/src/inputs/disk.rs @@ -170,6 +170,20 @@ pub(crate) struct DiskSearchPhase { pub(crate) num_nodes_to_cache: Option, pub(crate) search_io_limit: Option, pub(crate) post_processor: Option, + /// Plaintext file with one integer attribute per line; line `N` is vector `N`'s attribute. + /// + /// When present, the search phase runs attribute-bucket diversity via + /// post-processing (Design A): a plain greedy search over the top-`L` pool + /// followed by bucket selection keeping at most `diverse_results_k` results + /// per distinct attribute value, instead of the mode selected by + /// `search_mode`/`post_processor`. + pub(crate) attributes: Option, + /// The attribute dimension used for diversity (currently only a single attribute is used). + #[serde(default)] + pub(crate) diverse_attribute_id: usize, + /// The maximum number of results to keep per distinct attribute value. + #[serde(default)] + pub(crate) diverse_results_k: Option, } ///////// @@ -320,6 +334,18 @@ impl DiskSearchPhase { .context("invalid disk search post processor")?; } + if let Some(attributes) = self.attributes.as_mut() { + attributes + .resolve(checker) + .context("invalid attributes file")?; + match self.diverse_results_k { + Some(k) if k > 0 => {} + _ => anyhow::bail!( + "diverse_results_k must be a positive integer when attributes is set" + ), + } + } + Ok(()) } } @@ -367,6 +393,9 @@ impl Example for DiskIndexOperation { num_nodes_to_cache: None, search_io_limit: None, post_processor: None, + attributes: None, + diverse_attribute_id: 0, + diverse_results_k: None, }; Self { diff --git a/diskann-benchmark/src/utils/attributes.rs b/diskann-benchmark/src/utils/attributes.rs new file mode 100644 index 000000000..513515455 --- /dev/null +++ b/diskann-benchmark/src/utils/attributes.rs @@ -0,0 +1,77 @@ +/* + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT license. + */ + +//! A file-backed [`AttributeValueProvider`] for diversity-aware benchmarks. + +use std::path::Path; + +use anyhow::Context; +use diskann::{neighbor::AttributeValueProvider, provider::HasId}; + +/// The reserved attribute bucket assigned to graph navigation nodes (frozen start points) +/// that fall outside the range of loaded per-vector attributes. +/// +/// Greedy graph search seeds traversal from the index's start points. Those points must +/// therefore carry an attribute, otherwise the diverse queue would drop them and search +/// would never expand beyond the entry node. Assigning them a dedicated bucket keeps them +/// traversable without merging them into any real attribute group. +const NAVIGATION_BUCKET: u32 = u32::MAX; + +/// An attribute value provider backed by a plaintext attribute file. +/// +/// The file is expected to contain one unsigned integer per line, where the value on the +/// `N`-th line (0-indexed) is the diversity attribute of the `N`-th vector. This matches the +/// on-disk layout produced by the labelling tools used elsewhere in the pipeline. +/// +/// Ids outside the range of loaded attributes (for example the graph's frozen start points) +/// are mapped to a reserved [`NAVIGATION_BUCKET`] so that greedy search can still traverse +/// the graph through them. +#[derive(Debug, Clone)] +pub(crate) struct FileAttributeProvider { + attributes: Vec, +} + +impl FileAttributeProvider { + /// Load attributes from the plaintext file at `path`. + /// + /// # Errors + /// + /// Returns an error if the file cannot be read or if any line fails to parse as a `u32`. + pub(crate) fn load(path: &Path) -> anyhow::Result { + let contents = std::fs::read_to_string(path) + .with_context(|| format!("while reading attribute file {}", path.display()))?; + + let attributes = contents + .lines() + .map(str::trim) + .filter(|line| !line.is_empty()) + .enumerate() + .map(|(line, value)| { + value.parse::().with_context(|| { + format!("invalid attribute value {value:?} on line {}", line + 1) + }) + }) + .collect::>>()?; + + Ok(Self { attributes }) + } +} + +impl HasId for FileAttributeProvider { + type Id = u32; +} + +impl AttributeValueProvider for FileAttributeProvider { + type Value = u32; + + fn get(&self, id: Self::Id) -> Option { + Some( + self.attributes + .get(id as usize) + .copied() + .unwrap_or(NAVIGATION_BUCKET), + ) + } +} diff --git a/diskann-benchmark/src/utils/mod.rs b/diskann-benchmark/src/utils/mod.rs index 9a25d2cc0..1a3be09cc 100644 --- a/diskann-benchmark/src/utils/mod.rs +++ b/diskann-benchmark/src/utils/mod.rs @@ -9,6 +9,8 @@ use diskann_benchmark_runner::{ }; use serde::{Deserialize, Serialize}; +#[cfg(feature = "disk-index")] +pub(crate) mod attributes; pub(crate) mod datafiles; pub(crate) mod filters; pub(crate) mod recall; diff --git a/diskann-bftree/Cargo.toml b/diskann-bftree/Cargo.toml index 79c8bb7ed..1dcaeb0b6 100644 --- a/diskann-bftree/Cargo.toml +++ b/diskann-bftree/Cargo.toml @@ -35,7 +35,6 @@ tokio = { workspace = true, features = ["full"] } [features] default = [] -experimental_diversity_search = ["diskann/experimental_diversity_search"] [lints.clippy] undocumented_unsafe_blocks = "warn" diff --git a/diskann-disk/Cargo.toml b/diskann-disk/Cargo.toml index d49fafa17..0782d5935 100644 --- a/diskann-disk/Cargo.toml +++ b/diskann-disk/Cargo.toml @@ -68,10 +68,6 @@ proptest.workspace = true default = [] perf_test = ["dep:opentelemetry"] virtual_storage = ["diskann-providers/virtual_storage"] -experimental_diversity_search = [ - "diskann/experimental_diversity_search", - "diskann-providers/experimental_diversity_search", -] [[bench]] name = "bench_main" diff --git a/diskann-disk/src/search/provider/disk_provider.rs b/diskann-disk/src/search/provider/disk_provider.rs index 7b6cb6ab3..ad77a9242 100644 --- a/diskann-disk/src/search/provider/disk_provider.rs +++ b/diskann-disk/src/search/provider/disk_provider.rs @@ -24,8 +24,7 @@ use diskann::{ search_output_buffer, DiskANNIndex, }, neighbor::{Neighbor, NeighborPriorityQueue}, - provider::{DataProvider, DefaultContext, HasId, NoopGuard}, - utils::{IntoUsize, VectorRepr}, + provider::{DataProvider, DefaultContext, HasId, NoopGuard}, utils::{IntoUsize, VectorRepr}, ANNError, ANNResult, }; use diskann_providers::storage::StorageReadProvider; @@ -50,7 +49,7 @@ use crate::{ data_model::{CachingStrategy, GraphHeader}, search::{ provider::disk_vertex_provider_factory::DiskVertexProviderFactory, - search_mode::SearchMode, + search_mode::{DynAttributeProvider, SearchMode}, traits::{VertexProvider, VertexProviderFactory}, }, storage::{api::AsyncDiskLoadContext, disk_index_reader::DiskIndexReader}, @@ -468,6 +467,108 @@ where } } +/// Post-processor implementing attribute-bucket diversity purely over the +/// candidate pool returned by a plain greedy search (Design A). +/// +/// Candidates are reranked with exact distances, sorted ascending, and then +/// greedily emitted while keeping at most `diverse_results_k` results per +/// distinct attribute value. The output buffer bounds the final count to `k`. +pub struct AttributeBucketDiversity<'a> { + filter: PostprocessStrategy<'a>, + provider: Arc, + diverse_results_k: usize, +} + +impl<'a> AttributeBucketDiversity<'a> { + pub fn new( + filter: PostprocessStrategy<'a>, + provider: Arc, + diverse_results_k: usize, + ) -> Self { + Self { + filter, + provider, + diverse_results_k, + } + } +} + +impl + SearchPostProcess< + DiskAccessor<'_, Data, VP>, + &[Data::VectorDataType], + ( + as DataProvider>::InternalId, + Data::AssociatedDataType, + ), + > for AttributeBucketDiversity<'_> +where + Data: GraphDataType, + VP: VertexProvider, +{ + type Error = ANNError; + async fn post_process( + &self, + accessor: &mut DiskAccessor<'_, Data, VP>, + query: &[Data::VectorDataType], + candidates: I, + output: &mut B, + ) -> Result + where + I: Iterator> + Send, + B: search_output_buffer::SearchOutputBuffer<(u32, Data::AssociatedDataType)> + + Send + + ?Sized, + { + let provider = accessor.provider; + + let candidate_ids: Vec = match self.filter { + PostprocessStrategy::AcceptAll => candidates.map(|candidate| candidate.id).collect(), + PostprocessStrategy::Apply(f) => candidates + .map(|candidate| candidate.id) + .filter(|id| f(id)) + .collect(), + }; + + if candidate_ids.is_empty() { + return Ok(0); + } + + ensure_vertex_loaded(&mut accessor.scratch.vertex_provider, &candidate_ids)?; + + // Rerank the candidate pool with exact distances so the bucket + // selection walks candidates in true nearest-first order. + let mut reranked: Vec<((u32, Data::AssociatedDataType), f32)> = + Vec::with_capacity(candidate_ids.len()); + for id in &candidate_ids { + let vector = accessor.scratch.vertex_provider.get_vector(id)?; + let distance = provider + .distance_comparer + .evaluate_similarity(query, vector); + let data = accessor.scratch.vertex_provider.get_associated_data(id)?; + reranked.push(((*id, *data), distance)); + } + reranked + .sort_unstable_by(|a, b| a.1.partial_cmp(&b.1).unwrap_or(std::cmp::Ordering::Equal)); + + // Greedy bucket selection: keep at most `diverse_results_k` per bucket. + // `output.extend` truncates the stream to the buffer capacity (`k`). + let mut bucket_counts: HashMap = HashMap::new(); + let selected = reranked.into_iter().filter(|((id, _), _)| { + let bucket = self.provider.get(*id).unwrap_or(u32::MAX); + let count = bucket_counts.entry(bucket).or_insert(0); + if *count < self.diverse_results_k { + *count += 1; + true + } else { + false + } + }); + + Ok(output.extend(selected)) + } +} + impl SearchPostProcess< DiskAccessor<'_, Data, VP>, @@ -1190,6 +1291,31 @@ where &mut result_output_buffer, ))? } + SearchMode::DiverseAttribute { + provider, + diverse_attribute_id: _, + diverse_results_k, + } => { + // Design A: plain greedy search collects the top-`L` pool, then + // `AttributeBucketDiversity` selects a bucket-diverse top-`k` + // from it in post-processing. The over-fetch is inherent in + // `L > k` and is controlled by the caller's search list size. + let strategy = self.search_strategy(&io_tracker, PostprocessStrategy::AcceptAll); + let knn_search = Knn::new(k, l, beam_width)?; + let processor = AttributeBucketDiversity::new( + PostprocessStrategy::AcceptAll, + provider.clone(), + *diverse_results_k, + ); + self.runtime.block_on(self.index.search_with( + knn_search, + &strategy, + processor, + &DefaultContext, + query, + &mut result_output_buffer, + ))? + } }; query_stats.total_comparisons = stats.cmps; query_stats.search_hops = stats.hops; @@ -1951,7 +2077,6 @@ mod disk_provider_tests { ); } - #[cfg(feature = "experimental_diversity_search")] #[test] fn test_disk_search_diversity_search() { use diskann::graph::DiverseSearchParams; diff --git a/diskann-disk/src/search/search_mode.rs b/diskann-disk/src/search/search_mode.rs index 49f7462f9..5d32755ca 100644 --- a/diskann-disk/src/search/search_mode.rs +++ b/diskann-disk/src/search/search_mode.rs @@ -11,7 +11,9 @@ use diskann::graph::ext::labeled::QueryLabelProvider; use diskann::graph::search::AdaptiveL; +use diskann::neighbor::AttributeValueProvider; use diskann_providers::model::graph::provider::DeterminantDiversityParams; +use std::sync::Arc; /// Owned closure used to filter vector IDs during disk search. /// @@ -19,6 +21,13 @@ use diskann_providers::model::graph::provider::DeterminantDiversityParams; /// on the disk path by construction). pub type SearchPredicate<'a> = Box bool + Send + Sync + 'a>; +/// Type-erased attribute provider used by [`SearchMode::DiverseAttribute`]. +/// +/// `SearchMode` is a non-generic enum, so the concrete provider is erased +/// behind this trait object. `Value` is pinned to `u32`, matching every +/// attribute-bucket provider in use. +pub type DynAttributeProvider = dyn AttributeValueProvider; + /// Top-level disk search mode. /// /// Three variants encode the algorithm + filter combination: @@ -51,6 +60,16 @@ pub enum SearchMode<'a> { filter: Option>, params: DeterminantDiversityParams, }, + + /// Attribute-bucket diversity done purely in post-processing: run a plain + /// greedy graph search over an enlarged candidate pool (`L`) and then + /// greedily select, in ascending distance order, at most + /// `diverse_results_k` results per distinct attribute value. + DiverseAttribute { + provider: Arc, + diverse_attribute_id: usize, + diverse_results_k: usize, + }, } impl<'a> SearchMode<'a> { @@ -139,6 +158,21 @@ impl<'a> SearchMode<'a> { params, } } + + /// Attribute-bucket diversity via post-processing only. The plain greedy + /// search collects the top-`L` pool, then a bucket-selection step keeps at + /// most `diverse_results_k` results per distinct attribute value. + pub fn diverse_attribute( + provider: Arc, + diverse_attribute_id: usize, + diverse_results_k: usize, + ) -> Self { + Self::DiverseAttribute { + provider, + diverse_attribute_id, + diverse_results_k, + } + } } #[cfg(test)] diff --git a/diskann-providers/Cargo.toml b/diskann-providers/Cargo.toml index 942c3919e..fc48e34aa 100644 --- a/diskann-providers/Cargo.toml +++ b/diskann-providers/Cargo.toml @@ -61,7 +61,6 @@ targets = [ default = [] perf_test = ["dep:opentelemetry"] testing = ["dep:tempfile"] -experimental_diversity_search = ["diskann/experimental_diversity_search"] virtual_storage = ["dep:vfs"] # Some 'cfg's in the source tree will be flagged by `cargo clippy -j 2 --workspace --no-deps --all-targets -- -D warnings` diff --git a/diskann-providers/src/index/diskann_async.rs b/diskann-providers/src/index/diskann_async.rs index 41389910e..a3526963c 100644 --- a/diskann-providers/src/index/diskann_async.rs +++ b/diskann-providers/src/index/diskann_async.rs @@ -2869,7 +2869,6 @@ pub(crate) mod tests { ); } - #[cfg(feature = "experimental_diversity_search")] #[tokio::test] async fn test_inmemory_search_diversity_search() { use diskann::neighbor::AttributeValueProvider; diff --git a/diskann/Cargo.toml b/diskann/Cargo.toml index 14f6ba074..d5abf33fc 100644 --- a/diskann/Cargo.toml +++ b/diskann/Cargo.toml @@ -61,6 +61,3 @@ tracing = ["dep:tracing"] # Enable testing providers. testing = ["dep:dashmap"] - -# Enable experimental diversity search -experimental_diversity_search = [] diff --git a/diskann/src/graph/misc.rs b/diskann/src/graph/misc.rs index 067bd2d21..186f55406 100644 --- a/diskann/src/graph/misc.rs +++ b/diskann/src/graph/misc.rs @@ -32,7 +32,6 @@ pub enum InplaceDeleteMethod { } // Parameters for diverse search -#[cfg(feature = "experimental_diversity_search")] #[derive(Clone, Debug)] pub struct DiverseSearchParams

where @@ -43,7 +42,6 @@ where pub attribute_provider: std::sync::Arc

, } -#[cfg(feature = "experimental_diversity_search")] impl

DiverseSearchParams

where P: crate::neighbor::AttributeValueProvider, diff --git a/diskann/src/graph/mod.rs b/diskann/src/graph/mod.rs index 6bf4be7dd..e993b5258 100644 --- a/diskann/src/graph/mod.rs +++ b/diskann/src/graph/mod.rs @@ -23,7 +23,6 @@ pub use start_point::{SampleableForStart, StartPointStrategy}; mod misc; pub use misc::{ConsolidateKind, InplaceDeleteMethod}; -#[cfg(feature = "experimental_diversity_search")] pub use misc::DiverseSearchParams; pub mod glue; diff --git a/diskann/src/graph/search/mod.rs b/diskann/src/graph/search/mod.rs index 4e2aedc61..b99daae48 100644 --- a/diskann/src/graph/search/mod.rs +++ b/diskann/src/graph/search/mod.rs @@ -117,9 +117,5 @@ pub use knn_search::{Knn, KnnSearchError, RecordedKnn}; pub use multihop_filter_search::MultihopFilterSearch; pub use range_search::{Range, RangeSearchError}; -// Feature-gated diverse search. -#[cfg(feature = "experimental_diversity_search")] mod diverse_search; - -#[cfg(feature = "experimental_diversity_search")] pub use diverse_search::Diverse; diff --git a/diskann/src/neighbor/mod.rs b/diskann/src/neighbor/mod.rs index 391a5435e..139559d6f 100644 --- a/diskann/src/neighbor/mod.rs +++ b/diskann/src/neighbor/mod.rs @@ -12,9 +12,7 @@ use crate::graph::{SearchOutputBuffer, search_output_buffer}; mod queue; pub use queue::{NeighborPriorityQueue, NeighborPriorityQueueIdType, NeighborQueue}; -#[cfg(feature = "experimental_diversity_search")] mod diverse_priority_queue; -#[cfg(feature = "experimental_diversity_search")] pub use diverse_priority_queue::{ Attribute, AttributeValueProvider, DiverseNeighborQueue, VectorIdWithAttribute, }; diff --git a/diskann/src/neighbor/queue.rs b/diskann/src/neighbor/queue.rs index 7c1047f4a..008cbdedf 100644 --- a/diskann/src/neighbor/queue.rs +++ b/diskann/src/neighbor/queue.rs @@ -421,7 +421,6 @@ impl NeighborPriorityQueue { /// /// # Arguments /// * `f` - A predicate that returns `true` for items to keep - #[cfg(feature = "experimental_diversity_search")] pub fn retain(&mut self, mut f: F) where F: FnMut(&Neighbor) -> bool, @@ -460,7 +459,6 @@ impl NeighborPriorityQueue { /// /// # Arguments /// * `len` - The new length of the queue - #[cfg(feature = "experimental_diversity_search")] pub fn truncate(&mut self, len: usize) { let new_size = len; if new_size < self.size { @@ -1291,7 +1289,6 @@ mod neighbor_priority_queue_test { } #[test] - #[cfg(feature = "experimental_diversity_search")] fn test_retain() { let mut queue = NeighborPriorityQueue::::new(10); @@ -1327,7 +1324,6 @@ mod neighbor_priority_queue_test { } #[test] - #[cfg(feature = "experimental_diversity_search")] fn test_retain_empty() { let mut queue = NeighborPriorityQueue::::new(10); @@ -1337,7 +1333,6 @@ mod neighbor_priority_queue_test { } #[test] - #[cfg(feature = "experimental_diversity_search")] fn test_retain_remove_all() { let mut queue = NeighborPriorityQueue::::new(10); @@ -1353,7 +1348,6 @@ mod neighbor_priority_queue_test { } #[test] - #[cfg(feature = "experimental_diversity_search")] fn test_retain_remove_none() { let mut queue = NeighborPriorityQueue::::new(10); @@ -1371,7 +1365,6 @@ mod neighbor_priority_queue_test { } #[test] - #[cfg(feature = "experimental_diversity_search")] fn test_retain_resets_visited_state() { let mut queue = NeighborPriorityQueue::::new(10); @@ -1411,7 +1404,6 @@ mod neighbor_priority_queue_test { } #[test] - #[cfg(feature = "experimental_diversity_search")] fn test_truncate() { let mut queue = NeighborPriorityQueue::::new(10); @@ -1433,7 +1425,6 @@ mod neighbor_priority_queue_test { } #[test] - #[cfg(feature = "experimental_diversity_search")] fn test_truncate_larger_size() { let mut queue = NeighborPriorityQueue::::new(10); @@ -1447,7 +1438,6 @@ mod neighbor_priority_queue_test { } #[test] - #[cfg(feature = "experimental_diversity_search")] fn test_truncate_with_cursor() { let mut queue = NeighborPriorityQueue::::new(10); From 52323d1c6e840512ca126faa2c5a9a52540c37b1 Mon Sep 17 00:00:00 2001 From: Naren Datha Date: Fri, 10 Jul 2026 10:13:20 +0530 Subject: [PATCH 02/11] disk: adaptive-L over-fetch for attribute diversity (Design B) Add DiverseAdaptiveSearch, a greedy graph search that samples attribute-bucket concentration during traversal and grows the search list L when few distinct buckets are seen (yield = sum min(count_b,k)/visited). The enlarged pool feeds the existing AttributeBucketDiversity post-processor. Wired through SearchMode::DiverseAttribute's optional adaptive_l and the disk benchmark. Reuses inline-filter compute_adaptive_l. Includes unit tests for the bucket-yield sizing. --- diskann-benchmark/src/disk_index/search.rs | 11 + .../src/search/provider/disk_provider.rs | 51 ++- diskann-disk/src/search/search_mode.rs | 24 +- .../graph/search/diverse_adaptive_search.rs | 322 ++++++++++++++++++ .../src/graph/search/inline_filter_search.rs | 19 +- diskann/src/graph/search/mod.rs | 3 + 6 files changed, 409 insertions(+), 21 deletions(-) create mode 100644 diskann/src/graph/search/diverse_adaptive_search.rs diff --git a/diskann-benchmark/src/disk_index/search.rs b/diskann-benchmark/src/disk_index/search.rs index 2a790a020..e57141223 100644 --- a/diskann-benchmark/src/disk_index/search.rs +++ b/diskann-benchmark/src/disk_index/search.rs @@ -246,6 +246,16 @@ where }; let diverse_results_k = search_params.diverse_results_k; let diverse_attribute_id = search_params.diverse_attribute_id; + // Design B: when the diverse path is active and `adaptive_l` is configured, + // grow `L` per query from the observed bucket concentration. + let diverse_adaptive_l = search_params + .search_mode + .adaptive_l + .as_ref() + .map(|a| { + diskann::graph::search::AdaptiveL::new(a.sample_count.into(), a.scale_factor) + .expect("validated adaptive L must construct") + }); let pool = create_thread_pool(search_params.num_threads)?; let mut search_results_per_l = Vec::with_capacity(search_params.search_list.len()); @@ -287,6 +297,7 @@ where provider.clone(), diverse_attribute_id, diverse_results_k.unwrap_or(search_params.recall_at as usize), + diverse_adaptive_l.clone(), ), None => { let has_filter = search_params.vector_filters_file.is_some(); diff --git a/diskann-disk/src/search/provider/disk_provider.rs b/diskann-disk/src/search/provider/disk_provider.rs index ad77a9242..b3c6f281c 100644 --- a/diskann-disk/src/search/provider/disk_provider.rs +++ b/diskann-disk/src/search/provider/disk_provider.rs @@ -20,7 +20,7 @@ use diskann::{ self, ext::labeled::{self, QueryLabelProvider}, glue::{self, DefaultPostProcessor, SearchPostProcess, SearchStrategy}, - search::{AdaptiveL, InlineFilterSearch, Knn}, + search::{AdaptiveL, DiverseAdaptiveSearch, InlineFilterSearch, Knn}, search_output_buffer, DiskANNIndex, }, neighbor::{Neighbor, NeighborPriorityQueue}, @@ -1295,11 +1295,18 @@ where provider, diverse_attribute_id: _, diverse_results_k, + adaptive_l, } => { - // Design A: plain greedy search collects the top-`L` pool, then - // `AttributeBucketDiversity` selects a bucket-diverse top-`k` - // from it in post-processing. The over-fetch is inherent in - // `L > k` and is controlled by the caller's search list size. + // Attribute-bucket diversity: a greedy search collects the + // top-`L` pool, then `AttributeBucketDiversity` selects a + // bucket-diverse top-`k` from it in post-processing. + // + // Design A (`adaptive_l = None`): fixed `L`; the over-fetch is + // inherent in `L > k` and controlled by the search list size. + // + // Design B (`adaptive_l = Some(_)`): the traversal samples + // bucket concentration and grows `L` when few distinct buckets + // are seen, sizing the over-fetch per query. let strategy = self.search_strategy(&io_tracker, PostprocessStrategy::AcceptAll); let knn_search = Knn::new(k, l, beam_width)?; let processor = AttributeBucketDiversity::new( @@ -1307,14 +1314,32 @@ where provider.clone(), *diverse_results_k, ); - self.runtime.block_on(self.index.search_with( - knn_search, - &strategy, - processor, - &DefaultContext, - query, - &mut result_output_buffer, - ))? + match adaptive_l { + Some(adaptive_l) => { + let search = DiverseAdaptiveSearch::new( + knn_search, + provider.clone(), + *diverse_results_k, + adaptive_l.clone(), + ); + self.runtime.block_on(self.index.search_with( + search, + &strategy, + processor, + &DefaultContext, + query, + &mut result_output_buffer, + ))? + } + None => self.runtime.block_on(self.index.search_with( + knn_search, + &strategy, + processor, + &DefaultContext, + query, + &mut result_output_buffer, + ))?, + } } }; query_stats.total_comparisons = stats.cmps; diff --git a/diskann-disk/src/search/search_mode.rs b/diskann-disk/src/search/search_mode.rs index 5d32755ca..68933d472 100644 --- a/diskann-disk/src/search/search_mode.rs +++ b/diskann-disk/src/search/search_mode.rs @@ -61,14 +61,19 @@ pub enum SearchMode<'a> { params: DeterminantDiversityParams, }, - /// Attribute-bucket diversity done purely in post-processing: run a plain - /// greedy graph search over an enlarged candidate pool (`L`) and then - /// greedily select, in ascending distance order, at most - /// `diverse_results_k` results per distinct attribute value. + /// Attribute-bucket diversity done in post-processing: run a greedy graph + /// search over an enlarged candidate pool (`L`) and then greedily select, + /// in ascending distance order, at most `diverse_results_k` results per + /// distinct attribute value. + /// + /// `adaptive_l = Some(_)` enables Design B: the search samples bucket + /// concentration during traversal and grows `L` when few distinct buckets + /// are seen. `None` runs Design A with a fixed `L`. DiverseAttribute { provider: Arc, diverse_attribute_id: usize, diverse_results_k: usize, + adaptive_l: Option, }, } @@ -159,18 +164,23 @@ impl<'a> SearchMode<'a> { } } - /// Attribute-bucket diversity via post-processing only. The plain greedy - /// search collects the top-`L` pool, then a bucket-selection step keeps at - /// most `diverse_results_k` results per distinct attribute value. + /// Attribute-bucket diversity via post-processing. The greedy search + /// collects the top-`L` pool, then a bucket-selection step keeps at most + /// `diverse_results_k` results per distinct attribute value. + /// + /// `adaptive_l = Some(_)` grows `L` mid-search from the observed bucket + /// concentration (Design B); `None` uses a fixed `L` (Design A). pub fn diverse_attribute( provider: Arc, diverse_attribute_id: usize, diverse_results_k: usize, + adaptive_l: Option, ) -> Self { Self::DiverseAttribute { provider, diverse_attribute_id, diverse_results_k, + adaptive_l, } } } diff --git a/diskann/src/graph/search/diverse_adaptive_search.rs b/diskann/src/graph/search/diverse_adaptive_search.rs new file mode 100644 index 000000000..b6b14cb54 --- /dev/null +++ b/diskann/src/graph/search/diverse_adaptive_search.rs @@ -0,0 +1,322 @@ +/* + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT license. + */ + +//! Attribute-diversity search with adaptive-L over-fetch (Design B). +//! +//! This is a plain greedy graph search whose only addition over [`Knn`] is a +//! traversal-time sampler that estimates *bucket concentration* — how many +//! distinct attribute buckets appear among the nodes visited so far — and grows +//! the search list `L` accordingly. The actual bucket-diverse top-`k` selection +//! is still performed by a downstream post-processor over the enlarged pool. +//! +//! # Motivation +//! +//! Post-processing-only diversity (Design A) relies on the caller picking an `L` +//! large enough that the top-`L` pool contains enough distinct buckets to fill a +//! diverse top-`k`. When a query lands in a region dominated by a few buckets, +//! a fixed `L` under-fetches and recall suffers. Design B sizes `L` per query +//! from the observed bucket concentration, reusing the same piecewise scaling as +//! inline-filter [`AdaptiveL`]. +//! +//! # Yield metric +//! +//! Analogous to filter specificity, the diversity *yield* of a sample is +//! +//! ```text +//! yield = (Σ_b min(count_b, k)) / visited +//! ``` +//! +//! where `count_b` is the number of sampled nodes in bucket `b` and `k` is +//! `diverse_results_k`. For `k = 1` this is simply `distinct_buckets / visited`. +//! A low yield (many duplicate buckets) triggers a larger `L`; a high yield +//! (mostly distinct buckets) leaves `L` unchanged. + +use std::sync::Arc; + +use diskann_utils::future::SendFuture; +use hashbrown::HashMap; + +use super::{ + AdaptiveL, Knn, Search, + inline_filter_search::compute_adaptive_l, + scratch::SearchScratch, +}; +use crate::{ + ANNResult, + error::IntoANNResult, + graph::{ + glue::{self, SearchAccessor, SearchPostProcess, SearchStrategy}, + index::{DiskANNIndex, InternalSearchStats, SearchStats}, + search_output_buffer::SearchOutputBuffer, + }, + neighbor::{AttributeValueProvider, Neighbor}, + provider::DataProvider, + utils::VectorId, +}; + +/// Attribute-diversity search with adaptive-L over-fetch. +/// +/// Runs a plain greedy beam search, sampling attribute buckets during traversal +/// to grow `L` when bucket concentration is low. The final bucket-diverse +/// selection is delegated to the post-processor supplied at search time. +pub struct DiverseAdaptiveSearch

+where + P: AttributeValueProvider + ?Sized, +{ + inner: Knn, + provider: Arc

, + diverse_results_k: usize, + adaptive_l: AdaptiveL, +} + +impl

DiverseAdaptiveSearch

+where + P: AttributeValueProvider + ?Sized, +{ + /// Create new adaptive diverse search parameters. + pub fn new( + inner: Knn, + provider: Arc

, + diverse_results_k: usize, + adaptive_l: AdaptiveL, + ) -> Self { + Self { + inner, + provider, + diverse_results_k, + adaptive_l, + } + } +} + +impl<'a, DP, S, T, P> Search<'a, DP, S, T> for DiverseAdaptiveSearch

+where + DP: DataProvider, + S: SearchStrategy<'a, DP, T, SearchAccessor: SearchAccessor>, + T: Copy + Send + Sync, + P: AttributeValueProvider + ?Sized, +{ + type Output = SearchStats; + + fn search( + self, + index: &'a DiskANNIndex, + strategy: &'a S, + processor: PP, + context: &'a DP::Context, + query: T, + output: &mut OB, + ) -> impl SendFuture> + where + O: Send, + PP: SearchPostProcess + Send + Sync, + OB: SearchOutputBuffer + Send + ?Sized, + { + async move { + let mut accessor = strategy + .search_accessor(&index.data_provider, context, query) + .into_ann_result()?; + + let num_starting_points = accessor.num_starting_points().await?; + let mut scratch = + index.search_scratch(self.inner.l_value().get(), num_starting_points); + + let stats = diverse_adaptive_search_internal( + index.max_degree_with_slack(), + &self.inner, + self.provider.as_ref(), + self.diverse_results_k, + &self.adaptive_l, + &mut accessor, + &mut scratch, + ) + .await?; + + let result_count = processor + .post_process(&mut accessor, query, scratch.best.iter(), output) + .await + .into_ann_result()?; + + Ok(stats.finish(result_count as u32)) + } + } +} + +async fn diverse_adaptive_search_internal( + max_degree_with_slack: usize, + search_params: &Knn, + provider: &P, + diverse_results_k: usize, + adaptive_l: &AdaptiveL, + accessor: &mut A, + scratch: &mut SearchScratch, +) -> ANNResult +where + I: VectorId, + A: SearchAccessor, + P: AttributeValueProvider + ?Sized, +{ + let beam_width = search_params.beam_width().get(); + let l_search = search_params.l_value().get(); + + // Bucket-concentration sampling state. Sampling stops once L is (re)sized. + let mut bucket_counts: HashMap = HashMap::new(); + let mut sample_visited: usize = 0; + let mut l_adjusted = false; + + accessor + .start_point_distances(|id, distance| { + scratch.visited.insert(id); + scratch.best.insert(Neighbor::new(id, distance)); + scratch.cmps += 1; + }) + .await?; + + let mut neighbors = Vec::with_capacity(max_degree_with_slack); + + while scratch.best.has_notvisited_node() && !accessor.terminate_early() { + scratch.beam_nodes.clear(); + + while scratch.beam_nodes.len() < beam_width + && let Some(closest_node) = scratch.best.closest_notvisited() + { + scratch.beam_nodes.push(closest_node.id); + } + + if scratch.beam_nodes.is_empty() { + break; + } + + neighbors.clear(); + accessor + .expand_beam( + scratch.beam_nodes.iter().copied(), + glue::NotInMut::new(&mut scratch.visited), + |id, distance| neighbors.push(Neighbor::new(id, distance)), + ) + .await?; + + for neighbor in neighbors.iter() { + scratch.best.insert(*neighbor); + + // Sample the bucket of each newly visited node until L is resized. + if !l_adjusted { + if let Some(bucket) = provider.get(neighbor.id) { + *bucket_counts.entry(bucket).or_insert(0) += 1; + } + sample_visited += 1; + } + } + + scratch.cmps += neighbors.len() as u32; + scratch.hops += scratch.beam_nodes.len() as u32; + + // Once enough nodes are sampled, estimate bucket-concentration yield and + // grow L. `matched` is the number of "useful" diverse slots observed: + // Σ_b min(count_b, k). A low yield => few distinct buckets => larger L. + if !l_adjusted && sample_visited >= adaptive_l.sample_count() { + l_adjusted = true; + let matched = diverse_matched_slots(bucket_counts.values().copied(), diverse_results_k); + let new_l = compute_adaptive_l( + l_search, + sample_visited, + matched, + adaptive_l.scale_factor(), + ); + if new_l > l_search { + scratch.resize(new_l); + } + } + } + + Ok(InternalSearchStats { + cmps: scratch.cmps, + hops: scratch.hops, + range_search_second_round: false, + }) +} + +/// Count the "useful" diverse slots observed in a bucket-count sample. +/// +/// This is `Σ_b min(count_b, k)`: each distinct bucket contributes at most `k` +/// slots, mirroring the per-bucket cap applied by the downstream bucket +/// selector. Feeding this as `matched` into [`compute_adaptive_l`] makes the +/// adaptive-L yield equal to the fraction of visited nodes that would survive +/// bucket selection — high yield (mostly distinct buckets) leaves `L` +/// unchanged, low yield (heavy bucket concentration) grows it. +fn diverse_matched_slots(bucket_counts: I, diverse_results_k: usize) -> usize +where + I: IntoIterator, +{ + bucket_counts + .into_iter() + .map(|count| count.min(diverse_results_k)) + .sum() +} + +/////////// +// Tests // +/////////// + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn matched_slots_all_distinct_k1() { + // Every node in its own bucket, k=1: every node is a useful slot. + let counts = [1, 1, 1, 1]; + assert_eq!(diverse_matched_slots(counts, 1), 4); + } + + #[test] + fn matched_slots_single_bucket_k1() { + // All nodes in one bucket, k=1: only one useful slot. + let counts = [10]; + assert_eq!(diverse_matched_slots(counts, 1), 1); + } + + #[test] + fn matched_slots_caps_per_bucket() { + // k=2: each bucket contributes at most 2. + let counts = [5, 1, 3]; + assert_eq!(diverse_matched_slots(counts, 2), 2 + 1 + 2); + } + + #[test] + fn matched_slots_empty_sample() { + let counts: [usize; 0] = []; + assert_eq!(diverse_matched_slots(counts, 1), 0); + } + + #[test] + fn matched_slots_drives_adaptive_l_growth() { + // 100 visited nodes, k=1. High concentration (few distinct buckets) + // must grow L; full diversity (all distinct) must leave it unchanged. + let base_l = 100; + let max_multiplier = 8.0; + + // 100 nodes across 100 distinct buckets => yield 1.0 => no growth. + let all_distinct = std::iter::repeat_n(1usize, 100); + let matched = diverse_matched_slots(all_distinct, 1); + assert_eq!(compute_adaptive_l(base_l, 100, matched, max_multiplier), base_l); + + // 100 nodes across 10 distinct buckets => yield 0.1 => 2x growth. + let ten_buckets = std::iter::repeat_n(10usize, 10); + let matched = diverse_matched_slots(ten_buckets, 1); + assert_eq!( + compute_adaptive_l(base_l, 100, matched, max_multiplier), + 2 * base_l + ); + + // 100 nodes in a single bucket => yield 0.01 => 4x growth. + let one_bucket = std::iter::once(100usize); + let matched = diverse_matched_slots(one_bucket, 1); + assert_eq!( + compute_adaptive_l(base_l, 100, matched, max_multiplier), + 4 * base_l + ); + } +} diff --git a/diskann/src/graph/search/inline_filter_search.rs b/diskann/src/graph/search/inline_filter_search.rs index c535c87b6..b3cf05367 100644 --- a/diskann/src/graph/search/inline_filter_search.rs +++ b/diskann/src/graph/search/inline_filter_search.rs @@ -59,6 +59,18 @@ impl AdaptiveL { scale_factor, }) } + + /// Number of nodes to sample before estimating specificity and resizing L. + #[inline] + pub(crate) fn sample_count(&self) -> usize { + self.sample_count + } + + /// Maximum multiplier applied to the base L. + #[inline] + pub(crate) fn scale_factor(&self) -> f64 { + self.scale_factor + } } /// Inline filtered search: a standard k-NN search with an additional step @@ -300,7 +312,12 @@ where /// 0 matches in sample → `max_multiplier`× L (maximum expansion) /// /// Clamped to [1×, max_multiplier] range. -fn compute_adaptive_l(base_l: usize, visited: usize, matched: usize, max_multiplier: f64) -> usize { +pub(crate) fn compute_adaptive_l( + base_l: usize, + visited: usize, + matched: usize, + max_multiplier: f64, +) -> usize { if matched == 0 || visited == 0 { // No matches at all — use maximum multiplier return (base_l as f64 * max_multiplier) as usize; diff --git a/diskann/src/graph/search/mod.rs b/diskann/src/graph/search/mod.rs index b99daae48..25aa3b142 100644 --- a/diskann/src/graph/search/mod.rs +++ b/diskann/src/graph/search/mod.rs @@ -119,3 +119,6 @@ pub use range_search::{Range, RangeSearchError}; mod diverse_search; pub use diverse_search::Diverse; + +mod diverse_adaptive_search; +pub use diverse_adaptive_search::DiverseAdaptiveSearch; From f68d8d2ca556d99675e139b0c51ed1dd7187369b Mon Sep 17 00:00:00 2001 From: Naren Datha Date: Fri, 10 Jul 2026 12:00:53 +0530 Subject: [PATCH 03/11] style: rustfmt fixups for Design B diverse search files --- diskann-benchmark/src/disk_index/search.rs | 12 ++++------- .../graph/search/diverse_adaptive_search.rs | 20 ++++++++----------- 2 files changed, 12 insertions(+), 20 deletions(-) diff --git a/diskann-benchmark/src/disk_index/search.rs b/diskann-benchmark/src/disk_index/search.rs index e57141223..b5a2de43a 100644 --- a/diskann-benchmark/src/disk_index/search.rs +++ b/diskann-benchmark/src/disk_index/search.rs @@ -248,14 +248,10 @@ where let diverse_attribute_id = search_params.diverse_attribute_id; // Design B: when the diverse path is active and `adaptive_l` is configured, // grow `L` per query from the observed bucket concentration. - let diverse_adaptive_l = search_params - .search_mode - .adaptive_l - .as_ref() - .map(|a| { - diskann::graph::search::AdaptiveL::new(a.sample_count.into(), a.scale_factor) - .expect("validated adaptive L must construct") - }); + let diverse_adaptive_l = search_params.search_mode.adaptive_l.as_ref().map(|a| { + diskann::graph::search::AdaptiveL::new(a.sample_count.into(), a.scale_factor) + .expect("validated adaptive L must construct") + }); let pool = create_thread_pool(search_params.num_threads)?; let mut search_results_per_l = Vec::with_capacity(search_params.search_list.len()); diff --git a/diskann/src/graph/search/diverse_adaptive_search.rs b/diskann/src/graph/search/diverse_adaptive_search.rs index b6b14cb54..9e7d00c4d 100644 --- a/diskann/src/graph/search/diverse_adaptive_search.rs +++ b/diskann/src/graph/search/diverse_adaptive_search.rs @@ -39,9 +39,7 @@ use diskann_utils::future::SendFuture; use hashbrown::HashMap; use super::{ - AdaptiveL, Knn, Search, - inline_filter_search::compute_adaptive_l, - scratch::SearchScratch, + AdaptiveL, Knn, Search, inline_filter_search::compute_adaptive_l, scratch::SearchScratch, }; use crate::{ ANNResult, @@ -120,8 +118,7 @@ where .into_ann_result()?; let num_starting_points = accessor.num_starting_points().await?; - let mut scratch = - index.search_scratch(self.inner.l_value().get(), num_starting_points); + let mut scratch = index.search_scratch(self.inner.l_value().get(), num_starting_points); let stats = diverse_adaptive_search_internal( index.max_degree_with_slack(), @@ -219,12 +216,8 @@ where if !l_adjusted && sample_visited >= adaptive_l.sample_count() { l_adjusted = true; let matched = diverse_matched_slots(bucket_counts.values().copied(), diverse_results_k); - let new_l = compute_adaptive_l( - l_search, - sample_visited, - matched, - adaptive_l.scale_factor(), - ); + let new_l = + compute_adaptive_l(l_search, sample_visited, matched, adaptive_l.scale_factor()); if new_l > l_search { scratch.resize(new_l); } @@ -301,7 +294,10 @@ mod tests { // 100 nodes across 100 distinct buckets => yield 1.0 => no growth. let all_distinct = std::iter::repeat_n(1usize, 100); let matched = diverse_matched_slots(all_distinct, 1); - assert_eq!(compute_adaptive_l(base_l, 100, matched, max_multiplier), base_l); + assert_eq!( + compute_adaptive_l(base_l, 100, matched, max_multiplier), + base_l + ); // 100 nodes across 10 distinct buckets => yield 0.1 => 2x growth. let ten_buckets = std::iter::repeat_n(10usize, 10); From 50eb734c04e986771669d17e667111a8fe989db1 Mon Sep 17 00:00:00 2001 From: Naren Datha Date: Fri, 10 Jul 2026 12:01:04 +0530 Subject: [PATCH 04/11] disk: reuse cached distances in attribute-diversity post-processing AttributeBucketDiversity::post_process previously recomputed exact distances for every candidate in the L-pool, fetching each full-precision vector and re-evaluating the distance. This duplicated work already done during traversal and made Design A slower than the queue method at higher L. Mirror RerankAndFilter: consult scratch.distance_cache first and only fetch/recompute for cache misses, then sort and run the greedy per-bucket selection. Recall and IO counts are unchanged; redundant vector fetches and distance recomputation are eliminated. Add diverse-search-results.md documenting the Enron/Caselaw 3-way comparison (standard, queue, Design A, Design B) and this optimization. --- .../src/search/provider/disk_provider.rs | 59 ++++--- diverse-search-results.md | 161 ++++++++++++++++++ 2 files changed, 197 insertions(+), 23 deletions(-) create mode 100644 diverse-search-results.md diff --git a/diskann-disk/src/search/provider/disk_provider.rs b/diskann-disk/src/search/provider/disk_provider.rs index b3c6f281c..6b56dde42 100644 --- a/diskann-disk/src/search/provider/disk_provider.rs +++ b/diskann-disk/src/search/provider/disk_provider.rs @@ -24,7 +24,8 @@ use diskann::{ search_output_buffer, DiskANNIndex, }, neighbor::{Neighbor, NeighborPriorityQueue}, - provider::{DataProvider, DefaultContext, HasId, NoopGuard}, utils::{IntoUsize, VectorRepr}, + provider::{DataProvider, DefaultContext, HasId, NoopGuard}, + utils::{IntoUsize, VectorRepr}, ANNError, ANNResult, }; use diskann_providers::storage::StorageReadProvider; @@ -522,32 +523,44 @@ where { let provider = accessor.provider; - let candidate_ids: Vec = match self.filter { - PostprocessStrategy::AcceptAll => candidates.map(|candidate| candidate.id).collect(), - PostprocessStrategy::Apply(f) => candidates - .map(|candidate| candidate.id) - .filter(|id| f(id)) - .collect(), + // Reuse full-precision distances already computed during traversal + // (cached in `distance_cache`); only fetch vectors and recompute for + // candidates that missed the cache. + let mut uncached_ids = Vec::new(); + let mut reranked = { + let mut process = |n: u32| { + if let Some(entry) = accessor.scratch.distance_cache.get(&n) { + Some(Ok::<((u32, _), f32), ANNError>(((n, entry.1), entry.0))) + } else { + uncached_ids.push(n); + None + } + }; + match self.filter { + PostprocessStrategy::AcceptAll => candidates + .map(|n| n.id) + .filter_map(&mut process) + .collect::, _>>()?, + PostprocessStrategy::Apply(f) => candidates + .map(|n| n.id) + .filter(|id| f(id)) + .filter_map(&mut process) + .collect::, _>>()?, + } }; - if candidate_ids.is_empty() { - return Ok(0); + if !uncached_ids.is_empty() { + ensure_vertex_loaded(&mut accessor.scratch.vertex_provider, &uncached_ids)?; + for n in &uncached_ids { + let v = accessor.scratch.vertex_provider.get_vector(n)?; + let d = provider.distance_comparer.evaluate_similarity(query, v); + let a = accessor.scratch.vertex_provider.get_associated_data(n)?; + reranked.push(((*n, *a), d)); + } } - ensure_vertex_loaded(&mut accessor.scratch.vertex_provider, &candidate_ids)?; - - // Rerank the candidate pool with exact distances so the bucket - // selection walks candidates in true nearest-first order. - let mut reranked: Vec<((u32, Data::AssociatedDataType), f32)> = - Vec::with_capacity(candidate_ids.len()); - for id in &candidate_ids { - let vector = accessor.scratch.vertex_provider.get_vector(id)?; - let distance = provider - .distance_comparer - .evaluate_similarity(query, vector); - let data = accessor.scratch.vertex_provider.get_associated_data(id)?; - reranked.push(((*id, *data), distance)); - } + // Sort by exact distance so the bucket selection walks candidates in + // true nearest-first order. reranked .sort_unstable_by(|a, b| a.1.partial_cmp(&b.1).unwrap_or(std::cmp::Ordering::Equal)); diff --git a/diverse-search-results.md b/diverse-search-results.md new file mode 100644 index 000000000..98e0f5578 --- /dev/null +++ b/diverse-search-results.md @@ -0,0 +1,161 @@ +# Attribute-Diversity Search — Benchmark Results + +Comparison of attribute-bucket diverse search strategies on two datasets, all +evaluated against a **diverse ground truth** (GT built so that no more than +`diverse_results_k` results share the same attribute bucket). + +## Setup + +Common parameters for every run below: + +| Parameter | Value | +|---|---| +| Index | On-disk DiskANN, 200,000 base vectors | +| `recall_at` (k) | 10 | +| `diverse_results_k` | 1 (at most one result per attribute bucket) | +| `beam_width` | 4 | +| `num_threads` | 1 | +| Distance | squared L2 | +| Search lists (L) | 20, 40, 80, 100 | +| Ground truth | diverse GT (`groundtruth_diverse_k100.bin`) | + +> **QPS methodology.** Recall, IO counts, comparisons and hops are exact and +> fully reproducible. QPS, however, is single-threaded and disk-bound, and on the +> dev machine used here (shared with VS Code, browsers, Teams) it varied 10–30× +> run-to-run purely from disk-wait contention, with IO counts unchanged. The QPS +> figures below are the **best (least-contended) of several runs per cell**, +> which is closest to the true compute-/IO-bound cost. Treat QPS as indicative, +> not precise; the recall and IO columns are the authoritative comparison. + +### Datasets + +| Dataset | Dim | Diversity attribute | Attribute character | +|---|---|---|---| +| Enron | 1,369 | attribute id 0 | **Concentrated** — many vectors share a bucket | +| Caselaw | 1,536 | `doc_id` | **Diffuse** — 200K vectors span 172,518 docs (18,383 multi-chunk) | + +### Strategies compared + +- **Standard** — plain KNN search (no diversity enforcement), scored against the + diverse GT. Shows how far an ordinary search is from the diverse target. +- **Queue** — diversity enforced *during* graph traversal using a diversity-aware + neighbor queue with approximate (PQ) distances. Branch + `u/narendatha/diverse-search-benchmark`. +- **Design A (post-process)** — plain KNN over the top-L pool, then a greedy + bucket selection keeping ≤ `diverse_results_k` per bucket, using + full-precision distances. Fixed L (no over-fetch). The post-processor reuses + the full-precision distances already cached during traversal + (`distance_cache`) and only fetches/recomputes for cache misses (see + [Optimization](#optimization-distance-cache-reuse-in-design-a)). +- **Design B (adaptive-L)** — like Design A, but a greedy walk first samples + bucket concentration; if buckets are concentrated it grows L (over-fetches) + before the same post-processing step. When buckets are diffuse it returns a 1× + multiplier and behaves exactly like Design A. + +--- + +## Enron (concentrated attribute) + +| L | Standard recall | Queue recall | Design A recall | Design B recall | Std QPS | Queue QPS | A QPS | B QPS | +|---|---|---|---|---|---|---|---|---| +| 20 | 55.71 | 61.11 | 59.98 | **73.38** | 375.5 | 261 | 542.9 | 385.6 | +| 40 | 64.28 | 71.08 | 73.93 | **83.55** | 245.3 | 221 | 268.0 | 183.2 | +| 80 | 69.67 | 76.46 | 84.00 | **89.79** | 173.2 | 116 | 165.6 | 107.2 | +| 100 | 70.72 | 77.92 | 86.05 | **91.00** | 142.6 | 100 | 159.2 | 53 | + +> Design A QPS reflects the distance-cache reuse optimization (see below). With +> that change Design A is now the fastest diversity-aware method at every L, at +> strictly higher recall than the queue. + +**Observations** +- Standard search is far below every diversity-aware method (it does not enforce + the one-per-bucket constraint), confirming the diverse GT is meaningfully + different from ordinary top-k. +- **Design B wins recall at every L** (+13 over queue at L=20), because the + attribute is concentrated: the adaptive sampler detects this and over-fetches a + larger pool before reranking. +- Design A beats the queue on both recall and QPS at every L, since its + post-processing now reuses cached distances instead of recomputing them. +- Design B carries a throughput cost (extra pool fetch + more IO), but delivers + the highest recall. At L=100 its IO count (214) is nearly double Design A's + (120), so its lower QPS there is real, not measurement noise. +- Pareto note: Design B @ L=20 (73.4 recall) beats Design A @ L=40 (73.9 recall) + at comparable throughput. + +--- + +## Caselaw (diffuse attribute — `doc_id`) + +| L | Standard recall | Queue recall | Design A recall | Design B recall | Std QPS | Queue QPS | A QPS | B QPS | +|---|---|---|---|---|---|---|---|---| +| 20 | 90.61 | 90.76 | 92.04 | 92.04 | 554.8 | 306.7 | 448.8 | 238.4 | +| 40 | 95.43 | 96.53 | 97.53 | 97.53 | 267.5 | 207.0 | 192.5 | 151.0 | +| 80 | 96.73 | 98.13 | 99.06 | 99.06 | 187.0 | 138.4 | 132.4 | 101.3 | +| 100 | 96.91 | 98.32 | 99.25 | 99.25 | 160.3 | 84.3 | 128.8 | 105.9 | + +**Observations** +- **Design A and Design B have identical recall AND identical IO/comparison/hop + counts.** The `doc_id` attribute is so diffuse (almost every vector is its own + bucket) that the concentration sampler returns a 1× multiplier — Design B + performs no over-fetch. Its slightly lower QPS is the pure cost of the + concentration-sampling walk, which here yields no benefit. +- Even standard search is already close to the diverse GT here, because with + near-unique buckets the diverse GT is almost the same as the ordinary top-k. + The diversity methods add only ~1–2 recall points. +- Design A/B edge out the queue method on recall (~1–1.3 points) via + exact-distance reranking. With the distance-cache reuse, Design A is also + competitive on QPS (e.g. 448.8 vs queue 306.7 at L=20). + +--- + +## Optimization: distance-cache reuse in Design A + +Initially Design A's `AttributeBucketDiversity` post-processor was *slower than +the queue method* at higher L, even though the queue does more work during +traversal. The cause: the post-processor recomputed exact distances for **every** +candidate in the L-pool — fetching each full-precision vector and re-evaluating +the distance — duplicating work the traversal had already done. + +The standard `RerankAndFilter` post-processor avoids this by consulting +`accessor.scratch.distance_cache`, which holds the full-precision distances +computed during traversal, and only fetching/recomputing for cache misses. +Design A now does the same: + +- Look up each candidate in `distance_cache`; on a hit, reuse the cached distance + and associated data (no vector fetch, no recompute). +- Collect only the misses, `ensure_vertex_loaded` them once, and compute their + distances. +- Sort by exact distance, then run the greedy per-bucket selection. + +Result (recall and IO counts byte-identical before/after; QPS = best of several +runs, disk-contention caveat above): + +| Dataset / L | A QPS before | A QPS after | +|---|---|---| +| Enron L=20 | 414 | 542.9 | +| Enron L=40 | 150 | 268.0 | +| Enron L=80 | 84 | 165.6 | +| Enron L=100 | 88 | 159.2 | +| Caselaw L=20 | 146.7 | 448.8 | +| Caselaw L=40 | 151.1 | 192.5 | + +The reduction in redundant vector fetches and distance recomputation is +consistent. Recall is unaffected because the cached distances are the same +full-precision values that would otherwise be recomputed. + +--- + +## Summary + +The two datasets exercise opposite regimes and together validate the adaptive +design: + +- **Concentrated attribute (Enron):** big win for Design B — adaptive over-fetch + recovers substantial recall (+13 over queue at L=20) at a throughput cost. +- **Diffuse attribute (Caselaw):** the sampler detects abundant diversity and + Design B performs no over-fetch — it matches Design A on recall and IO (its only + cost is the sampling walk), and both slightly beat the queue method. + +Recommendation: prefer **Design B**. It matches Design A when diversity is free +(diffuse attributes) and outperforms both Design A and the queue method when the +attribute is concentrated, without needing per-dataset tuning of L. From fa25d9fa23564424938d6d3c63e8ee557d67f968 Mon Sep 17 00:00:00 2001 From: Naren Datha Date: Fri, 10 Jul 2026 14:22:42 +0530 Subject: [PATCH 05/11] docs: add YFCC dataset results, charts; remove cache-impl section --- diverse-search-results.md | 170 +++++++++++++++++++++++++++----------- 1 file changed, 121 insertions(+), 49 deletions(-) diff --git a/diverse-search-results.md b/diverse-search-results.md index 98e0f5578..0e44ee770 100644 --- a/diverse-search-results.md +++ b/diverse-search-results.md @@ -1,6 +1,6 @@ # Attribute-Diversity Search — Benchmark Results -Comparison of attribute-bucket diverse search strategies on two datasets, all +Comparison of attribute-bucket diverse search strategies on three datasets, all evaluated against a **diverse ground truth** (GT built so that no more than `diverse_results_k` results share the same attribute bucket). @@ -33,6 +33,7 @@ Common parameters for every run below: |---|---|---|---| | Enron | 1,369 | attribute id 0 | **Concentrated** — many vectors share a bucket | | Caselaw | 1,536 | `doc_id` | **Diffuse** — 200K vectors span 172,518 docs (18,383 multi-chunk) | +| YFCC | 192 | `camera` model | **Concentrated** — 67 distinct cameras, largest bucket 67,783 (33.9%), median bucket 110 | ### Strategies compared @@ -43,10 +44,7 @@ Common parameters for every run below: `u/narendatha/diverse-search-benchmark`. - **Design A (post-process)** — plain KNN over the top-L pool, then a greedy bucket selection keeping ≤ `diverse_results_k` per bucket, using - full-precision distances. Fixed L (no over-fetch). The post-processor reuses - the full-precision distances already cached during traversal - (`distance_cache`) and only fetches/recomputes for cache misses (see - [Optimization](#optimization-distance-cache-reuse-in-design-a)). + full-precision distances. Fixed L (no over-fetch). - **Design B (adaptive-L)** — like Design A, but a greedy walk first samples bucket concentration; if buckets are concentrated it grows L (over-fetches) before the same post-processing step. When buckets are diffuse it returns a 1× @@ -63,9 +61,33 @@ Common parameters for every run below: | 80 | 69.67 | 76.46 | 84.00 | **89.79** | 173.2 | 116 | 165.6 | 107.2 | | 100 | 70.72 | 77.92 | 86.05 | **91.00** | 142.6 | 100 | 159.2 | 53 | -> Design A QPS reflects the distance-cache reuse optimization (see below). With -> that change Design A is now the fastest diversity-aware method at every L, at -> strictly higher recall than the queue. +**Recall vs L** (higher is better) + +```mermaid +xychart-beta + title "Enron recall @10 vs search list L" + x-axis "L" [20, 40, 80, 100] + y-axis "Recall (%)" 50 --> 95 + line "Standard" [55.71, 64.28, 69.67, 70.72] + line "Queue" [61.11, 71.08, 76.46, 77.92] + line "Design A" [59.98, 73.93, 84.00, 86.05] + line "Design B" [73.38, 83.55, 89.79, 91.00] +``` + +_Series order: Standard, Queue, Design A, Design B (Design B is the top line)._ + +**QPS vs L** (higher is better; see QPS caveat above) + +```mermaid +xychart-beta + title "Enron QPS vs search list L" + x-axis "L" [20, 40, 80, 100] + y-axis "QPS" 0 --> 560 + line "Standard" [375.5, 245.3, 173.2, 142.6] + line "Queue" [261, 221, 116, 100] + line "Design A" [542.9, 268.0, 165.6, 159.2] + line "Design B" [385.6, 183.2, 107.2, 53] +``` **Observations** - Standard search is far below every diversity-aware method (it does not enforce @@ -74,8 +96,7 @@ Common parameters for every run below: - **Design B wins recall at every L** (+13 over queue at L=20), because the attribute is concentrated: the adaptive sampler detects this and over-fetches a larger pool before reranking. -- Design A beats the queue on both recall and QPS at every L, since its - post-processing now reuses cached distances instead of recomputing them. +- Design A beats the queue on both recall and QPS at every L. - Design B carries a throughput cost (extra pool fetch + more IO), but delivers the highest recall. At L=100 its IO count (214) is nearly double Design A's (120), so its lower QPS there is real, not measurement noise. @@ -93,6 +114,34 @@ Common parameters for every run below: | 80 | 96.73 | 98.13 | 99.06 | 99.06 | 187.0 | 138.4 | 132.4 | 101.3 | | 100 | 96.91 | 98.32 | 99.25 | 99.25 | 160.3 | 84.3 | 128.8 | 105.9 | +**Recall vs L** (higher is better) + +```mermaid +xychart-beta + title "Caselaw recall @10 vs search list L" + x-axis "L" [20, 40, 80, 100] + y-axis "Recall (%)" 90 --> 100 + line "Standard" [90.61, 95.43, 96.73, 96.91] + line "Queue" [90.76, 96.53, 98.13, 98.32] + line "Design A" [92.04, 97.53, 99.06, 99.25] + line "Design B" [92.04, 97.53, 99.06, 99.25] +``` + +_Design A and Design B overlap exactly (identical recall)._ + +**QPS vs L** (higher is better; see QPS caveat above) + +```mermaid +xychart-beta + title "Caselaw QPS vs search list L" + x-axis "L" [20, 40, 80, 100] + y-axis "QPS" 0 --> 560 + line "Standard" [554.8, 267.5, 187.0, 160.3] + line "Queue" [306.7, 207.0, 138.4, 84.3] + line "Design A" [448.8, 192.5, 132.4, 128.8] + line "Design B" [238.4, 151.0, 101.3, 105.9] +``` + **Observations** - **Design A and Design B have identical recall AND identical IO/comparison/hop counts.** The `doc_id` attribute is so diffuse (almost every vector is its own @@ -103,55 +152,78 @@ Common parameters for every run below: near-unique buckets the diverse GT is almost the same as the ordinary top-k. The diversity methods add only ~1–2 recall points. - Design A/B edge out the queue method on recall (~1–1.3 points) via - exact-distance reranking. With the distance-cache reuse, Design A is also - competitive on QPS (e.g. 448.8 vs queue 306.7 at L=20). + exact-distance reranking, and Design A is also competitive on QPS + (e.g. 448.8 vs queue 306.7 at L=20). --- -## Optimization: distance-cache reuse in Design A - -Initially Design A's `AttributeBucketDiversity` post-processor was *slower than -the queue method* at higher L, even though the queue does more work during -traversal. The cause: the post-processor recomputed exact distances for **every** -candidate in the L-pool — fetching each full-precision vector and re-evaluating -the distance — duplicating work the traversal had already done. - -The standard `RerankAndFilter` post-processor avoids this by consulting -`accessor.scratch.distance_cache`, which holds the full-precision distances -computed during traversal, and only fetching/recomputing for cache misses. -Design A now does the same: - -- Look up each candidate in `distance_cache`; on a hit, reuse the cached distance - and associated data (no vector fetch, no recompute). -- Collect only the misses, `ensure_vertex_loaded` them once, and compute their - distances. -- Sort by exact distance, then run the greedy per-bucket selection. - -Result (recall and IO counts byte-identical before/after; QPS = best of several -runs, disk-contention caveat above): - -| Dataset / L | A QPS before | A QPS after | -|---|---|---| -| Enron L=20 | 414 | 542.9 | -| Enron L=40 | 150 | 268.0 | -| Enron L=80 | 84 | 165.6 | -| Enron L=100 | 88 | 159.2 | -| Caselaw L=20 | 146.7 | 448.8 | -| Caselaw L=40 | 151.1 | 192.5 | - -The reduction in redundant vector fetches and distance recomputation is -consistent. Recall is unaffected because the cached distances are the same -full-precision values that would otherwise be recomputed. +## YFCC (concentrated attribute — `camera` model) + +YFCC-100M image embeddings (200K subset, 192-dim). The diversity attribute is the +`camera` model tag: 67 distinct cameras, but very skewed — the largest bucket holds +33.9% of all vectors and the median bucket only 110, so this is a strongly +concentrated regime (like Enron). + +| L | Standard recall | Queue recall | Design A recall | Design B recall | Std QPS | Queue QPS | A QPS | B QPS | +|---|---|---|---|---|---|---|---|---| +| 20 | 49.35 | 79.26 | 66.92 | **83.55** | 347.0 | 592.6 | 499.4 | 442.6 | +| 40 | 49.60 | 81.23 | 83.54 | **92.52** | 499.7 | 397.3 | 441.5 | 261.8 | +| 80 | 49.72 | 81.60 | 92.38 | **95.44** | 256.5 | 240.2 | 248.3 | 140.6 | +| 100 | 49.73 | 81.78 | 93.98 | **96.33** | 227.1 | 186.1 | 192.6 | 111.9 | + +**Recall vs L** (higher is better) + +```mermaid +xychart-beta + title "YFCC recall @10 vs search list L" + x-axis "L" [20, 40, 80, 100] + y-axis "Recall (%)" 45 --> 100 + line "Standard" [49.35, 49.60, 49.72, 49.73] + line "Queue" [79.26, 81.23, 81.60, 81.78] + line "Design A" [66.92, 83.54, 92.38, 93.98] + line "Design B" [83.55, 92.52, 95.44, 96.33] +``` + +_Series order: Standard, Queue, Design A, Design B (Design B is the top line)._ + +**QPS vs L** (higher is better; see QPS caveat above) + +```mermaid +xychart-beta + title "YFCC QPS vs search list L" + x-axis "L" [20, 40, 80, 100] + y-axis "QPS" 0 --> 600 + line "Standard" [347.0, 499.7, 256.5, 227.1] + line "Queue" [592.6, 397.3, 240.2, 186.1] + line "Design A" [499.4, 441.5, 248.3, 192.6] + line "Design B" [442.6, 261.8, 140.6, 111.9] +``` + +**Observations** +- Standard search is stuck at ~49.5 recall for every L — with a third of the + corpus in one camera bucket, ordinary top-k returns many same-bucket neighbors + that the diverse GT rejects. Growing L does not help it at all. +- **Design B wins recall at every L** (+4 to +11 over the queue), because the + adaptive sampler detects the concentration and over-fetches before reranking. +- **The queue method plateaus at ~81%** — its approximate (PQ) in-traversal + diversity saturates and extra L barely helps. Design A overtakes it from L=40 + onward and reaches 94% at L=100; Design B is ahead of the queue at every L. +- Design B's higher recall again costs throughput (its IO roughly doubles by + L=100: 217 vs Design A's 111), so its lower QPS is real work, not noise. +- Pareto note: Design B @ L=20 (83.6 recall) already beats Design A @ L=40 + (83.5) and the queue at any L, at competitive throughput. --- ## Summary -The two datasets exercise opposite regimes and together validate the adaptive +The three datasets exercise opposite regimes and together validate the adaptive design: -- **Concentrated attribute (Enron):** big win for Design B — adaptive over-fetch - recovers substantial recall (+13 over queue at L=20) at a throughput cost. +- **Concentrated attribute (Enron, YFCC):** big win for Design B — adaptive + over-fetch recovers substantial recall (+13 over queue on Enron at L=20; +11 on + YFCC at L=40) at a throughput cost. On YFCC the queue method plateaus near 81% + while Design B climbs to 96%. - **Diffuse attribute (Caselaw):** the sampler detects abundant diversity and Design B performs no over-fetch — it matches Design A on recall and IO (its only cost is the sampling walk), and both slightly beat the queue method. From 85aeaa032d7091ad946943779576304ccf773f1e Mon Sep 17 00:00:00 2001 From: Naren Datha Date: Tue, 14 Jul 2026 11:38:11 +0530 Subject: [PATCH 06/11] docs: replace mermaid charts with per-dataset QPS-vs-recall plots --- .../diverse-search/caselaw-qps-vs-recall.png | Bin 0 -> 48838 bytes assets/diverse-search/enron-qps-vs-recall.png | Bin 0 -> 47970 bytes assets/diverse-search/yfcc-qps-vs-recall.png | Bin 0 -> 46090 bytes diverse-search-results.md | 90 ++---------------- 4 files changed, 9 insertions(+), 81 deletions(-) create mode 100644 assets/diverse-search/caselaw-qps-vs-recall.png create mode 100644 assets/diverse-search/enron-qps-vs-recall.png create mode 100644 assets/diverse-search/yfcc-qps-vs-recall.png diff --git a/assets/diverse-search/caselaw-qps-vs-recall.png b/assets/diverse-search/caselaw-qps-vs-recall.png new file mode 100644 index 0000000000000000000000000000000000000000..867d6dac2c89fd3df7f28f1559dc05a3583fc651 GIT binary patch literal 48838 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 Z(|a6c63OP_N81qToW72Ub~z3o`ycpGFp>ZO literal 0 HcmV?d00001 diff --git a/assets/diverse-search/yfcc-qps-vs-recall.png b/assets/diverse-search/yfcc-qps-vs-recall.png new file mode 100644 index 0000000000000000000000000000000000000000..482587f8d46662e7e65840e727cecbb587f5fe5a GIT binary patch literal 46090 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�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 Xm)sl^_}R+zcW{D{zA2_$&pzTmHZcP# literal 0 HcmV?d00001 diff --git a/diverse-search-results.md b/diverse-search-results.md index 0e44ee770..1bb973280 100644 --- a/diverse-search-results.md +++ b/diverse-search-results.md @@ -61,33 +61,9 @@ Common parameters for every run below: | 80 | 69.67 | 76.46 | 84.00 | **89.79** | 173.2 | 116 | 165.6 | 107.2 | | 100 | 70.72 | 77.92 | 86.05 | **91.00** | 142.6 | 100 | 159.2 | 53 | -**Recall vs L** (higher is better) - -```mermaid -xychart-beta - title "Enron recall @10 vs search list L" - x-axis "L" [20, 40, 80, 100] - y-axis "Recall (%)" 50 --> 95 - line "Standard" [55.71, 64.28, 69.67, 70.72] - line "Queue" [61.11, 71.08, 76.46, 77.92] - line "Design A" [59.98, 73.93, 84.00, 86.05] - line "Design B" [73.38, 83.55, 89.79, 91.00] -``` - -_Series order: Standard, Queue, Design A, Design B (Design B is the top line)._ - -**QPS vs L** (higher is better; see QPS caveat above) - -```mermaid -xychart-beta - title "Enron QPS vs search list L" - x-axis "L" [20, 40, 80, 100] - y-axis "QPS" 0 --> 560 - line "Standard" [375.5, 245.3, 173.2, 142.6] - line "Queue" [261, 221, 116, 100] - line "Design A" [542.9, 268.0, 165.6, 159.2] - line "Design B" [385.6, 183.2, 107.2, 53] -``` +**QPS vs recall @ L=100** (up and to the right is better) + +![Enron QPS vs recall](assets/diverse-search/enron-qps-vs-recall.png) **Observations** - Standard search is far below every diversity-aware method (it does not enforce @@ -114,33 +90,9 @@ xychart-beta | 80 | 96.73 | 98.13 | 99.06 | 99.06 | 187.0 | 138.4 | 132.4 | 101.3 | | 100 | 96.91 | 98.32 | 99.25 | 99.25 | 160.3 | 84.3 | 128.8 | 105.9 | -**Recall vs L** (higher is better) - -```mermaid -xychart-beta - title "Caselaw recall @10 vs search list L" - x-axis "L" [20, 40, 80, 100] - y-axis "Recall (%)" 90 --> 100 - line "Standard" [90.61, 95.43, 96.73, 96.91] - line "Queue" [90.76, 96.53, 98.13, 98.32] - line "Design A" [92.04, 97.53, 99.06, 99.25] - line "Design B" [92.04, 97.53, 99.06, 99.25] -``` - -_Design A and Design B overlap exactly (identical recall)._ - -**QPS vs L** (higher is better; see QPS caveat above) - -```mermaid -xychart-beta - title "Caselaw QPS vs search list L" - x-axis "L" [20, 40, 80, 100] - y-axis "QPS" 0 --> 560 - line "Standard" [554.8, 267.5, 187.0, 160.3] - line "Queue" [306.7, 207.0, 138.4, 84.3] - line "Design A" [448.8, 192.5, 132.4, 128.8] - line "Design B" [238.4, 151.0, 101.3, 105.9] -``` +**QPS vs recall @ L=100** (up and to the right is better) + +![Caselaw QPS vs recall](assets/diverse-search/caselaw-qps-vs-recall.png) **Observations** - **Design A and Design B have identical recall AND identical IO/comparison/hop @@ -171,33 +123,9 @@ concentrated regime (like Enron). | 80 | 49.72 | 81.60 | 92.38 | **95.44** | 256.5 | 240.2 | 248.3 | 140.6 | | 100 | 49.73 | 81.78 | 93.98 | **96.33** | 227.1 | 186.1 | 192.6 | 111.9 | -**Recall vs L** (higher is better) - -```mermaid -xychart-beta - title "YFCC recall @10 vs search list L" - x-axis "L" [20, 40, 80, 100] - y-axis "Recall (%)" 45 --> 100 - line "Standard" [49.35, 49.60, 49.72, 49.73] - line "Queue" [79.26, 81.23, 81.60, 81.78] - line "Design A" [66.92, 83.54, 92.38, 93.98] - line "Design B" [83.55, 92.52, 95.44, 96.33] -``` - -_Series order: Standard, Queue, Design A, Design B (Design B is the top line)._ - -**QPS vs L** (higher is better; see QPS caveat above) - -```mermaid -xychart-beta - title "YFCC QPS vs search list L" - x-axis "L" [20, 40, 80, 100] - y-axis "QPS" 0 --> 600 - line "Standard" [347.0, 499.7, 256.5, 227.1] - line "Queue" [592.6, 397.3, 240.2, 186.1] - line "Design A" [499.4, 441.5, 248.3, 192.6] - line "Design B" [442.6, 261.8, 140.6, 111.9] -``` +**QPS vs recall @ L=100** (up and to the right is better) + +![YFCC QPS vs recall](assets/diverse-search/yfcc-qps-vs-recall.png) **Observations** - Standard search is stuck at ~49.5 recall for every L — with a third of the From 8de28b06947c8f995f8a5c1c899c2543864a58bb Mon Sep 17 00:00:00 2001 From: Naren Datha Date: Tue, 14 Jul 2026 21:51:04 +0530 Subject: [PATCH 07/11] Add caselaw court_jurisdiction (distance-correlated) diversity regime --- .../caselaw-jurisdiction-qps-vs-recall.png | Bin 0 -> 49016 bytes diverse-search-results.md | 100 ++++++++++++++---- 2 files changed, 82 insertions(+), 18 deletions(-) create mode 100644 assets/diverse-search/caselaw-jurisdiction-qps-vs-recall.png diff --git a/assets/diverse-search/caselaw-jurisdiction-qps-vs-recall.png b/assets/diverse-search/caselaw-jurisdiction-qps-vs-recall.png new file mode 100644 index 0000000000000000000000000000000000000000..a027d0502c59d1334f42e24c5c63165411c00acf GIT binary patch literal 49016 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 literal 0 HcmV?d00001 diff --git a/diverse-search-results.md b/diverse-search-results.md index 1bb973280..c13786fbd 100644 --- a/diverse-search-results.md +++ b/diverse-search-results.md @@ -1,6 +1,7 @@ # Attribute-Diversity Search — Benchmark Results -Comparison of attribute-bucket diverse search strategies on three datasets, all +Comparison of attribute-bucket diverse search strategies across several dataset +and attribute regimes, all evaluated against a **diverse ground truth** (GT built so that no more than `diverse_results_k` results share the same attribute bucket). @@ -32,8 +33,16 @@ Common parameters for every run below: | Dataset | Dim | Diversity attribute | Attribute character | |---|---|---|---| | Enron | 1,369 | attribute id 0 | **Concentrated** — many vectors share a bucket | -| Caselaw | 1,536 | `doc_id` | **Diffuse** — 200K vectors span 172,518 docs (18,383 multi-chunk) | -| YFCC | 192 | `camera` model | **Concentrated** — 67 distinct cameras, largest bucket 67,783 (33.9%), median bucket 110 | +| Caselaw | 1,536 | `doc_id` | **Diffuse, uncorrelated** — 200K vectors span 172,518 docs (18,383 multi-chunk) | +| Caselaw | 1,536 | `court_jurisdiction` | **Concentrated + distance-correlated** — 60 courts, largest bucket 47,358 (23.7%), median 1,668 | +| YFCC | 192 | `camera` model | **Concentrated, ~uncorrelated** — 67 distinct cameras, largest bucket 67,783 (33.9%), median bucket 110 | + +Two axes matter for diversity search: how **concentrated** the buckets are (does +the sampler need to over-fetch?) and how **correlated** the attribute is with +distance (are same-bucket vectors clustered together in the search pool?). The +caselaw `court_jurisdiction` attribute is the interesting case: cases from the +same court share citations and legal boilerplate, so their embeddings cluster — +the attribute is *both* concentrated and strongly correlated with distance. ### Strategies compared @@ -81,7 +90,7 @@ Common parameters for every run below: --- -## Caselaw (diffuse attribute — `doc_id`) +## Caselaw (diffuse, uncorrelated attribute — `doc_id`) | L | Standard recall | Queue recall | Design A recall | Design B recall | Std QPS | Queue QPS | A QPS | B QPS | |---|---|---|---|---|---|---|---|---| @@ -109,6 +118,50 @@ Common parameters for every run below: --- +## Caselaw (concentrated + distance-correlated attribute — `court_jurisdiction`) + +Same 200K caselaw vectors and index as above, but the diversity attribute is now +the natural `court_jurisdiction` field (60 US courts) instead of `doc_id`. This +attribute is **both** concentrated (largest bucket 23.7%, median 1,668) **and +strongly correlated with distance** — cases from the same court cluster together +in embedding space. This is the hardest and most realistic regime: a query's +nearest neighbors are dominated by a few jurisdictions, so enforcing one-per-bucket +forces the search to reach far past the plain top-L pool. + +| L | Standard recall | Queue recall | Design A recall | Design B recall | Std QPS | Queue QPS | A QPS | B QPS | +|---|---|---|---|---|---|---|---|---| +| 20 | 34.74 | 71.35 | 46.30 | 59.24 | 387.9 | 434.9 | 413.5 | 317.1 | +| 40 | 35.37 | 76.19 | 59.68 | 69.58 | 394.3 | 278.7 | 303.8 | 203.3 | +| 80 | 35.79 | 78.72 | 69.74 | 77.62 | 212.2 | 176.4 | 211.1 | 114.2 | +| 100 | 35.91 | 79.12 | 72.59 | **79.92** | 165.6 | 152.1 | 174.5 | 96.0 | + +**QPS vs recall @ L=100** (up and to the right is better) + +![Caselaw jurisdiction QPS vs recall](assets/diverse-search/caselaw-jurisdiction-qps-vs-recall.png) + +**Observations** +- **This regime inverts the earlier ranking: the queue beats Design A at every L** + (e.g. 71.4 vs 46.3 at L=20). When the attribute is correlated with distance, the + plain top-L pool that Design A reranks is *saturated* with the dominant + jurisdictions, so no amount of exact-distance reranking can recover the missing + buckets. The queue enforces diversity *during* traversal, steering the walk out + of the dominant cluster early — exactly what post-processing cannot do. +- **Design B recovers most of the gap** via adaptive over-fetch (59.2 vs A's 46.3 + at L=20) and finally edges past the queue on recall at L=100 (79.9 vs 79.1) — but + only by fetching a much larger pool (IO 210 vs queue's 114), so its QPS is the + lowest of all methods there. On the QPS-vs-recall plot the queue **dominates + Design B** (same recall, ~1.6× the throughput). +- Standard search collapses to ~35% and never improves with L — with buckets both + concentrated and distance-correlated, the ordinary top-k is almost entirely the + wrong jurisdictions. +- Takeaway: **for a distance-correlated attribute, in-traversal diversity (queue) + is the efficient choice; post-processing (Design A/B) must over-fetch heavily to + compete, and even then only matches — never beats — the queue on the + recall/QPS frontier.** This is the opposite of the uncorrelated concentrated + case (YFCC) where Design B is the clear winner. + +--- + ## YFCC (concentrated attribute — `camera` model) YFCC-100M image embeddings (200K subset, 192-dim). The diversity attribute is the @@ -145,17 +198,28 @@ concentrated regime (like Enron). ## Summary -The three datasets exercise opposite regimes and together validate the adaptive -design: - -- **Concentrated attribute (Enron, YFCC):** big win for Design B — adaptive - over-fetch recovers substantial recall (+13 over queue on Enron at L=20; +11 on - YFCC at L=40) at a throughput cost. On YFCC the queue method plateaus near 81% - while Design B climbs to 96%. -- **Diffuse attribute (Caselaw):** the sampler detects abundant diversity and - Design B performs no over-fetch — it matches Design A on recall and IO (its only - cost is the sampling walk), and both slightly beat the queue method. - -Recommendation: prefer **Design B**. It matches Design A when diversity is free -(diffuse attributes) and outperforms both Design A and the queue method when the -attribute is concentrated, without needing per-dataset tuning of L. +The datasets exercise the two axes that govern diverse search — bucket +**concentration** and attribute/distance **correlation**: + +- **Concentrated, ~uncorrelated attribute (Enron, YFCC):** big win for Design B — + adaptive over-fetch recovers substantial recall (+13 over queue on Enron at + L=20; +11 on YFCC at L=40) at a throughput cost. On YFCC the queue method + plateaus near 81% while Design B climbs to 96%. +- **Diffuse attribute (Caselaw `doc_id`):** the sampler detects abundant diversity + and Design B performs no over-fetch — it matches Design A on recall and IO (its + only cost is the sampling walk), and both slightly beat the queue method. +- **Concentrated + distance-correlated attribute (Caselaw `court_jurisdiction`):** + the ranking *inverts*. Because same-bucket vectors cluster in distance, the plain + top-L pool is saturated with the dominant buckets, so post-processing (Design A) + falls far behind the queue (46 vs 71 recall at L=20). The queue enforces diversity + during traversal and is the efficient choice; Design B claws back most of the gap + via heavy over-fetch and ties the queue on recall at L=100, but at ~1.6× the IO, + so the queue dominates it on the recall/QPS frontier. + +Recommendation: the best strategy depends on the attribute. For **concentrated, +distance-uncorrelated** attributes, **Design B** wins (adaptive over-fetch, no +per-dataset L tuning). For **distance-correlated** attributes, in-traversal +diversity (the **queue**) is more efficient than any post-processing approach — +diversity has to be enforced during the walk, not after it. Design A remains a +cheap, effective choice whenever the top-L pool already contains enough distinct +buckets (diffuse or weakly-correlated attributes). From 28b1c517f48c61e898289c7467a5159204e01203 Mon Sep 17 00:00:00 2001 From: Naren Datha Date: Fri, 17 Jul 2026 18:11:51 +0530 Subject: [PATCH 08/11] Normalize diverse adaptive-L yield by achievable diversity Couple the diversity yield to num_buckets, k, and sample size via the denominator min(sample_visited, num_buckets*k), so yield spans [0, 1] in both few-bucket and diffuse regimes. Add AttributeValueProvider::num_buckets (default None disables growth) and report it from FileAttributeProvider. Scale L linearly from the yield deficit (1 - yield) rather than reusing the inline-filter specificity curve. --- diskann-benchmark/src/utils/attributes.rs | 16 +- .../graph/search/diverse_adaptive_search.rs | 217 ++++++++++++++---- .../src/neighbor/diverse_priority_queue.rs | 12 + 3 files changed, 204 insertions(+), 41 deletions(-) diff --git a/diskann-benchmark/src/utils/attributes.rs b/diskann-benchmark/src/utils/attributes.rs index 513515455..1d5751f9c 100644 --- a/diskann-benchmark/src/utils/attributes.rs +++ b/diskann-benchmark/src/utils/attributes.rs @@ -31,6 +31,7 @@ const NAVIGATION_BUCKET: u32 = u32::MAX; #[derive(Debug, Clone)] pub(crate) struct FileAttributeProvider { attributes: Vec, + num_buckets: usize, } impl FileAttributeProvider { @@ -55,7 +56,16 @@ impl FileAttributeProvider { }) .collect::>>()?; - Ok(Self { attributes }) + let num_buckets = attributes + .iter() + .copied() + .collect::>() + .len(); + + Ok(Self { + attributes, + num_buckets, + }) } } @@ -74,4 +84,8 @@ impl AttributeValueProvider for FileAttributeProvider { .unwrap_or(NAVIGATION_BUCKET), ) } + + fn num_buckets(&self) -> Option { + Some(self.num_buckets) + } } diff --git a/diskann/src/graph/search/diverse_adaptive_search.rs b/diskann/src/graph/search/diverse_adaptive_search.rs index 9e7d00c4d..c57ac740e 100644 --- a/diskann/src/graph/search/diverse_adaptive_search.rs +++ b/diskann/src/graph/search/diverse_adaptive_search.rs @@ -17,30 +17,46 @@ //! large enough that the top-`L` pool contains enough distinct buckets to fill a //! diverse top-`k`. When a query lands in a region dominated by a few buckets, //! a fixed `L` under-fetches and recall suffers. Design B sizes `L` per query -//! from the observed bucket concentration, reusing the same piecewise scaling as -//! inline-filter [`AdaptiveL`]. +//! from the observed bucket concentration. //! //! # Yield metric //! -//! Analogous to filter specificity, the diversity *yield* of a sample is +//! The diversity *yield* of a sample measures how close the sampled nodes are +//! to a maximally diverse set, normalized to `[0, 1]`: //! //! ```text -//! yield = (Σ_b min(count_b, k)) / visited +//! yield = (Σ_b min(count_b, k)) / min(sample_visited, num_buckets · k) //! ``` //! -//! where `count_b` is the number of sampled nodes in bucket `b` and `k` is -//! `diverse_results_k`. For `k = 1` this is simply `distinct_buckets / visited`. -//! A low yield (many duplicate buckets) triggers a larger `L`; a high yield -//! (mostly distinct buckets) leaves `L` unchanged. +//! where `count_b` is the number of sampled nodes in bucket `b`, `k` is +//! `diverse_results_k` (the per-bucket cap applied downstream), `num_buckets` +//! is the total number of distinct attribute buckets in the dataset (reported +//! by [`AttributeValueProvider::num_buckets`]), and `sample_visited` is the +//! number of nodes sampled. The denominator is the tight upper bound on the +//! numerator, coupling the yield to all three quantities so it spans the full +//! `[0, 1]` range regardless of how few buckets the dataset has or how small +//! the sample is: +//! +//! * few buckets, large sample → denominator is `num_buckets · k`, so covering +//! every bucket reaches `1.0`; +//! * many buckets, small sample → denominator is `sample_visited`, so a fully +//! distinct sample reaches `1.0` and diffuse data leaves `L` unchanged. +//! +//! Unlike inline-filter specificity — where a value of `0.5` over a large +//! sample is already good enough to stop enlarging `L` — a diversity yield of +//! `0.5` means only ~50% of the achievable diversity has been observed so far, +//! so `L` should still grow substantially. `L` is therefore scaled from the +//! *deficit* `1 − yield`: a yield near `1.0` leaves `L` unchanged, while a low +//! yield grows it toward the configured maximum multiplier. If the provider +//! cannot report `num_buckets`, adaptive growth is skipped and `L` stays at its +//! base value. use std::sync::Arc; use diskann_utils::future::SendFuture; use hashbrown::HashMap; -use super::{ - AdaptiveL, Knn, Search, inline_filter_search::compute_adaptive_l, scratch::SearchScratch, -}; +use super::{AdaptiveL, Knn, Search, scratch::SearchScratch}; use crate::{ ANNResult, error::IntoANNResult, @@ -158,6 +174,10 @@ where let beam_width = search_params.beam_width().get(); let l_search = search_params.l_value().get(); + // Total distinct buckets in the dataset. When unknown, adaptive growth is + // disabled: the yield cannot be normalized, so `L` stays at its base value. + let num_buckets = provider.num_buckets(); + // Bucket-concentration sampling state. Sampling stops once L is (re)sized. let mut bucket_counts: HashMap = HashMap::new(); let mut sample_visited: usize = 0; @@ -210,16 +230,26 @@ where scratch.cmps += neighbors.len() as u32; scratch.hops += scratch.beam_nodes.len() as u32; - // Once enough nodes are sampled, estimate bucket-concentration yield and - // grow L. `matched` is the number of "useful" diverse slots observed: - // Σ_b min(count_b, k). A low yield => few distinct buckets => larger L. + // Once enough nodes are sampled, estimate the bucket-diversity yield + // and grow L from its deficit. `matched` is the number of "useful" + // diverse slots observed (Σ_b min(count_b, k)); dividing by the maximum + // achievable slots normalizes the yield to [0, 1]. A low yield => far + // from a full diverse set => larger L. if !l_adjusted && sample_visited >= adaptive_l.sample_count() { l_adjusted = true; - let matched = diverse_matched_slots(bucket_counts.values().copied(), diverse_results_k); - let new_l = - compute_adaptive_l(l_search, sample_visited, matched, adaptive_l.scale_factor()); - if new_l > l_search { - scratch.resize(new_l); + if let Some(num_buckets) = num_buckets { + let matched = + diverse_matched_slots(bucket_counts.values().copied(), diverse_results_k); + let diversity_yield = + diverse_yield(matched, num_buckets, diverse_results_k, sample_visited); + let new_l = compute_diverse_adaptive_l( + l_search, + diversity_yield, + adaptive_l.scale_factor(), + ); + if new_l > l_search { + scratch.resize(new_l); + } } } } @@ -235,10 +265,7 @@ where /// /// This is `Σ_b min(count_b, k)`: each distinct bucket contributes at most `k` /// slots, mirroring the per-bucket cap applied by the downstream bucket -/// selector. Feeding this as `matched` into [`compute_adaptive_l`] makes the -/// adaptive-L yield equal to the fraction of visited nodes that would survive -/// bucket selection — high yield (mostly distinct buckets) leaves `L` -/// unchanged, low yield (heavy bucket concentration) grows it. +/// selector. fn diverse_matched_slots(bucket_counts: I, diverse_results_k: usize) -> usize where I: IntoIterator, @@ -249,6 +276,61 @@ where .sum() } +/// Normalize observed diverse slots into a `[0, 1]` yield. +/// +/// `matched` is `Σ_b min(count_b, k)` (see [`diverse_matched_slots`]). Its tight +/// upper bound is `min(sample_visited, num_buckets · k)`: `matched` can never +/// exceed the number of nodes sampled, nor the total capped slots across every +/// bucket. Dividing by that bound couples the yield to all three quantities that +/// bound the achievable diversity — `diverse_results_k`, `num_buckets`, and the +/// sample size — so the yield spans the full `[0, 1]` range in both regimes: +/// +/// * few buckets, large sample (`num_buckets · k ≤ sample_visited`): the +/// denominator is `num_buckets · k`, so seeing every bucket up to its cap +/// reaches `1.0`. +/// * many buckets, small sample (`sample_visited < num_buckets · k`): the +/// denominator is `sample_visited`, so a fully distinct sample reaches `1.0` +/// and diffuse data keeps `L` unchanged (Design-A behavior). +/// +/// The result is clamped to `[0, 1]`; a zero denominator yields `1.0` (nothing +/// to diversify over, so no over-fetch is warranted). +fn diverse_yield( + matched: usize, + num_buckets: usize, + diverse_results_k: usize, + sample_visited: usize, +) -> f64 { + let achievable = num_buckets.saturating_mul(diverse_results_k).min(sample_visited); + if achievable == 0 { + return 1.0; + } + (matched as f64 / achievable as f64).clamp(0.0, 1.0) +} + +/// Compute adaptive L from the observed diversity yield. +/// +/// `L` is scaled linearly from the yield *deficit* `1 − yield`, so higher yields +/// (closer to a full diverse set) grow `L` less: +/// yield = 1.0 → 1× L (no change; the sample already covers the buckets) +/// yield = 0.5 → midway between 1× and `max_multiplier`× L +/// yield = 0.0 → `max_multiplier`× L (maximum expansion) +/// +/// This differs from inline-filter [`compute_adaptive_l`](super::inline_filter_search) +/// on purpose: filter specificity of `0.5` is already good, whereas a diversity +/// yield of `0.5` means only half of the achievable diversity has been seen and +/// warrants substantial further search. +/// +/// The multiplier is clamped to `[1, max_multiplier]`. +pub(crate) fn compute_diverse_adaptive_l( + base_l: usize, + diversity_yield: f64, + max_multiplier: f64, +) -> usize { + let deficit = (1.0 - diversity_yield).clamp(0.0, 1.0); + let multiplier = (1.0 + (max_multiplier - 1.0) * deficit).clamp(1.0, max_multiplier); + (base_l as f64 * multiplier) as usize +} + /////////// // Tests // /////////// @@ -285,34 +367,89 @@ mod tests { } #[test] - fn matched_slots_drives_adaptive_l_growth() { - // 100 visited nodes, k=1. High concentration (few distinct buckets) - // must grow L; full diversity (all distinct) must leave it unchanged. - let base_l = 100; - let max_multiplier = 8.0; + fn yield_is_normalized_to_unit_range() { + // 60 buckets, k=1, large sample (1000): denominator is num_buckets·k=60. + // Seeing all 60 distinct buckets is full diversity, independent of how + // many nodes were visited to get there. + let all_distinct = std::iter::repeat_n(1usize, 60); + let matched = diverse_matched_slots(all_distinct, 1); + assert_eq!(diverse_yield(matched, 60, 1, 1000), 1.0); + + // Half the buckets covered => yield 0.5. + let half = std::iter::repeat_n(1usize, 30); + let matched = diverse_matched_slots(half, 1); + assert_eq!(diverse_yield(matched, 60, 1, 1000), 0.5); - // 100 nodes across 100 distinct buckets => yield 1.0 => no growth. + // Everything in a single bucket => near-zero yield. + let one_bucket = std::iter::once(1000usize); + let matched = diverse_matched_slots(one_bucket, 1); + assert!((diverse_yield(matched, 60, 1, 1000) - 1.0 / 60.0).abs() < 1e-9); + } + + #[test] + fn yield_many_buckets_small_sample_reaches_one() { + // Diffuse dataset: far more buckets than the sample size. The + // denominator is capped at sample_visited, so a fully distinct sample + // yields 1.0 (no over-fetch) rather than being stuck near zero. let all_distinct = std::iter::repeat_n(1usize, 100); let matched = diverse_matched_slots(all_distinct, 1); + assert_eq!(diverse_yield(matched, 12_849, 1, 100), 1.0); + + // Same dataset, but the sample piles into a few buckets => low yield. + let concentrated = [40usize, 30, 30]; + let matched = diverse_matched_slots(concentrated, 1); + assert!((diverse_yield(matched, 12_849, 1, 100) - 3.0 / 100.0).abs() < 1e-9); + } + + #[test] + fn yield_caps_per_bucket_with_k() { + // k=2, 10 buckets, sample 20: denominator is num_buckets·k=20. One + // saturated bucket (>=2) plus one singleton contributes 2 + 1 = 3 + // useful slots => yield 3/20. + let counts = [5usize, 1]; + let matched = diverse_matched_slots(counts, 2); + assert_eq!(matched, 3); + assert!((diverse_yield(matched, 10, 2, 20) - 3.0 / 20.0).abs() < 1e-9); + } + + #[test] + fn yield_zero_buckets_is_full() { + // No buckets to diversify over => treat as fully satisfied, no growth. + assert_eq!(diverse_yield(0, 0, 1, 100), 1.0); + } + + #[test] + fn diverse_adaptive_l_scales_from_deficit() { + let base_l = 100; + let max_multiplier = 8.0; + + // Full diversity => no growth. assert_eq!( - compute_adaptive_l(base_l, 100, matched, max_multiplier), + compute_diverse_adaptive_l(base_l, 1.0, max_multiplier), base_l ); - // 100 nodes across 10 distinct buckets => yield 0.1 => 2x growth. - let ten_buckets = std::iter::repeat_n(10usize, 10); - let matched = diverse_matched_slots(ten_buckets, 1); + // Zero yield => maximum expansion. assert_eq!( - compute_adaptive_l(base_l, 100, matched, max_multiplier), - 2 * base_l + compute_diverse_adaptive_l(base_l, 0.0, max_multiplier), + base_l * 8 ); - // 100 nodes in a single bucket => yield 0.01 => 4x growth. - let one_bucket = std::iter::once(100usize); - let matched = diverse_matched_slots(one_bucket, 1); + // A yield of 0.5 is "bad" for diversity and must grow L a lot: halfway + // between 1x and 8x => 4.5x. + assert_eq!( + compute_diverse_adaptive_l(base_l, 0.5, max_multiplier), + (base_l as f64 * 4.5) as usize + ); + + // Out-of-range yields are clamped. + assert_eq!( + compute_diverse_adaptive_l(base_l, 1.5, max_multiplier), + base_l + ); assert_eq!( - compute_adaptive_l(base_l, 100, matched, max_multiplier), - 4 * base_l + compute_diverse_adaptive_l(base_l, -0.5, max_multiplier), + base_l * 8 ); } } diff --git a/diskann/src/neighbor/diverse_priority_queue.rs b/diskann/src/neighbor/diverse_priority_queue.rs index 93f355500..a3febe9d1 100644 --- a/diskann/src/neighbor/diverse_priority_queue.rs +++ b/diskann/src/neighbor/diverse_priority_queue.rs @@ -276,6 +276,18 @@ pub trait AttributeValueProvider: crate::provider::HasId + Send + Sync + std::fm /// # Returns /// * `Option` - The attribute value if it exists, None otherwise fn get(&self, id: Self::Id) -> Option; + + /// Total number of distinct attribute buckets across the dataset. + /// + /// Adaptive-L diverse search uses this to normalize the observed diversity + /// yield into `[0, 1]`: without it, the yield of a sample is bounded by + /// `num_buckets / sample_count` and can never approach `1.0` when the + /// dataset has few buckets. Providers that cannot report this cheaply + /// return `None`, which disables adaptive-L growth (`L` stays at its base + /// value). + fn num_buckets(&self) -> Option { + None + } } #[cfg(test)] From b531568d38282dfc303c197d13e370be01aa06aa Mon Sep 17 00:00:00 2001 From: Naren Datha Date: Fri, 17 Jul 2026 18:32:46 +0530 Subject: [PATCH 09/11] Rerun all diverse-search benchmarks and add chart scripts Rerun Design B across all four datasets after the yield-normalization fix. Recall improves on the concentrated, uncorrelated datasets (Enron, YFCC) and is unchanged on the diffuse dataset (Caselaw doc_id). On the correlated Caselaw jurisdiction attribute Design B now sits just below the queue at every L. Add reusable chart_data.json + plot_qps_vs_recall.py and regenerate the four PNGs. --- .../caselaw-jurisdiction-qps-vs-recall.png | Bin 49016 -> 39452 bytes .../diverse-search/caselaw-qps-vs-recall.png | Bin 48838 -> 39214 bytes assets/diverse-search/chart_data.json | 52 ++++++++++++++ assets/diverse-search/enron-qps-vs-recall.png | Bin 47970 -> 35780 bytes assets/diverse-search/plot_qps_vs_recall.py | 68 ++++++++++++++++++ assets/diverse-search/yfcc-qps-vs-recall.png | Bin 46090 -> 36621 bytes diverse-search-results.md | 63 ++++++++-------- 7 files changed, 152 insertions(+), 31 deletions(-) create mode 100644 assets/diverse-search/chart_data.json create mode 100644 assets/diverse-search/plot_qps_vs_recall.py diff --git a/assets/diverse-search/caselaw-jurisdiction-qps-vs-recall.png b/assets/diverse-search/caselaw-jurisdiction-qps-vs-recall.png index a027d0502c59d1334f42e24c5c63165411c00acf..d7fb4bae7ab6273d4a4eeae301ee07454c308152 100644 GIT binary patch literal 39452 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 diff --git a/assets/diverse-search/caselaw-qps-vs-recall.png b/assets/diverse-search/caselaw-qps-vs-recall.png index 867d6dac2c89fd3df7f28f1559dc05a3583fc651..39b9b271a6006a93814cb31e480d666dbc0dd898 100644 GIT binary patch literal 39214 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�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 I>b}qa0$wA-%>V!Z literal 47970 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 Z(|a6c63OP_N81qToW72Ub~z3o`ycpGFp>ZO diff --git a/assets/diverse-search/plot_qps_vs_recall.py b/assets/diverse-search/plot_qps_vs_recall.py new file mode 100644 index 000000000..0d7214617 --- /dev/null +++ b/assets/diverse-search/plot_qps_vs_recall.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 +"""Generate the QPS-vs-recall scatter charts for the diverse-search benchmark doc. + +Reads chart_data.json (recall/QPS at L=100 for each method and dataset) and +writes one PNG per dataset next to this script. Kept in the repo so the charts +can be regenerated whenever the benchmark numbers change. + +Usage: + python plot_qps_vs_recall.py + +Requires matplotlib (pip install matplotlib). +""" + +from __future__ import annotations + +import json +from pathlib import Path + +import matplotlib.pyplot as plt + +HERE = Path(__file__).resolve().parent +DATA_FILE = HERE / "chart_data.json" + + +def main() -> None: + data = json.loads(DATA_FILE.read_text(encoding="utf-8")) + methods = data["methods"] + colors = data["colors"] + + for chart in data["charts"]: + fig, ax = plt.subplots(figsize=(9, 6)) + + for method in methods: + point = chart["points"][method] + recall = point["recall"] + qps = point["qps"] + ax.scatter( + recall, + qps, + s=160, + color=colors[method], + label=method, + zorder=3, + ) + ax.annotate( + method, + (recall, qps), + textcoords="offset points", + xytext=(8, 8), + color=colors[method], + fontsize=10, + ) + + ax.set_title(f"{chart['title']}\nQPS vs recall at L=100") + ax.set_xlabel("Recall @10 (%) - higher is better") + ax.set_ylabel("QPS - higher is better") + ax.grid(True, color="0.9", zorder=0) + ax.legend(title="Approach", loc="lower left") + + out_path = HERE / chart["output"] + fig.tight_layout() + fig.savefig(out_path, dpi=100) + plt.close(fig) + print(f"wrote {out_path}") + + +if __name__ == "__main__": + main() diff --git a/assets/diverse-search/yfcc-qps-vs-recall.png b/assets/diverse-search/yfcc-qps-vs-recall.png index 482587f8d46662e7e65840e727cecbb587f5fe5a..f1ca05dd32e84a6b30434f944697b57e53b05e03 100644 GIT binary patch literal 36621 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�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 Xm)sl^_}R+zcW{D{zA2_$&pzTmHZcP# diff --git a/diverse-search-results.md b/diverse-search-results.md index c13786fbd..ab2d6b6c0 100644 --- a/diverse-search-results.md +++ b/diverse-search-results.md @@ -65,10 +65,10 @@ the attribute is *both* concentrated and strongly correlated with distance. | L | Standard recall | Queue recall | Design A recall | Design B recall | Std QPS | Queue QPS | A QPS | B QPS | |---|---|---|---|---|---|---|---|---| -| 20 | 55.71 | 61.11 | 59.98 | **73.38** | 375.5 | 261 | 542.9 | 385.6 | -| 40 | 64.28 | 71.08 | 73.93 | **83.55** | 245.3 | 221 | 268.0 | 183.2 | -| 80 | 69.67 | 76.46 | 84.00 | **89.79** | 173.2 | 116 | 165.6 | 107.2 | -| 100 | 70.72 | 77.92 | 86.05 | **91.00** | 142.6 | 100 | 159.2 | 53 | +| 20 | 55.71 | 61.11 | 59.98 | **79.92** | 375.5 | 261 | 542.9 | 385.6 | +| 40 | 64.28 | 71.08 | 73.93 | **87.38** | 245.3 | 221 | 268.0 | 183.2 | +| 80 | 69.67 | 76.46 | 84.00 | **92.12** | 173.2 | 116 | 165.6 | 107.2 | +| 100 | 70.72 | 77.92 | 86.05 | **93.01** | 142.6 | 100 | 159.2 | 53 | **QPS vs recall @ L=100** (up and to the right is better) @@ -78,14 +78,14 @@ the attribute is *both* concentrated and strongly correlated with distance. - Standard search is far below every diversity-aware method (it does not enforce the one-per-bucket constraint), confirming the diverse GT is meaningfully different from ordinary top-k. -- **Design B wins recall at every L** (+13 over queue at L=20), because the +- **Design B wins recall at every L** (+19 over queue at L=20), because the attribute is concentrated: the adaptive sampler detects this and over-fetches a larger pool before reranking. - Design A beats the queue on both recall and QPS at every L. - Design B carries a throughput cost (extra pool fetch + more IO), but delivers - the highest recall. At L=100 its IO count (214) is nearly double Design A's - (120), so its lower QPS there is real, not measurement noise. -- Pareto note: Design B @ L=20 (73.4 recall) beats Design A @ L=40 (73.9 recall) + the highest recall. At L=100 its IO count (320) is well over double Design A's + (112), so its lower QPS there is real, not measurement noise. +- Pareto note: Design B @ L=20 (79.9 recall) beats Design A @ L=40 (73.9 recall) at comparable throughput. --- @@ -130,10 +130,10 @@ forces the search to reach far past the plain top-L pool. | L | Standard recall | Queue recall | Design A recall | Design B recall | Std QPS | Queue QPS | A QPS | B QPS | |---|---|---|---|---|---|---|---|---| -| 20 | 34.74 | 71.35 | 46.30 | 59.24 | 387.9 | 434.9 | 413.5 | 317.1 | -| 40 | 35.37 | 76.19 | 59.68 | 69.58 | 394.3 | 278.7 | 303.8 | 203.3 | -| 80 | 35.79 | 78.72 | 69.74 | 77.62 | 212.2 | 176.4 | 211.1 | 114.2 | -| 100 | 35.91 | 79.12 | 72.59 | **79.92** | 165.6 | 152.1 | 174.5 | 96.0 | +| 20 | 34.74 | 71.35 | 46.30 | 57.30 | 387.9 | 434.9 | 413.5 | 317.1 | +| 40 | 35.37 | 76.19 | 59.68 | 68.23 | 394.3 | 278.7 | 303.8 | 203.3 | +| 80 | 35.79 | 78.72 | 69.74 | 76.62 | 212.2 | 176.4 | 211.1 | 114.2 | +| 100 | 35.91 | 79.12 | 72.59 | 78.97 | 165.6 | 152.1 | 174.5 | 96.0 | **QPS vs recall @ L=100** (up and to the right is better) @@ -146,17 +146,18 @@ forces the search to reach far past the plain top-L pool. jurisdictions, so no amount of exact-distance reranking can recover the missing buckets. The queue enforces diversity *during* traversal, steering the walk out of the dominant cluster early — exactly what post-processing cannot do. -- **Design B recovers most of the gap** via adaptive over-fetch (59.2 vs A's 46.3 - at L=20) and finally edges past the queue on recall at L=100 (79.9 vs 79.1) — but - only by fetching a much larger pool (IO 210 vs queue's 114), so its QPS is the - lowest of all methods there. On the QPS-vs-recall plot the queue **dominates - Design B** (same recall, ~1.6× the throughput). +- **Design B recovers most of the gap** via adaptive over-fetch (57.3 vs A's 46.3 + at L=20) but stays just below the queue at every L, including L=100 (79.0 vs + 79.1) — and only closes this much by fetching a larger pool (IO 193 vs queue's + 114), so its QPS is the lowest of all methods there. On the QPS-vs-recall plot + the queue **dominates Design B** (equal-or-better recall at ~1.6× the + throughput). - Standard search collapses to ~35% and never improves with L — with buckets both concentrated and distance-correlated, the ordinary top-k is almost entirely the wrong jurisdictions. - Takeaway: **for a distance-correlated attribute, in-traversal diversity (queue) is the efficient choice; post-processing (Design A/B) must over-fetch heavily to - compete, and even then only matches — never beats — the queue on the + compete, and even then only approaches — never beats — the queue on the recall/QPS frontier.** This is the opposite of the uncorrelated concentrated case (YFCC) where Design B is the clear winner. @@ -171,10 +172,10 @@ concentrated regime (like Enron). | L | Standard recall | Queue recall | Design A recall | Design B recall | Std QPS | Queue QPS | A QPS | B QPS | |---|---|---|---|---|---|---|---|---| -| 20 | 49.35 | 79.26 | 66.92 | **83.55** | 347.0 | 592.6 | 499.4 | 442.6 | -| 40 | 49.60 | 81.23 | 83.54 | **92.52** | 499.7 | 397.3 | 441.5 | 261.8 | -| 80 | 49.72 | 81.60 | 92.38 | **95.44** | 256.5 | 240.2 | 248.3 | 140.6 | -| 100 | 49.73 | 81.78 | 93.98 | **96.33** | 227.1 | 186.1 | 192.6 | 111.9 | +| 20 | 49.35 | 79.26 | 66.92 | **88.44** | 347.0 | 592.6 | 499.4 | 442.6 | +| 40 | 49.60 | 81.23 | 83.54 | **94.20** | 499.7 | 397.3 | 441.5 | 261.8 | +| 80 | 49.72 | 81.60 | 92.38 | **96.45** | 256.5 | 240.2 | 248.3 | 140.6 | +| 100 | 49.73 | 81.78 | 93.98 | **96.92** | 227.1 | 186.1 | 192.6 | 111.9 | **QPS vs recall @ L=100** (up and to the right is better) @@ -184,14 +185,14 @@ concentrated regime (like Enron). - Standard search is stuck at ~49.5 recall for every L — with a third of the corpus in one camera bucket, ordinary top-k returns many same-bucket neighbors that the diverse GT rejects. Growing L does not help it at all. -- **Design B wins recall at every L** (+4 to +11 over the queue), because the +- **Design B wins recall at every L** (+9 to +15 over the queue), because the adaptive sampler detects the concentration and over-fetches before reranking. - **The queue method plateaus at ~81%** — its approximate (PQ) in-traversal diversity saturates and extra L barely helps. Design A overtakes it from L=40 onward and reaches 94% at L=100; Design B is ahead of the queue at every L. -- Design B's higher recall again costs throughput (its IO roughly doubles by - L=100: 217 vs Design A's 111), so its lower QPS is real work, not noise. -- Pareto note: Design B @ L=20 (83.6 recall) already beats Design A @ L=40 +- Design B's higher recall again costs throughput (its IO roughly triples by + L=100: 286 vs Design A's 112), so its lower QPS is real work, not noise. +- Pareto note: Design B @ L=20 (88.4 recall) already beats Design A @ L=40 (83.5) and the queue at any L, at competitive throughput. --- @@ -202,9 +203,9 @@ The datasets exercise the two axes that govern diverse search — bucket **concentration** and attribute/distance **correlation**: - **Concentrated, ~uncorrelated attribute (Enron, YFCC):** big win for Design B — - adaptive over-fetch recovers substantial recall (+13 over queue on Enron at - L=20; +11 on YFCC at L=40) at a throughput cost. On YFCC the queue method - plateaus near 81% while Design B climbs to 96%. + adaptive over-fetch recovers substantial recall (+19 over queue on Enron at + L=20; +13 on YFCC at L=40) at a throughput cost. On YFCC the queue method + plateaus near 81% while Design B climbs to 97%. - **Diffuse attribute (Caselaw `doc_id`):** the sampler detects abundant diversity and Design B performs no over-fetch — it matches Design A on recall and IO (its only cost is the sampling walk), and both slightly beat the queue method. @@ -213,8 +214,8 @@ The datasets exercise the two axes that govern diverse search — bucket top-L pool is saturated with the dominant buckets, so post-processing (Design A) falls far behind the queue (46 vs 71 recall at L=20). The queue enforces diversity during traversal and is the efficient choice; Design B claws back most of the gap - via heavy over-fetch and ties the queue on recall at L=100, but at ~1.6× the IO, - so the queue dominates it on the recall/QPS frontier. + via heavy over-fetch but stays just below the queue on recall (79.0 vs 79.1 at + L=100) at ~1.6× the IO, so the queue dominates it on the recall/QPS frontier. Recommendation: the best strategy depends on the attribute. For **concentrated, distance-uncorrelated** attributes, **Design B** wins (adaptive over-fetch, no From 029789049b8069e61462ac5c82910ab3b8621adb Mon Sep 17 00:00:00 2001 From: Naren Datha Date: Fri, 17 Jul 2026 18:42:12 +0530 Subject: [PATCH 10/11] Fall back to sample-size yield denominator when num_buckets is unavailable When AttributeValueProvider::num_buckets returns None, diverse_yield now normalizes by sample_visited alone instead of skipping adaptive growth. This restores the pre-normalization heuristic for that path: L still grows on concentrated samples (never worse than fixed-L Design A) rather than collapsing to Design A. --- .../graph/search/diverse_adaptive_search.rs | 80 ++++++++++++------- 1 file changed, 53 insertions(+), 27 deletions(-) diff --git a/diskann/src/graph/search/diverse_adaptive_search.rs b/diskann/src/graph/search/diverse_adaptive_search.rs index c57ac740e..1b4bad3f1 100644 --- a/diskann/src/graph/search/diverse_adaptive_search.rs +++ b/diskann/src/graph/search/diverse_adaptive_search.rs @@ -47,9 +47,11 @@ //! `0.5` means only ~50% of the achievable diversity has been observed so far, //! so `L` should still grow substantially. `L` is therefore scaled from the //! *deficit* `1 − yield`: a yield near `1.0` leaves `L` unchanged, while a low -//! yield grows it toward the configured maximum multiplier. If the provider -//! cannot report `num_buckets`, adaptive growth is skipped and `L` stays at its -//! base value. +//! yield grows it toward the configured maximum multiplier. When the provider +//! cannot report `num_buckets`, the denominator falls back to `sample_visited` +//! alone: `L` still grows on concentrated samples (never worse than the +//! fixed-`L` Design A), though without the bucket total it may over-fetch on +//! few-bucket datasets. use std::sync::Arc; @@ -174,8 +176,10 @@ where let beam_width = search_params.beam_width().get(); let l_search = search_params.l_value().get(); - // Total distinct buckets in the dataset. When unknown, adaptive growth is - // disabled: the yield cannot be normalized, so `L` stays at its base value. + // Total distinct buckets in the dataset, when the provider can report it. + // When unknown, the yield normalizes by the sample size alone (the + // pre-normalization heuristic): still over-fetches on concentrated samples, + // but may grow `L` more than necessary on few-bucket datasets. let num_buckets = provider.num_buckets(); // Bucket-concentration sampling state. Sampling stops once L is (re)sized. @@ -237,19 +241,14 @@ where // from a full diverse set => larger L. if !l_adjusted && sample_visited >= adaptive_l.sample_count() { l_adjusted = true; - if let Some(num_buckets) = num_buckets { - let matched = - diverse_matched_slots(bucket_counts.values().copied(), diverse_results_k); - let diversity_yield = - diverse_yield(matched, num_buckets, diverse_results_k, sample_visited); - let new_l = compute_diverse_adaptive_l( - l_search, - diversity_yield, - adaptive_l.scale_factor(), - ); - if new_l > l_search { - scratch.resize(new_l); - } + let matched = + diverse_matched_slots(bucket_counts.values().copied(), diverse_results_k); + let diversity_yield = + diverse_yield(matched, num_buckets, diverse_results_k, sample_visited); + let new_l = + compute_diverse_adaptive_l(l_search, diversity_yield, adaptive_l.scale_factor()); + if new_l > l_search { + scratch.resize(new_l); } } } @@ -292,15 +291,25 @@ where /// denominator is `sample_visited`, so a fully distinct sample reaches `1.0` /// and diffuse data keeps `L` unchanged (Design-A behavior). /// +/// When `num_buckets` is `None` the denominator falls back to `sample_visited`: +/// the sample itself is the only available signal, so a concentrated sample +/// still grows `L` while a fully distinct one leaves it unchanged. This may +/// over-grow `L` on few-bucket datasets (the sample can look concentrated even +/// after every bucket has been seen), but never under-fetches relative to the +/// fixed-`L` Design-A baseline. +/// /// The result is clamped to `[0, 1]`; a zero denominator yields `1.0` (nothing /// to diversify over, so no over-fetch is warranted). fn diverse_yield( matched: usize, - num_buckets: usize, + num_buckets: Option, diverse_results_k: usize, sample_visited: usize, ) -> f64 { - let achievable = num_buckets.saturating_mul(diverse_results_k).min(sample_visited); + let achievable = match num_buckets { + Some(n) => n.saturating_mul(diverse_results_k).min(sample_visited), + None => sample_visited, + }; if achievable == 0 { return 1.0; } @@ -373,17 +382,17 @@ mod tests { // many nodes were visited to get there. let all_distinct = std::iter::repeat_n(1usize, 60); let matched = diverse_matched_slots(all_distinct, 1); - assert_eq!(diverse_yield(matched, 60, 1, 1000), 1.0); + assert_eq!(diverse_yield(matched, Some(60), 1, 1000), 1.0); // Half the buckets covered => yield 0.5. let half = std::iter::repeat_n(1usize, 30); let matched = diverse_matched_slots(half, 1); - assert_eq!(diverse_yield(matched, 60, 1, 1000), 0.5); + assert_eq!(diverse_yield(matched, Some(60), 1, 1000), 0.5); // Everything in a single bucket => near-zero yield. let one_bucket = std::iter::once(1000usize); let matched = diverse_matched_slots(one_bucket, 1); - assert!((diverse_yield(matched, 60, 1, 1000) - 1.0 / 60.0).abs() < 1e-9); + assert!((diverse_yield(matched, Some(60), 1, 1000) - 1.0 / 60.0).abs() < 1e-9); } #[test] @@ -393,12 +402,12 @@ mod tests { // yields 1.0 (no over-fetch) rather than being stuck near zero. let all_distinct = std::iter::repeat_n(1usize, 100); let matched = diverse_matched_slots(all_distinct, 1); - assert_eq!(diverse_yield(matched, 12_849, 1, 100), 1.0); + assert_eq!(diverse_yield(matched, Some(12_849), 1, 100), 1.0); // Same dataset, but the sample piles into a few buckets => low yield. let concentrated = [40usize, 30, 30]; let matched = diverse_matched_slots(concentrated, 1); - assert!((diverse_yield(matched, 12_849, 1, 100) - 3.0 / 100.0).abs() < 1e-9); + assert!((diverse_yield(matched, Some(12_849), 1, 100) - 3.0 / 100.0).abs() < 1e-9); } #[test] @@ -409,13 +418,30 @@ mod tests { let counts = [5usize, 1]; let matched = diverse_matched_slots(counts, 2); assert_eq!(matched, 3); - assert!((diverse_yield(matched, 10, 2, 20) - 3.0 / 20.0).abs() < 1e-9); + assert!((diverse_yield(matched, Some(10), 2, 20) - 3.0 / 20.0).abs() < 1e-9); } #[test] fn yield_zero_buckets_is_full() { // No buckets to diversify over => treat as fully satisfied, no growth. - assert_eq!(diverse_yield(0, 0, 1, 100), 1.0); + assert_eq!(diverse_yield(0, Some(0), 1, 100), 1.0); + } + + #[test] + fn yield_unknown_buckets_uses_sample_size() { + // Provider cannot report num_buckets: denominator is sample_visited, so + // the yield reduces to the fraction of the sample that is useful + // (the pre-normalization heuristic). + // Fully distinct sample => yield 1.0, no growth. + let all_distinct = std::iter::repeat_n(1usize, 100); + let matched = diverse_matched_slots(all_distinct, 1); + assert_eq!(diverse_yield(matched, None, 1, 100), 1.0); + + // Concentrated sample => low yield => grow L, matching the old behavior + // even though num_buckets is unavailable. + let concentrated = [40usize, 30, 30]; + let matched = diverse_matched_slots(concentrated, 1); + assert!((diverse_yield(matched, None, 1, 100) - 3.0 / 100.0).abs() < 1e-9); } #[test] From fd7e393f068fe81d547ea10a8cad3a7eee28ae95 Mon Sep 17 00:00:00 2001 From: Naren Datha Date: Fri, 17 Jul 2026 22:09:22 +0530 Subject: [PATCH 11/11] Add experimental yield_k knob to Design B attribute diversity search Decouples the adaptive-L yield sampler's per-bucket cap (yield_k) from the output cap (diverse_results_k). Setting yield_k > diverse_results_k requires seeing several points per bucket before yield saturates, keeping L growing on distance-correlated attributes. yield_k defaults to the effective diverse_results_k, so existing configs are unchanged. --- diskann-benchmark/src/disk_index/search.rs | 15 +++++- diskann-benchmark/src/inputs/graph_index.rs | 6 +++ .../src/search/provider/disk_provider.rs | 3 +- diskann-disk/src/search/search_mode.rs | 8 +++ .../graph/search/diverse_adaptive_search.rs | 49 ++++++++++++------- 5 files changed, 62 insertions(+), 19 deletions(-) diff --git a/diskann-benchmark/src/disk_index/search.rs b/diskann-benchmark/src/disk_index/search.rs index b5a2de43a..d45b199a4 100644 --- a/diskann-benchmark/src/disk_index/search.rs +++ b/diskann-benchmark/src/disk_index/search.rs @@ -246,12 +246,24 @@ where }; let diverse_results_k = search_params.diverse_results_k; let diverse_attribute_id = search_params.diverse_attribute_id; + // Effective output cap (per-bucket cap on the final result set). + let effective_diverse_results_k = + diverse_results_k.unwrap_or(search_params.recall_at as usize); // Design B: when the diverse path is active and `adaptive_l` is configured, // grow `L` per query from the observed bucket concentration. let diverse_adaptive_l = search_params.search_mode.adaptive_l.as_ref().map(|a| { diskann::graph::search::AdaptiveL::new(a.sample_count.into(), a.scale_factor) .expect("validated adaptive L must construct") }); + // Per-bucket cap for the yield sampler; defaults to the output cap when the + // config does not override it. + let diverse_yield_k = search_params + .search_mode + .adaptive_l + .as_ref() + .and_then(|a| a.yield_k) + .map(usize::from) + .unwrap_or(effective_diverse_results_k); let pool = create_thread_pool(search_params.num_threads)?; let mut search_results_per_l = Vec::with_capacity(search_params.search_list.len()); @@ -292,7 +304,8 @@ where Some(provider) => SearchMode::diverse_attribute( provider.clone(), diverse_attribute_id, - diverse_results_k.unwrap_or(search_params.recall_at as usize), + effective_diverse_results_k, + diverse_yield_k, diverse_adaptive_l.clone(), ), None => { diff --git a/diskann-benchmark/src/inputs/graph_index.rs b/diskann-benchmark/src/inputs/graph_index.rs index 2137c6e57..873f74873 100644 --- a/diskann-benchmark/src/inputs/graph_index.rs +++ b/diskann-benchmark/src/inputs/graph_index.rs @@ -248,6 +248,12 @@ impl MultihopFilterSearchPhase { pub(crate) struct AdaptiveL { pub(crate) sample_count: NonZeroUsize, pub(crate) scale_factor: f64, + /// Per-bucket cap used by the Design-B diversity sampler when estimating + /// yield. Decoupled from `diverse_results_k` (the output cap); when unset it + /// defaults to the effective `diverse_results_k`. Only used by attribute + /// diversity search. + #[serde(default)] + pub(crate) yield_k: Option, } impl AdaptiveL { diff --git a/diskann-disk/src/search/provider/disk_provider.rs b/diskann-disk/src/search/provider/disk_provider.rs index 6b56dde42..34f87d0bb 100644 --- a/diskann-disk/src/search/provider/disk_provider.rs +++ b/diskann-disk/src/search/provider/disk_provider.rs @@ -1308,6 +1308,7 @@ where provider, diverse_attribute_id: _, diverse_results_k, + yield_k, adaptive_l, } => { // Attribute-bucket diversity: a greedy search collects the @@ -1332,7 +1333,7 @@ where let search = DiverseAdaptiveSearch::new( knn_search, provider.clone(), - *diverse_results_k, + *yield_k, adaptive_l.clone(), ); self.runtime.block_on(self.index.search_with( diff --git a/diskann-disk/src/search/search_mode.rs b/diskann-disk/src/search/search_mode.rs index 68933d472..bdb9f1c41 100644 --- a/diskann-disk/src/search/search_mode.rs +++ b/diskann-disk/src/search/search_mode.rs @@ -73,6 +73,7 @@ pub enum SearchMode<'a> { provider: Arc, diverse_attribute_id: usize, diverse_results_k: usize, + yield_k: usize, adaptive_l: Option, }, } @@ -170,16 +171,23 @@ impl<'a> SearchMode<'a> { /// /// `adaptive_l = Some(_)` grows `L` mid-search from the observed bucket /// concentration (Design B); `None` uses a fixed `L` (Design A). + /// + /// `yield_k` is the per-bucket cap used by the Design-B sampler when + /// estimating diversity yield; it is decoupled from `diverse_results_k` (the + /// output cap) so that a larger `yield_k` keeps `L` growing on + /// distance-correlated attributes. pub fn diverse_attribute( provider: Arc, diverse_attribute_id: usize, diverse_results_k: usize, + yield_k: usize, adaptive_l: Option, ) -> Self { Self::DiverseAttribute { provider, diverse_attribute_id, diverse_results_k, + yield_k, adaptive_l, } } diff --git a/diskann/src/graph/search/diverse_adaptive_search.rs b/diskann/src/graph/search/diverse_adaptive_search.rs index 1b4bad3f1..af0075a57 100644 --- a/diskann/src/graph/search/diverse_adaptive_search.rs +++ b/diskann/src/graph/search/diverse_adaptive_search.rs @@ -29,7 +29,7 @@ //! ``` //! //! where `count_b` is the number of sampled nodes in bucket `b`, `k` is -//! `diverse_results_k` (the per-bucket cap applied downstream), `num_buckets` +//! `yield_k` (the per-bucket cap used for *this* sampling estimate), `num_buckets` //! is the total number of distinct attribute buckets in the dataset (reported //! by [`AttributeValueProvider::num_buckets`]), and `sample_visited` is the //! number of nodes sampled. The denominator is the tight upper bound on the @@ -42,7 +42,16 @@ //! * many buckets, small sample → denominator is `sample_visited`, so a fully //! distinct sample reaches `1.0` and diffuse data leaves `L` unchanged. //! +//! `yield_k` is decoupled from the downstream `diverse_results_k` (the per-bucket +//! cap on the *final* result set). Setting `yield_k > diverse_results_k` requires +//! the sample to see several points per bucket before the yield saturates, which +//! keeps `L` growing on distance-correlated attributes — there the first point in +//! each bucket is often far from the query, so a low output `k` would otherwise +//! declare the buckets "covered" before the closer attribute-satisfying points +//! are reached. +//! //! Unlike inline-filter specificity — where a value of `0.5` over a large + //! sample is already good enough to stop enlarging `L` — a diversity yield of //! `0.5` means only ~50% of the achievable diversity has been observed so far, //! so `L` should still grow substantially. `L` is therefore scaled from the @@ -83,7 +92,7 @@ where { inner: Knn, provider: Arc

, - diverse_results_k: usize, + yield_k: usize, adaptive_l: AdaptiveL, } @@ -92,16 +101,23 @@ where P: AttributeValueProvider + ?Sized, { /// Create new adaptive diverse search parameters. + /// + /// `yield_k` is the per-bucket cap used when estimating the diversity + /// *yield* during traversal. It is deliberately decoupled from the + /// downstream `diverse_results_k` (the per-bucket cap on the final result + /// set): requiring the sample to see several points per bucket before the + /// yield saturates keeps `L` growing on distance-correlated attributes, + /// where the first point in each bucket is often far from the query. pub fn new( inner: Knn, provider: Arc

, - diverse_results_k: usize, + yield_k: usize, adaptive_l: AdaptiveL, ) -> Self { Self { inner, provider, - diverse_results_k, + yield_k, adaptive_l, } } @@ -142,7 +158,7 @@ where index.max_degree_with_slack(), &self.inner, self.provider.as_ref(), - self.diverse_results_k, + self.yield_k, &self.adaptive_l, &mut accessor, &mut scratch, @@ -163,7 +179,7 @@ async fn diverse_adaptive_search_internal( max_degree_with_slack: usize, search_params: &Knn, provider: &P, - diverse_results_k: usize, + yield_k: usize, adaptive_l: &AdaptiveL, accessor: &mut A, scratch: &mut SearchScratch, @@ -241,10 +257,8 @@ where // from a full diverse set => larger L. if !l_adjusted && sample_visited >= adaptive_l.sample_count() { l_adjusted = true; - let matched = - diverse_matched_slots(bucket_counts.values().copied(), diverse_results_k); - let diversity_yield = - diverse_yield(matched, num_buckets, diverse_results_k, sample_visited); + let matched = diverse_matched_slots(bucket_counts.values().copied(), yield_k); + let diversity_yield = diverse_yield(matched, num_buckets, yield_k, sample_visited); let new_l = compute_diverse_adaptive_l(l_search, diversity_yield, adaptive_l.scale_factor()); if new_l > l_search { @@ -263,15 +277,16 @@ where /// Count the "useful" diverse slots observed in a bucket-count sample. /// /// This is `Σ_b min(count_b, k)`: each distinct bucket contributes at most `k` -/// slots, mirroring the per-bucket cap applied by the downstream bucket -/// selector. -fn diverse_matched_slots(bucket_counts: I, diverse_results_k: usize) -> usize +/// (`yield_k`) slots. `yield_k` is the sampling cap, which may exceed the +/// downstream per-bucket result cap so that concentrated buckets keep counting +/// toward the deficit. +fn diverse_matched_slots(bucket_counts: I, yield_k: usize) -> usize where I: IntoIterator, { bucket_counts .into_iter() - .map(|count| count.min(diverse_results_k)) + .map(|count| count.min(yield_k)) .sum() } @@ -281,7 +296,7 @@ where /// upper bound is `min(sample_visited, num_buckets · k)`: `matched` can never /// exceed the number of nodes sampled, nor the total capped slots across every /// bucket. Dividing by that bound couples the yield to all three quantities that -/// bound the achievable diversity — `diverse_results_k`, `num_buckets`, and the +/// bound the achievable diversity — `yield_k`, `num_buckets`, and the /// sample size — so the yield spans the full `[0, 1]` range in both regimes: /// /// * few buckets, large sample (`num_buckets · k ≤ sample_visited`): the @@ -303,11 +318,11 @@ where fn diverse_yield( matched: usize, num_buckets: Option, - diverse_results_k: usize, + yield_k: usize, sample_visited: usize, ) -> f64 { let achievable = match num_buckets { - Some(n) => n.saturating_mul(diverse_results_k).min(sample_visited), + Some(n) => n.saturating_mul(yield_k).min(sample_visited), None => sample_visited, }; if achievable == 0 {