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
  • 项目
  • 项目
  • 项目
  • 项目