Фильтр токенов MinHash
Использует технику MinHash для создания подписи для потока токенов. Вы можете использовать подписи MinHash для оценки сходства документов. См. Использование фильтра min_hash для поиска по сходству.
Фильтр min_hash выполняет следующие операции над потоком токенов в указанном порядке:
- Вычисляет хеш каждого токена в потоке.
- Присваивает хеши корзинам, оставляя только наименьшие хеши каждой корзины.
- Выводит наименьший хеш из каждой корзины в качестве потока токенов.
Этот фильтр использует MinHashFilter из Lucene.
Конфигурируемые параметры
-
bucket_count - (Необязательно, целое число) Количество корзин, в которые распределяются хеши. По умолчанию
512. -
hash_count - (Необязательно, целое число) Количество способов вычисления хеша каждого токена в потоке. По умолчанию
1. -
hash_set_size -
(Необязательно, целое число) Количество хешей, сохраняемых из каждой корзины. По умолчанию
1.Хеши сохраняются в порядке возрастания, начиная с наименьшего хеша в корзине.
-
with_rotation - (Необязательно, булево значение) Если
true, фильтр заполняет пустые корзины значением первой непустой корзины по часовой стрелке, еслиhash_set_sizeравно1. Если аргументbucket_countбольше, чем1, этот параметр по умолчанию равенtrue. В противном случае этот параметр по умолчанию равенfalse.
Рекомендации по конфигурации фильтра min_hash
- Входные токены фильтра
min_hashобычно должны быть k-словными шингами, полученными от фильтра токенов shingle. Вы должны выбрать значениеkдостаточно большим, чтобы вероятность появления любого данного шинга в документе была низкой. В то же время, поскольку каждый шинг внутри хешируется в 128-битный хеш, вы должны выбрать значениеkдостаточно малым, чтобы все возможные различные k-словные шинги могли быть хешированы в 128-битный хеш с минимальным количеством коллизий. -
Мы рекомендуем вам протестировать различные значения аргументов для параметров
hash_count,bucket_countиhash_set_size:- Для повышения точности увеличьте аргументы
bucket_countилиhash_set_size. Более высокие значенияbucket_countиhash_set_sizeповышают вероятность того, что различные токены будут индексированы в разные корзины. - Для повышения полноты увеличьте значение аргумента
hash_count. Например, установкаhash_countна2хеширует каждый токен двумя различными способами, увеличивая количество потенциальных кандидатов для поиска.
- Для повышения точности увеличьте аргументы
- По умолчанию фильтр
min_hashгенерирует 512 токенов для каждого документа. Каждый токен имеет размер 16 байт. Это означает, что размер каждого документа увеличится примерно на 8 Кб. - Фильтр
min_hashиспользуется для вычисления сходства по индексу Жаккара. Это означает, что не имеет значения, сколько раз документ содержит определенный токен, а только то, содержит ли он его или нет.
Использование фильтра токенов min_hash для поиска по сходству
Фильтр токенов min_hash позволяет хешировать документы для поиска по сходству. Поиск по сходству, или поиск ближайших соседей — сложная задача. Примитивное решение требует исчерпывающего сравнения каждой пары документов, запроса и каждого документа в индексе. Это неприемлемо, если индекс большой. Было разработано несколько решений приближенного поиска ближайших соседей, чтобы сделать поиск по сходству более практичным и вычислительно осуществимым. Одним из таких решений является хеширование документов.
Документы хешируются таким образом, что похожие документы с большей вероятностью генерируют один и тот же хеш-код и попадают в одну хеш-корзину, а непохожие документы с большей вероятностью хешируются в разные хеш-корзины. Этот тип хеширования известен как локально-чувствительное хеширование (LSH).
В зависимости от того, что определяет сходство между документами, было предложено несколько функций LSH . Для сходства по индексу Жаккара популярной функцией LSH является MinHash. Общая идея того, как MinHash генерирует подпись для документа, заключается в применении случайной перестановки ко всему словарю индекса (случайное нумерование для словаря) и записи минимального значения для этой перестановки для документа (минимального номера для слова словаря, присутствующего в документе). Перестановки выполняются несколько раз; объединение минимальных значений для всех из них составит подпись для документа.
На практике вместо случайных перестановок выбирается несколько функций хеширования. Функция хеширования вычисляет хеш-код для каждого токена документа и выбирает минимальный хеш-код среди них. Минимальные хеш-коды из всех функций хеширования объединяются для формирования подписи документа.
Настройка и добавление в анализатор
Для настройки фильтра min_hash дублируйте его, чтобы создать основу для нового пользовательского фильтра токенов. Вы можете изменить фильтр, используя его конфигурируемые параметры.
Например, следующий запрос создания индекса использует следующие пользовательские фильтры токенов для настройки нового пользовательского анализатора:
-
my_shingle_filter, пользовательский фильтр токеновshingle.my_shingle_filterвыводит только пятисловные шинги. -
my_minhash_filter, пользовательский фильтрmin_hash.my_minhash_filterхеширует каждый пятисловный шинг один раз. Затем он распределяет хеши по 512 корзинам, оставляя только наименьший хеш из каждой корзины.
Запрос также назначает пользовательский анализатор для сопоставления поля fingerprint.
PUT /my-index-000001
{
"settings": {
"analysis": {
"filter": {
"my_shingle_filter": {
"type": "shingle",
"min_shingle_size": 5,
"max_shingle_size": 5,
"output_unigrams": false
},
"my_minhash_filter": {
"type": "min_hash",
"hash_count": 1,
"bucket_count": 512,
"hash_set_size": 1,
"with_rotation": true
}
},
"analyzer": {
"my_analyzer": {
"tokenizer": "standard",
"filter": [
"my_shingle_filter",
"my_minhash_filter"
]
}
}
}
},
"mappings": {
"properties": {
"fingerprint": {
"type": "text",
"analyzer": "my_analyzer"
}
}
}
} | Настраивает пользовательский фильтр шингов для вывода только пятисловных шингов. | |
| Каждый пятисловный шинг в потоке хешируется один раз. | |
| Хеши распределяются по 512 корзинам. | |
| Сохраняется только наименьший хеш в каждой корзине. | |
| Фильтр заполняет пустые корзины значениями соседних корзин. |
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/analysis-minhash-tokenfilter.html