arrowspace_tuner
Hyperparameter discovery for ArrowSpace — automatically finds the best eps, k, and tau for your corpus using a query-free spectral objective.
Why
ArrowSpace's retrieval quality depends on three graph-construction parameters:
| Parameter | What it controls |
|---|---|
eps |
Neighbourhood radius for graph edges |
k |
Number of nearest neighbours per node |
tau |
Search temperature (exploration vs. exploitation) |
Setting these by hand is tedious and corpus-dependent. arrowspace_tuner uses Optuna and a label-free spectral MRR proxy to find them automatically in minutes.
Install
# Core (no pandas/plotly)
pip install arrowspace-tuner
# With HTML/CSV reporting
pip install arrowspace-tuner[report]
Quickstart
import numpy as np
import arrowspace_tuner as arrowspace
embeddings = np.load("corpus.npy") # shape (N, D) float64
# One-liner: auto-discover eps, k, tau — runs in ~15 min on 50k corpus
aspace, gl = arrowspace.optuna(embeddings)
# Search as normal
results = aspace.search(query_embedding, gl, tau=0.8)
Power-user API
from arrowspace_tuner import EpsTuner
tuner = EpsTuner(
n_trials = 15,
sample_n = 5_000, # 33x faster: explore on 5k, final build on full corpus
eps_low = 0.8, # narrow bounds if you know your corpus geometry
eps_high = 2.5,
k_low = 15,
k_high = 40,
tau_low = 0.05,
tau_high = 0.5,
n_probe = 50,
storage = "sqlite:///tune.db", # resume interrupted runs
)
aspace, gl = tuner.fit(embeddings)
print(tuner.best_params) # {"eps": 1.615, "k": 38, "tau": 0.114}
print(tuner.best_score) # 2.138
print(tuner.best_fiedler) # 0.718 — graph connectivity health
print(tuner.best_mrr_proxy) # 2.896 — retrieval coherence proxy
# Save CSV + HTML plots (requires [report] extra)
tuner.save_report(out_dir="results")
Speed
The dominant cost is building the ArrowSpace graph on N vectors. With sample_n:
| Setting | Per trial | 15 trials | Notes |
|---|---|---|---|
| sample_n = 50k | ~23 min | ~5.8h | baseline |
sample_n=5_000 |
~1.5 min | ~27 min | 33x faster, same best params |
The final build after the study always uses the full corpus.
Objective
The objective is a weighted composite of three spectral signals — no ground-truth labels required:
score = 0.70 * mrr_top0_spectral # retrieval coherence
+ 0.20 * log1p(fiedler) # graph connectivity health
+ 0.10 * log1p(var_lambda) # spectral richness
Parallel runs
Optuna + SQLite lets you run multiple workers simultaneously:
# Terminal 1
python -m arrowspace_tuner --storage sqlite:///tune.db --trials 15
# Terminal 2 (simultaneously)
python -m arrowspace_tuner --storage sqlite:///tune.db --trials 15
Requirements
- Python ≥ 3.12
arrowspace >= 0.26.0optuna >= 4.8.0scipy >= 1.17.1numpy >= 2.4.4
License
Apache-2.0 — see LICENSE.
Metadata
Release files for arrowspace-tuner 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| arrowspace_tuner-0.2.1.tar.gz | 218.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| arrowspace_tuner-0.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 241.5 kB
Release files / arrowspace_tuner-0.2.1.tar.gz
| Download URL | arrowspace_tuner-0.2.1.tar.gz |
|---|---|
| Size | 218.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e2fb2cbc43c853c3b8a6acd671be8f6f7472873ee175fb7dd720b9726e7bb24a
|
|
BLAKE2b-256 checksum How to use checksums |
f1e207063c0335a44a17eec2e6ce7e6aa66f4a90793537a91abaeecec56b25de
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / arrowspace_tuner-0.2.1-py3-none-any.whl
| Download URL | arrowspace_tuner-0.2.1-py3-none-any.whl |
|---|---|
| Size | 23.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
fb575133af0244bc42cb573f8c69ae6135c06c3a138891b3f5d42e1fadc2fe6d
|
|
BLAKE2b-256 checksum How to use checksums |
951bbbfc5ee12dd4edcd65f580e0bfcb834ed6fdbb2e9376966e53fe9241e58d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|