#similarity-search #lsh #all-pairs

find-simdoc

Time- and memory-efficient all pairs similarity searches in documents

2 releases

0.1.1 Sep 26, 2022
0.1.0 Sep 25, 2022

#1607 in Algorithms

Download history 163/week @ 2023-11-20 221/week @ 2023-11-27 186/week @ 2023-12-04 231/week @ 2023-12-11 301/week @ 2023-12-18 198/week @ 2023-12-25 126/week @ 2024-01-08 188/week @ 2024-01-15 184/week @ 2024-01-22 223/week @ 2024-01-29 148/week @ 2024-02-05 158/week @ 2024-02-12 375/week @ 2024-02-19 336/week @ 2024-02-26 395/week @ 2024-03-04

1,264 downloads per month

MIT/Apache

73KB
1.5K SLoC

find-simdoc

Time- and memory-efficient all pairs similarity searches in documents. The detailed description can be found on the project page.

API documentation

https://docs.rs/find-simdoc


lib.rs:

Time- and memory-efficient all pairs similarity searches in documents. A more detailed description can be found on the project page.

Problem definition

  • Input
    • List of documents
    • Distance function
    • Radius threshold
  • Output
    • All pairs of similar document ids

Features

Easy to use

This software supports all essential steps of document similarity search, from feature extraction to output of similar pairs. Therefore, you can immediately try the fast all pairs similarity search using your document files.

Flexible tokenization

You can specify any delimiter when splitting words in tokenization for feature extraction. This can be useful in languages where multiple definitions of words exist, such as Japanese or Chinese.

Time and memory efficiency

The time and memory complexities are linear over the numbers of input documents and output results on the basis of the ideas behind the locality sensitive hashing (LSH) and sketch sorting approach.

Tunable search performance

LSH allows tuning of performance in accuracy, time, and memory, through a manual parameter specifying search dimensions. You can flexibly perform searches depending on your dataset and machine environment.

  • Specifying lower dimensions allows for faster and rougher searches with less memory usage.
  • Specifying higher dimensions allows for more accurate searches with more memory usage.

Search steps

  1. Extract features from documents
    • Set representation of character or word ngrams
    • Tfidf-weighted vector representation of character or word ngrams
  2. Convert the features into binary sketches through locality sensitive hashing
  3. Search for similar sketches in the Hamming space using a modified variant of the sketch sorting approach

Dependencies

~3.5MB
~58K SLoC