beowolx/rensa

High-performance MinHash implementation in Rust with Python bindings for efficient similarity estimation and deduplication of large datasets

解决的问题

Rensa 提供了一种高性能的方法,用于估计大规模数据集之间的相似性并识别近似重复文档。它被设计为 datasketch 和 FastSketch 等现有库在大规模去重任务中的显著更快替代方案。

工作原理

Rensa 实现了 MinHash,这是一种使用随机哈希函数创建集合紧凑「签名」的技术。两个签名之间匹配槽位的比例可估计原始集合的 Jaccard 相似度。

Rensa 提供两种变体:

  • R-MinHash:一种自定义变体,使用乘法-移位哈希(取 64 位乘加运算的高 32 位)而非模运算,从而减少 CPU 开销和内存使用。
  • C-MinHash:基于正式论文,该变体采用两阶段方案,从更小的参数集中推导出多个槽位,提供更紧的方差边界。

该项目使用 Rust 编写,配有 Python 绑定,并采用多种低级优化,包括非加密哈希、元素批量处理以及使用 MiMalloc 分配器更高效地管理内存。

适用人群

需要在标准 Python 实现过于缓慢的大规模数据集上执行近似重复检测或相似性估计的数据工程师和机器学习实践者。

主要亮点

  • 极致速度:基准测试显示,比 datasketch 快高达 608 倍,比 FastSketch 快 11 倍。
  • 内存高效:R-MinHash 签名使用 32 位整数,相比 64 位实现,内存需求减半。
  • LSH 集成:内置局部敏感哈希(LSH),无需比较每一对即可高效查询候选项。
  • 流式支持:内置去重器,支持连续数据流处理。
  • 灵活 API:支持一次性批量处理和增量更新。

相关

  • Dispatch
  • 项目
  • 项目
  • 项目
  • 项目