箭头空间
arrowspace
ArrowSpace
一种谱向量搜索技术,通过图拉普拉斯特征增强最近邻搜索。它在项目图上计算拉普拉斯矩阵,并利用瑞利商(Rayleigh quotient)为每个项目生成 $\lambda\tau$ (lambda-tau) 分数,从而实现兼顾语义相似度和结构角色的搜索。
何时使用此技能
- 余弦或 L2 相似度无法捕捉嵌入向量中的潜在结构时
- 需要具有谱感知能力的基于图的检索时
- 需要表征嵌入空间的谱属性时
- 构建 RAG 流水线且上下文角色与语义内容同等重要时
工作原理
第一步:安装与导入
bash
pip install arrowspacepython
from arrowspace import ArrowSpaceBuilder
import numpy as np第二步:准备数据
传入一个形状为 $(N, d)$ 的 float64 NumPy 嵌入向量数组:
python
items = np.array([[0.1, 0.2, 0.3],
[0.0, 0.5, 0.1],
[0.9, 0.1, 0.0]], dtype=np.float64)第三步:配置图参数
python
graph_params = {"eps": 0.2, "k": 6, "topk": 3, "p": 2.0, "sigma": 1.0}
builder = ArrowSpaceBuilder(items, graph_params=graph_params)
aspace = builder.build()第四步:查询
python
lambdas = aspace.lambdas() # 按插入顺序索引的数组
sorted_res = aspace.lambdas_sorted() # (分数, 索引) 对,升序排列较高的 $\lambda\tau$ 值表示该项目在语义上接近且在结构上处于中心位置。
示例
示例 1:基础谱检索
python
items = np.random.randn(100, 64).astype(np.float64)
builder = ArrowSpaceBuilder(items, graph_params={"eps": 0.5, "k": 10, "topk": 5, "p": 2.0, "sigma": None})
aspace = builder.build()
scores = aspace.lambdas()
top_indices = np.argsort(scores)[-5:]示例 2:比较谱排序与余弦排序
python
from sklearn.metrics.pairwise import cosine_similarity
cos_sim = cosine_similarity(items)
cosine_order = np.argsort(cos_sim[0])[::-1]
spectral_order = np.argsort(aspace.lambdas())[::-1]最佳实践
- ✅ 在传入 ArrowSpace 之前,将嵌入向量归一化为单位范数
- ✅ 初始 $\text{eps}$ 可设为与 $1/\sqrt{\text{dim}}$ 成比例,然后进行调优
- ✅ 根据数据集大小将 $k$ 设置在 3 到 25 之间(经验法则:$N/50$)
- ✅ 设置 $\text{sigma}=\text{None}$ 以从距离分布中自动选择核宽度
- ❌ 不要用于少于 10 个项目的数据集(图结构没有意义)
- ❌ 不要用于实时流数据(ArrowSpace 是面向批处理的)
局限性
- 此技能不能替代针对特定环境的验证、测试或专家评审。
- ArrowSpace 是面向批处理的,并非为流数据的实时索引而设计。
常见陷阱
- 问题: $\text{eps}$ 过小,导致生成的图是不连通的
- 问题: $k$ 过大,导致生成的图过于稠密,谱特征被冲淡
相关技能
vector-database-engineer— 通用向量数据库专业知识
embedding-strategies— 嵌入模型选择与分块策略
similarity-search-patterns— 语义搜索实现模式
hybrid-search-implementation— 语义 + 关键词混合搜索实现