beowolx/rensa
High-performance MinHash implementation in Rust with Python bindings for efficient similarity estimation and deduplication of large datasets
它解决了什么问题
Rensa 提供了一种高性能的方法,用于在大型数据集中查找近似重复文档,而无需比较每一对文档。它通过使用紧凑的签名和局部敏感哈希(LSH)来估计 Jaccard 相似度,解决了计算成本高昂的去重问题。
它如何工作
用 Rust 编写并提供 Python 绑定,Rensa 实现了多种 MinHash 变体:
- R-MinHash 和 C-MinHash:这些方法基于标记重叠来估计相似度。R-MinHash 专为速度设计,无论标记顺序或重复如何,都会生成相同的签名。
- Rho Pipeline:一种专用流水线,通过采样标记位置,实现批量过滤的最大吞吐量。
- LSH(局部敏感哈希):该功能使库能够快速识别候选匹配项,然后根据相似度阈值进行检查,从而避免穷举比较。
- 性能优化:使用 SIMD(AVX2、AVX-512、NEON)进行更快的计算,最小化 Python 到 Rust 的开销,并利用 Rayon 实现多线程批处理。
适合谁使用
需要从大型语料库中移除近似重复文本数据的开发者和数据科学家,特别是那些已经在 Python 中对数据进行分词,并需要一个比现有库(如 Datasketch)快得多的工具的人。
特色亮点
- 极致速度:在批处理流水线中,基准测试显示其速度比 Datasketch 快高达 600 倍,比 FastSketch 快 12 倍。
- 紧凑签名:每个槽位使用 32 位,意味着一个 128 槽位的签名仅占用 512 字节,与文档长度无关。
- 灵活处理:支持批处理和流式去重。
- 增量更新:允许在不重新处理整个文档的情况下增量更新草图。
相关
- Dispatch
- 项目
- 项目
- 项目
- 项目