API оценки ранжирования
Позволяет оценить качество ранжированных результатов поиска на наборе типичных запросов.
Запрос
GET /<target>/_rank_eval
POST /<target>/_rank_eval
Предварительные условия
- Если включены функции безопасности Elasticsearch, у вас должна быть
readпривилегия индекса для целевого потока данных, индекса или псевдонима.
Описание
API оценки ранжирования позволяет оценить качество ранжированных результатов поиска на наборе типичных поисковых запросов. На основе этого набора запросов и списка вручную оцененных документов, конечная _rank_eval точка API рассчитывает и возвращает типичные метрики поиска, такие как средний обратный ранг, точность или скидочная кумулятивная выгода.
Оценка качества поиска начинается с анализа пользователей вашего поискового приложения и того, что они ищут. Пользователи имеют определенную информационную потребность; например, они ищут подарок в интернет-магазине или хотят забронировать авиабилет на ближайший отпуск. Обычно они вводят поисковые фразы в строку поиска или другую веб-форму. Вся эта информация, вместе с метаданными о пользователе (например, браузер, местоположение, предыдущие предпочтения и т. д.), преобразуется в запрос к основной поисковой системе.
Задача инженеров по поиску заключается в настройке процесса преобразования пользовательского ввода в конкретный запрос таким образом, чтобы результаты поиска содержали наиболее релевантную информацию с учетом информационной потребности пользователя. Это можно сделать только в том случае, если постоянно оценивать качество результатов поиска на репрезентативном наборе типовых пользовательских запросов, чтобы улучшения в ранжировании для одного конкретного запроса не ухудшали ранжирование для других типов запросов.
Для начала оценки качества поиска вам необходимо три основных компонента:
- Коллекция документов, по которым вы хотите оценить производительность запроса, обычно один или несколько потоков данных или индексов.
- Коллекция типовых поисковых запросов, которые пользователи вводят в вашу систему.
- Набор оценок документов, представляющих релевантность документов по отношению к поисковому запросу.
Важно отметить, что для каждого тестового запроса требуется отдельный набор оценок документов, и что суждения о релевантности основаны на информационной потребности пользователя, который ввел запрос.
API оценки ранжирования предоставляет удобный способ использовать эту информацию в запросе оценки ранжирования для расчета различных метрик оценки поиска. Это даёт вам первоначальную оценку общего качества поиска, а также метрику для оптимизации при настройке различных аспектов генерации запросов в вашем приложении.
Параметры пути
-
<target> - (Необязательный, строка) Список потоков данных, индексов и псевдонимов, используемых для ограничения запроса. Поддерживаются подстановочные знаки (
*). Чтобы нацелиться на все потоки данных и индексы, опустите этот параметр или используйте*или_all.
Параметры запроса
-
allow_no_indices -
(Необязательный, логическое значение) Если
false, запрос возвращает ошибку, если какой-либо подстановочный символ, псевдоним индекса или_allзначение нацелены только на отсутствующие или закрытые индексы. Это поведение применяется даже если запрос направлен на другие открытые индексы. Например, запрос, нацеленный наfoo*,bar*, возвращает ошибку, если индекс начинается сfoo, но ни один индекс не начинается сbar.По умолчанию
true. -
expand_wildcards -
(Необязательный, строка) Тип индекса, с которым могут совпадать подстановочные знаки. Если запрос может нацеливаться на потоки данных, этот аргумент определяет, соответствуют ли подстановочные знаки скрытым потокам данных. Поддерживаются значения, разделенные запятыми, такие как
open,hidden. Допустимые значения:-
all - Соответствие любому потоку данных или индексу, включая скрытые.
-
open - Соответствие открытым, нескрытым индексам. Также соответствует любому нескрытому потоку данных.
-
closed - Соответствие закрытым, нескрытым индексам. Также соответствует любому нескрытому потоку данных. Потоки данных не могут быть закрыты.
-
hidden - Соответствие скрытым потокам данных и скрытым индексам. Должно быть совмещено с
open,closedили обоими. -
none - Подстановочные знаки не принимаются.
По умолчанию
open. -
-
ignore_unavailable - (Необязательный, логическое значение) Если
false, запрос возвращает ошибку, если он нацелен на отсутствующий или закрытый индекс. По умолчаниюfalse.
Примеры
В самом простом виде запрос к _rank_eval точке API состоит из двух частей:
GET /my-index-000001/_rank_eval
{
"requests": [ ... ],
"metric": {
"mean_reciprocal_rank": { ... }
}
} | набор типичных поисковых запросов вместе с их оценками | |
| определение метрики оценки для расчета | |
| конкретная метрика и её параметры |
Раздел запроса содержит несколько поисковых запросов, типичных для вашего приложения, вместе с оценками документов для каждого конкретного запроса.
GET /my-index-000001/_rank_eval
{
"requests": [
{
"id": "amsterdam_query",
"request": {
"query": { "match": { "text": "amsterdam" } }
},
"ratings": [
{ "_index": "my-index-000001", "_id": "doc1", "rating": 0 },
{ "_index": "my-index-000001", "_id": "doc2", "rating": 3 },
{ "_index": "my-index-000001", "_id": "doc3", "rating": 1 }
]
},
{
"id": "berlin_query",
"request": {
"query": { "match": { "text": "berlin" } }
},
"ratings": [
{ "_index": "my-index-000001", "_id": "doc1", "rating": 1 }
]
}
]
} | Идентификатор поискового запроса, используемый для группировки подробностей результатов позднее. | |
| Оцениваемый запрос. | |
| Список оценок документов. Каждый элемент содержит следующие аргументы:
|
Документ rating может быть любым целочисленным значением, которое выражает релевантность документа в определённой вами шкале. Для некоторых метрик может быть достаточно бинарной оценки (например, 0 для нерелевантного и 1 для релевантного), а другие метрики могут использовать более детальную шкалу.
Оценка ранжирования на основе шаблонов
В качестве альтернативы указанию одного запроса на запрос оценки, можно указать шаблоны запросов в запросе оценки и ссылаться на них позже. Таким образом, запросы с похожей структурой, отличающиеся только параметрами, не нужно повторять постоянно в разделе requests. В типичных поисковых системах, где входные данные пользователей обычно заполняют небольшое количество шаблонов запросов, это помогает сделать запрос оценки более лаконичным.
GET /my-index-000001/_rank_eval
{
[...]
"templates": [
{
"id": "match_one_field_query",
"template": {
"inline": {
"query": {
"match": { "{{field}}": { "query": "{{query_string}}" }}
}
}
}
}
],
"requests": [
{
"id": "amsterdam_query"
"ratings": [ ... ],
"template_id": "match_one_field_query",
"params": {
"query_string": "amsterdam",
"field": "text"
}
},
[...]
} | идентификатор шаблона | |
| определение используемого шаблона | |
| ссылка на ранее определённый шаблон | |
| параметры для заполнения шаблона |
Вы также можете использовать сохраненный шаблон поиска.
GET /my_index/_rank_eval
{
[...]
"templates": [
{
"id": "match_one_field_query",
"template": {
"id": "match_one_field_query"
}
}
],
"requests": [...]
} | идентификатор шаблона, используемый для запросов | |
| идентификатор шаблона, хранящийся в состоянии кластера |
Доступные метрики оценки
Раздел metric определяет, какие из доступных метрик оценки будут использоваться. Поддерживаются следующие метрики:
Точность при K (P@k)
Эта метрика измеряет долю релевантных результатов в топ-k результатах поиска. Это форма известной метрики точности, которая рассматривает только топ-k документов. Это доля релевантных документов в первых k результатах. Значение точности при 10 (P@10) 0,6 означает, что 6 из 10 лучших результатов релевантны с точки зрения информационных потребностей пользователя.
P@k хорошо работает как простая метрика оценки, которую легко понять и объяснить. Документы в коллекции необходимо оценить как релевантные или нерелевантные относительно текущего запроса. P@k — это метрика на основе множеств и не учитывает положение релевантных документов в топ-k результатах, поэтому рейтинг из десяти результатов, содержащий один релевантный результат на позиции 10, так же хорош, как и рейтинг из десяти результатов, содержащий один релевантный результат на позиции 1.
GET /my-index-000001/_rank_eval
{
"requests": [
{
"id": "JFK query",
"request": { "query": { "match_all": {} } },
"ratings": []
} ],
"metric": {
"precision": {
"k": 20,
"relevant_rating_threshold": 1,
"ignore_unlabeled": false
}
}
} Метрика precision принимает следующие необязательные параметры
| Параметр | Описание |
|---|---|
| устанавливает максимальное количество документов, извлекаемых за запрос. Это значение будет использоваться вместо обычного параметра |
| устанавливает порог оценки, выше которого документы считаются «релевантными». По умолчанию |
| управляет тем, как учитываются неуказанные документы в результатах поиска. Если установлено значение true, неуказанные документы игнорируются и не считаются ни релевантными, ни нерелевантными. Если установлено значение false (по умолчанию), они обрабатываются как нерелевантные. |
Полнота при K (R@k)
Эта метрика измеряет общее количество релевантных результатов в топ-k результатах поиска. Это форма известной метрики полноты. Это доля релевантных документов в первых k результатах относительно всех возможных релевантных результатов. Значение полноты при 10 (R@10) 0,5 означает, что 4 из 8 релевантных документов с точки зрения информационных потребностей пользователя были получены в 10 лучших результатах.
R@k хорошо работает как простая метрика оценки, которую легко понять и объяснить. Документы в коллекции необходимо оценить как релевантные или нерелевантные относительно текущего запроса. R@k — это метрика на основе множеств и не учитывает положение релевантных документов в топ-k результатах, поэтому рейтинг из десяти результатов, содержащий один релевантный результат на позиции 10, так же хорош, как и рейтинг из десяти результатов, содержащий один релевантный результат на позиции 1.
GET /my-index-000001/_rank_eval
{
"requests": [
{
"id": "JFK query",
"request": { "query": { "match_all": {} } },
"ratings": []
} ],
"metric": {
"recall": {
"k": 20,
"relevant_rating_threshold": 1
}
}
} Метрика recall принимает следующие необязательные параметры
| Параметр | Описание |
|---|---|
| устанавливает максимальное количество документов, извлекаемых за запрос. Это значение будет использоваться вместо обычного параметра |
| устанавливает порог оценки, выше которого документы считаются «релевантными». По умолчанию |
Средний обратный ранг
Для каждого запроса в наборе тестов эта метрика вычисляет обратное значение ранга первого релевантного документа. Например, нахождение первого релевантного результата на позиции 3 означает, что обратный ранг равен 1/3. Обратный ранг для каждого запроса усредняется по всем запросам в наборе тестов, чтобы получить средний обратный ранг.
GET /my-index-000001/_rank_eval
{
"requests": [
{
"id": "JFK query",
"request": { "query": { "match_all": {} } },
"ratings": []
} ],
"metric": {
"mean_reciprocal_rank": {
"k": 20,
"relevant_rating_threshold": 1
}
}
} Метрика mean_reciprocal_rank принимает следующие необязательные параметры
| Параметр | Описание |
|---|---|
| устанавливает максимальное количество документов, извлекаемых за запрос. Это значение будет использоваться вместо обычного параметра |
| Устанавливает порог оценки, выше которого документы считаются «релевантными». По умолчанию |
Скидочная кумулятивная выгода (DCG)
В отличие от двух метрик выше, скидочная кумулятивная выгода учитывает как ранг, так и оценку результатов поиска.
Предполагается, что высокорелевантные документы полезнее для пользователя, когда они появляются в верхней части списка результатов. Поэтому формула DCG уменьшает вклад высоких оценок документов с более низкими рангами в общем показателе метрики DCG.
GET /my-index-000001/_rank_eval
{
"requests": [
{
"id": "JFK query",
"request": { "query": { "match_all": {} } },
"ratings": []
} ],
"metric": {
"dcg": {
"k": 20,
"normalize": false
}
}
} Метрика dcg принимает следующие необязательные параметры:
| Параметр | Описание |
|---|---|
| устанавливает максимальное количество документов, извлекаемых за запрос. Это значение будет использоваться вместо обычного параметра |
| Если установлено значение |
Ожидаемый обратный ранг (ERR)
Ожидаемый обратный ранг (ERR) — это расширение классического обратного ранга для случая градиентной релевантности (Оливье Шапель, Донольд Метцлер, Я Чжан и Пьер Гринспан. 2009. Ожидаемый обратный ранг для градиентной релевантности.)
Он основан на предположении о каскадной модели поиска, в которой пользователь просматривает результаты поиска в ранжированном порядке и останавливается на первом документе, удовлетворяющем информационным потребностям. По этой причине это хорошая метрика для запросов по ответам на вопросы и навигации, но менее подходит для запросов на обзоры информации, где пользователь заинтересован в поиске многих релевантных документов в результатах топ-k.
Метрика моделирует ожидание обратного значения позиции, на которой пользователь прекращает чтение списка результатов. Это означает, что релевантный документ в верхней позиции ранжирования внесет большой вклад в общий балл. Однако тот же документ внесет гораздо меньший вклад в балл, если он появится в нижнем ранге; и еще меньше, если ему предшествуют некоторые релевантные (но, возможно, менее релевантные) документы. Таким образом, метрика ERR дисконтирует документы, которые отображаются после очень релевантных документов. Это вводит понятие зависимости в порядке расположения релевантных документов, чего не учитывают, например, точность или DCG.
GET /my-index-000001/_rank_eval
{
"requests": [
{
"id": "JFK query",
"request": { "query": { "match_all": {} } },
"ratings": []
} ],
"metric": {
"expected_reciprocal_rank": {
"maximum_relevance": 3,
"k": 20
}
}
} Метрика expected_reciprocal_rank принимает следующие параметры:
| Параметр | Описание |
|---|---|
| Обязательный параметр. Наивысшая оценка релевантности, используемая в суждениях о релевантности пользователя. |
| устанавливает максимальное количество документов, извлекаемых за запрос. Это значение будет использоваться вместо обычного параметра |
Формат ответа
Ответ на запрос _rank_eval содержит общий рассчитанный результат для определенного метрики качества, раздел details с разбивкой результатов для каждого запроса в наборе тестов и необязательный раздел failures, который показывает возможные ошибки отдельных запросов. Ответ имеет следующий формат:
{
"rank_eval": {
"metric_score": 0.4,
"details": {
"my_query_id1": {
"metric_score": 0.6,
"unrated_docs": [
{
"_index": "my-index-000001",
"_id": "1960795"
}, ...
],
"hits": [
{
"hit": {
"_index": "my-index-000001",
"_type": "page",
"_id": "1528558",
"_score": 7.0556192
},
"rating": 1
}, ...
],
"metric_details": {
"precision": {
"relevant_docs_retrieved": 6,
"docs_retrieved": 10
}
}
},
"my_query_id2": { [... ] }
},
"failures": { [... ] }
}
} | общая оценка качества, рассчитанная по определенной метрике | |
| раздел | |
| значение | |
| раздел | |
| раздел | |
|
|
© 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/search-rank-eval.html