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

Note

Поиск с использованием ИИ Azure доступна через портал Azure, REST API и Azure SDKs. Он также лежит в основе Foundry IQ — управляемого слоя знаний, который преобразует корпоративный контент в многократно используемые базы знаний с учетом разрешений доступа для агентов на портале Microsoft Foundry.

В этой статье вы узнаете, как настроить алгоритм оценки релевантности 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=2026-04-01&allowIndexDowntime=true
    {
        "similarity": {
            "@odata.type": "#Microsoft.Azure.Search.BM25Similarity",
            "b" : 0.75,
            "k1" : 1.2
        }
    }
    
  2. Если индекс находится в режиме реального времени, добавьте allowIndexDowntime=true параметр URI в запросе, показанный в предыдущем примере.

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

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

    Свойство Тип Описание
    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.

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

Клиентская библиотека Свойство сходства
.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=2026-04-01
{
    "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"
    }
}

См. также