У меня есть большое количество документов одинакового размера. Для каждого из этих документов я создаю модель мешка слов (BOW). Количество возможных слов во всех документах ограничено и велико (например, 2^16). Вообще говоря, у меня есть N гистограмм размера K, где N — количество документов, а K — ширина гистограммы. Я могу рассчитать расстояние между любыми двумя гистограммами.
Первая возможность оптимизации. В документах обычно используется только небольшое подмножество слов (обычно менее 5 %, в большинстве случаев менее 0,5 %).
Вторая возможность оптимизации Подмножество используемых слов сильно варьируется от документа к документу, поэтому я могу использовать биты вместо количества слов.
Запрос по содержанию
Запрос — это тоже документ. Мне нужно найти k
наиболее похожих документов.
Наивный подход
- Рассчитать модель BOW из запроса.
- For each document in dataset:
- Calculate it's BOW model.
- Найдите расстояние между запросом и документом.
Очевидно, что для отслеживания документов с самым высоким рейтингом следует использовать некоторую структуру данных (например, приоритетную очередь).
Мне нужен какой-то индекс, чтобы избавиться от полного сканирования базы данных. На ум приходит KD-дерево, но размерность и размер набора данных очень высоки. Можно предложить использовать какое-то подмножество возможных слов в качестве признаков, но у меня нет отдельной фазы обучения, и я не могу заранее извлечь эти признаки.
Я думал об использовании алгоритма MinHash для сокращения пространства поиска, но не могу разработать подходящие хеш-функции для этой задачи.