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 parameters:
| Parameter | What it controls |
|---|---|
eps |
Neighbourhood radius for graph edges |
k |
Number of nearest neighbours per node |
tau |
Search temperature (query-time, tuned automatically) |
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
from arrowspace_tuner import ArrowSpaceBuilder
embeddings = np.load("corpus.npy") # shape (N, D) float64
# One-liner: auto-discover eps, k, tau — runs in ~15 min on 50k corpus
graph_params = arrowspace.tune(embeddings)
aspace, gl = ArrowSpaceBuilder().build(graph_params, embeddings)
# Search as normal
results = aspace.search(query_embedding, gl, tau=0.8)
[!WARNING] Upgrading from v0.3.x?
optuna()is deprecated — usetune().load_best_params()is deprecated — useload_graph_params().EpsTuner.fit()now returnsdict(graph_params), not(aspace, gl).
Power-user API
from arrowspace_tuner import EpsTuner, ArrowSpaceBuilder
tuner = EpsTuner(
n_trials = 15,
sample_n = 50_000,
eps_low = 0.8,
eps_high = 10,
k_low = 15,
k_high = 40,
n_probe = 50,
storage = "sqlite:///tune.db", # resume interrupted runs
)
graph_params = tuner.fit(embeddings)
aspace, gl = ArrowSpaceBuilder().build(graph_params, embeddings)
print(tuner.best_params) # {"eps": 1.615, "k": 38, "top_k": 19, "p": ..., "sigma": ...}
print(tuner.best_tau) # 0.114 — query-time only, not in best_params
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
# Access graph params without file I/O
print(tuner.graph_params) # same as best_params, raises RuntimeError before .fit()
# Save CSV + HTML plots (requires [report] extra)
tuner.save_report(out_dir="results")
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.4.0
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.4.0.tar.gz | 343.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| arrowspace_tuner-0.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 369.0 kB
Release files / arrowspace_tuner-0.4.0.tar.gz
| Download URL | arrowspace_tuner-0.4.0.tar.gz |
|---|---|
| Size | 343.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f4dcafcfb29ef250b10fdeffffa73f89f4324d71d4d19ddc4f31eea38b49b8a2
|
|
BLAKE2b-256 checksum How to use checksums |
2c6f96c843ce34310932372874afd643fd5c473b1f80676553e89e89d4fb4e89
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.12 {"installer":{"name":"uv","version":"0.11.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"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.4.0-py3-none-any.whl
| Download URL | arrowspace_tuner-0.4.0-py3-none-any.whl |
|---|---|
| Size | 25.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8dbf80dc208c8d2aa5da4c60c3cf77e7525506d7706e578d33afe616451b883f
|
|
BLAKE2b-256 checksum How to use checksums |
baeace17e6d8f07a37332d5b9f71ebff2efa12d753cadcab70e5fa2d973a050e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.12 {"installer":{"name":"uv","version":"0.11.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|