Настройка алгоритма ранжирования сходства в Когнитивном поиске Azure

Когнитивный поиск Azure поддерживает два алгоритма ранжирования сходства:

  • Классический алгоритм сходства, использовавшийся всеми службами поиска до 15 июля 2020 г.
  • Реализация алгоритма Okapi BM25, используемая всеми службами поиска, созданными после 15 июля.

Ранжирование BM25 — это новый алгоритм, используемый по умолчанию. Он ранжирует результаты поиска так, чтобы они лучше отвечали ожиданиям пользователей. Он предоставляетпараметры для настройки результатов на основе таких факторов, как размер документа.

Новые службы, созданные после 15 июля 2020 г., автоматически используют BM25 как единственный алгоритм сходства. При попытке применить классический алгоритм сходства в новой службе выдается ошибка HTTP 400, так как он не поддерживается.

Классический алгоритм сходства по-прежнему используется по умолчанию в старых службах, созданных до 15 июля 2020 г. Старые службы можно перевести на BM25, установив этот алгоритм для индексов, как описано ниже. При переходе с классической модели на BM25 можно предположить, что порядок отображения результатов поиска несколько изменится.

Примечание

Семантические ранжирование, которое сейчас выпущено в качестве предварительной версии для стандартных служб в выбранных регионах, — это еще один шаг вперед для получения более релевантных результатов. В отличие от других алгоритмов, это надстройка, которая выполняет итерацию в существующем наборе результатов. Подробнее см. в статьях Общие сведения о семантическом поиске и Семантическое ранжирование.

Включение оценки BM25 в старых службах

Если вы используете службу поиска, созданную до 15 июля 2020 г., BM25 можно включить, задав свойство сходства для новых индексов. Это свойство доступно только для новых индексов, поэтому если вы хотите использовать BM25 для существующих индексов, необходимо удалить и перестроить индекс, присвоив новому свойству сходства значение Microsoft.Azure.Search.BM25Similarity.

Как только у индекса появляется свойство сходства, становится доступным переключение между алгоритмами BM25Similarity и ClassicSimilarity.

Следующие ссылки описывают свойство сходства в пакетах Azure SDK.

Клиентская библиотека Свойство сходства
.NET SearchIndex.Similarity
Java SearchIndex.setSimilarity
JavaScript SearchIndex.Similarity
Python свойство сходства для SearchIndex

Пример REST

Можно также использовать REST API, как показано в следующем примере.

PUT https://[search service name].search.windows.net/indexes/[index name]?api-version=2020-06-30
{
    "name": "indexName",
    "fields": [
        {
            "name": "id",
            "type": "Edm.String",
            "key": true
        },
        {
            "name": "name",
            "type": "Edm.String",
            "searchable": true,
            "analyzer": "en.lucene"
        },
        ...
    ],
    "similarity": {
        "@odata.type": "#Microsoft.Azure.Search.BM25Similarity"
    }
}

Задание параметров BM25

Сходство BM25 добавляет два настраиваемых пользователем параметра для управления вычисленной оценкой релевантности. Параметры BM25 можно задать во время создания индекса или как обновление индекса, если во время создания индекса был указан алгоритм BM25.

Свойство Тип Описание
k1 number Управляет функцией взвешивания частоты употребления каждого термина для конечной оценки релевантности пары "документ-запрос". Диапазон значений: 0,0–3,0. Значение по умолчанию: 1,2.

Значение 0,0 представляет "двоичную модель", где доля одного совпадающего термина одинакова во всех релевантных документах независимо от того, сколько раз этот термин встречается в тексте. Более высокое значение k1 позволяет увеличивать оценку по мере того, как в документе обнаруживается больше экземпляров одного и того же термина.

Более высокое значение k1 может быть полезным, если в поисковый запрос включается несколько терминов. В таких случаях мы скорее отдадим предпочтение документам, которые содержат много различных терминов из поискового запроса,чем тем, в которых один нужный термин встречается несколько раз. Например, при запросе индекса для документов, содержащих термины “Космическая программа “Аполлон”, будет лучше, если оценка статьи о греческой мифологии, где слово “Аполлон” встречается несколько десятков раз, но нет упоминаний о “космической программе”, будет меньше, чем у статьи, в которой хотя бы пару раз явно упоминается и “Аполлон”, и “космическая программа”.
b number Определяет зависимость оценки релевантности от длины документа. Диапазон значений: 0–1. Значение по умолчанию: 0,75.

Значение 0,0 означает, что длина документа не влияет на оценку, а значение 1,0 означает, что влияние частоты употребления терминов на оценку релевантности нормализуется по длине документа.

Нормализация частоты употребления термина по длине документа полезна, если нужно снизить оценку у более длинных документов. В некоторых случаях более длинные документы (например, объемный роман) содержат много ненужных терминов в сравнении с более короткими документами.

Настройка параметров k1 и b

Чтобы задать или изменить значения b или k1, добавьте их в объект сходства BM25. Если эти значения определяются или изменяются в существующем индексе, индекс будет переведен в автономный режим по крайней мере на несколько секунд, что приведет к сбою активных запросов и запросов индексации. Следовательно, для запроса на обновление необходимо задать параметр allowIndexDowntime=true:

PUT https://[search service name].search.windows.net/indexes/[index name]?api-version=2020-06-30&allowIndexDowntime=true
{
    "similarity": {
        "@odata.type": "#Microsoft.Azure.Search.BM25Similarity",
        "b" : 0.5,
        "k1" : 1.3
    }
}

См. также раздел