Настройка оценки релевантности BM25

В этой статье вы узнаете, как настроить алгоритм оценки релевантности BM25, используемый поиском ИИ Azure для запросов полнотекстового поиска. В нем также объясняется, как включить BM25 в старых службах поиска.

BM25 применяется к:

  • Запросы, использующие search параметр для полнотекстового поиска, в текстовых полях с присвоением searchable .
  • Оценка область searchFieldsв или ко всем searchable полям, если searchFields значение NULL.

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

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

Алгоритм оценки по умолчанию

В зависимости от возраста службы поиска поиск Azure AI поддерживает два алгоритма оценки для полнотекстового поискового запроса:

  • Алгоритм Okapi BM25 (после 15 июля 2020 г.)
  • Классический алгоритм сходства (до 15 июля 2020 г.)

Рейтинг BM25 — это по умолчанию, так как он, как правило, создает рейтинги поиска, которые лучше соответствуют ожиданиям пользователей. Он включает параметры для настройки результатов на основе таких факторов, как размер документа. Для служб поиска, созданных после июля 2020 года, BM25 является единственным алгоритмом оценки. Если вы попытаетесь задать "сходство" в classicSimilarity в новой службе, возвращается ошибка HTTP 400, так как этот алгоритм не поддерживается службой.

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

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

Рейтинг BM25 предоставляет два параметра для настройки вычисления оценки релевантности.

  1. Используйте запрос на создание или обновление индекса для задания параметров BM25:

    PUT [service-name].search.windows.net/indexes/[index-name]?api-version=2020-06-30&allowIndexDowntime=true
    {
        "similarity": {
            "@odata.type": "#Microsoft.Azure.Search.BM25Similarity",
            "b" : 0.75,
            "k1" : 1.2
        }
    }
    
  2. Если индекс находится в режиме реального времени, добавьте allowIndexDowntime=true параметр URI в запросе, показанный в предыдущем примере.

    Так как поиск по искусственному интеллекту Azure не позволяет обновлять динамический индекс, необходимо перевести индекс в автономный режим, чтобы можно было добавить параметры. Индексирование и запросы завершаются ошибкой, пока индекс находится в автономном режиме. Длительность сбоя — это время, которое требуется для обновления индекса, обычно не более нескольких секунд. После завершения обновления индекс автоматически возвращается.

  3. Задайте и "k1" задайте "b" пользовательские значения, а затем отправьте запрос.

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

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

    Использование большего значения k1 важно в случаях, когда несколько терминов включаются в поисковый запрос. В таких случаях может потребоваться использовать документы, соответствующие больше терминов запроса, над документами, которые соответствуют только одному термину, несколько раз. Например, при запросе терминов "Apollo Spaceflight" может потребоваться снизить оценку статьи о греческой мифологии, содержащей термин "Apollo" несколько десятков раз, без упоминание "Spaceflight", относительно другой статьи, которая явно упоминание как "Apollo" и "Spaceflight" несколько раз.
    б Номер Определяет зависимость оценки релевантности от длины документа. Диапазон значений: 0–1. Значение по умолчанию: 0,75.

    Значение 0.0 означает, что длина документа не влияет на оценку. Значение 1.0 означает, что влияние частоты терминов на оценку релевантности нормализуется длиной документа.

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

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

Если вы используете службу поиска, созданную с марта 2014 по 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. В следующем примере создается новый индекс со свойством "сходство", равным BM25:

PUT [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"
    }
}

См. также