Насколько я понимаю, одной из основных функций метода LSH является сокращение данных даже за пределами базовых хэшей (часто минхэшей). Я использую пакет textreuse
в R, и меня удивляет размер генерируемых им данных. textreuse
— это проверенный экспертами пакет ROpenSci, поэтому я предполагаю, что он выполняет свою работу правильно, но мой вопрос остается.
Допустим, я использую 256 перестановок и 64 канала для функций minhash и LSH соответственно — реалистичные значения, которые часто используются для обнаружения с относительной достоверностью (~98%) сходства до 50%.
Если я хеширую случайный текстовый файл, используя TextReuseTextDocument
(256 разрешений), и назначаю его trtd
, у меня будет:
object.size(trtd$minhashes)
> 1072 bytes
Теперь давайте создадим LSH-бакеты для этого объекта (64 бэнда) и назначим его на l
, у меня будет:
object.size(l$buckets)
> 6704 bytes
Таким образом, сохраненные хэши в корзинах LSH в шесть раз больше, чем исходные минхэши. Насколько я понимаю, это происходит потому, что textreuse
использует дайджест md5 для создания хэшей ведра.
Но не слишком ли это расточительно/излишне, и нельзя ли это улучшить? Нормально ли, что наша техника сокращения данных раздувается до такой степени? И не эффективнее ли сопоставлять документы на основе исходных хэшей (аналогично perms = 256 и bands = 256), а затем использовать порог для отсеивания ложных срабатываний?
Обратите внимание, что я просмотрел типичные тексты, такие как Изучение массивных наборов данных, но остается вопрос об этой конкретной реализации. Также учтите, что вопрос задан не только из любопытства, а скорее по надобности. Когда у вас есть миллионы или миллиарды хэшей, эти различия становятся значительными.