7 个不稳定版本 (3 个重大变更)
0.4.0 | 2020 年 5 月 9 日 |
---|---|
0.3.0 | 2020 年 5 月 2 日 |
0.2.3 | 2020 年 4 月 28 日 |
0.1.0 | 2020 年 3 月 13 日 |
#3 in #lsh
95KB
2K SLoC
lsh-rs (局部敏感哈希)
局部敏感哈希可以在亚线性时间内帮助检索近似最近邻。
有关本主题的更多信息,请参阅
实现
- 基本 LSH
- 符号随机投影 (余弦相似度)
- L2 距离
- MIPS (点积/最大内积搜索)
- MinHash (Jaccard 相似度)
- 多探针 LSH
- 逐步探测
- SRP (仅位操作)
- 查询引导探测
- L2
- MIPS
- 逐步探测
- 通用数值类型
入门指南
use lsh_rs::LshMem;
// 2 rows w/ dimension 3.
let p = &[vec![1., 1.5, 2.],
vec![2., 1.1, -0.3]];
// Do one time expensive preprocessing.
let n_projections = 9;
let n_hash_tables = 30;
let dim = 10;
let dim = 3;
let mut lsh = LshMem::new(n_projections, n_hash_tables, dim)\
.srp()
.unwrap();
lsh.store_vecs(p);
// Query in sublinear time.
let query = &[1.1, 1.2, 1.2];
lsh.query_bucket(query);
文档
- 阅读 Rust 文档.
- 阅读 Python 文档 了解 Python 绑定。
Python
目前,Python 绑定仅编译为 Linux x86_64 系统。
$pip install floky
from floky import SRP
import numpy as np
N = 10000
n = 100
dim = 10
# Generate some random data points
data_points = np.random.randn(N, dim)
# Do a one time (expensive) fit.
lsh = SRP(n_projections=19, n_hash_tables=10)
lsh.fit(data_points)
# Query approximated nearest neigbors in sub-linear time
query = np.random.randn(n, dim)
results = lsh.predict(query)
依赖项
~5–9.5MB
~188K SLoC