Добавление профилей повышения для повышения оценок поиска

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

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

Примечание.

Не знакомы с понятиями релевантности? Следующий сегмент видео на YouTube быстрое перемещение вперед, чтобы узнать, как работают профили оценки в службе "Поиск ИИ Azure". Вы также можете посетить релевантность и оценку в службе "Поиск ИИ Azure" для получения дополнительных фонов.

Определение профиля оценки

Профиль оценки называется объектом, определенным в схеме индекса. Профиль может состоять из взвешированных полей, функций и параметров.

В следующем определении показан простой профиль с именем geo. Этот пример повышает результаты, имеющие поисковый термин в поле hotelName. Она также использует distance функцию для того, чтобы использовать результаты, которые находятся в пределах 10 километров от текущего расположения. Если кто-то ищет слово inn, которое входит в название отеля, документы, содержащие отели со словом inn, расположенные в пределах радиуса в 10 км от текущего расположения, будут показаны в результатах поиска выше.

"scoringProfiles": [
  {  
    "name":"geo",
    "text": {  
      "weights": {  
        "hotelName": 5
      }                              
    },
    "functions": [
      {  
        "type": "distance",
        "boost": 5,
        "fieldName": "location",
        "interpolation": "logarithmic",
        "distance": {
          "referencePointParameter": "currentLocation",
          "boostingDistance": 10
        }                        
      }                                      
    ]                     
  }            
]

Чтобы использовать этот профиль повышения, запрос определяет параметр scoringProfile в запросе. Если вы используете REST API, запросы задаются с помощью запросов GET и POST. В следующем примере "CurrentLocation" имеет разделитель одного дефиса (-). За ним следует координаты долготы и широты, где долготы являются отрицательным значением.

GET /indexes/hotels/docs?search+inn&scoringProfile=geo&scoringParameter=currentLocation--122.123,44.77233&api-version=2020-06-30

Обратите внимание на различия синтаксиса при использовании POST. В POST "scoringParameters" имеет множественное число, и это массив.

POST /indexes/hotels/docs&api-version=2020-06-30
{
    "search": "inn",
    "scoringProfile": "geo",
    "scoringParameters": ["currentLocation--122.123,44.77233"]
}

Этот запрос выполняет поиск слова inn и передает текущее расположение. Обратите внимание, что этот запрос содержит другие параметры, такие как scoringParameter. Параметры запроса, включая "scoringParameter", описаны в разделе "Документы поиска" (REST API).

Просмотрите более подробный пример профиля повышения в разделе Расширенный пример.

Вычисление оценок

Оценки вычисляются для запросов полнотекстового поиска. Совпадения оцениваются на основе того, насколько релевантно совпадение, а в ответе запроса возвращаются самые высокие совпадения оценки. Общая оценка каждого документа является агрегированием отдельных оценок для каждого поля, где отдельная оценка каждого поля вычисляется на основе частоты терминов и частоты в документе искомых терминов в пределах этого поля (известного как TF-IDF или частота терминов и обратная частота в документе).

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

В каких случаях следует добавлять логику оценки

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

Упорядочивание на основе релевантности на странице поиска также реализуется с помощью профилей повышения. Рассмотрим страницы результатов поиска, которые вы использовали ранее, позволяющие сортировать данные по цене, дате, рейтингу или релевантности. В службе "Поиск ИИ Azure" профили оценки можно использовать для управления параметром релевантности. Определение релевантности определяется пользователем, предикатом бизнес-целей и типом интерфейса поиска, который требуется предоставить.

Действия по добавлению профиля повышения

Чтобы реализовать пользовательское поведение оценки, добавьте профиль оценки в схему, которая определяет индекс. В индексе может быть до 100 профилей повышения (см. сведения в статье Ограничения поиска Azure), но в одном запросе можно указать только один профиль.

  1. Начните с определения индекса. Вы можете добавлять и обновлять профили повышения в имеющемся индексе без необходимости перестраивать его. Используйте запрос Update Index (Обновить индекс), чтобы опубликовать вашу версию.

  2. Вставьте в шаблон, указанный в этой статье.

  3. Введите имя. Профили оценки не являются обязательными, но если вы добавите профиль, необходимо указать имя. Обязательно следуйте соглашениям об именовании поиска ИИ Azure для полей (начинается с буквы , избегайте специальных символов и зарезервированных слов).

  4. Укажите критерии повышения. Один профиль может содержать взвешенные поля, функции или и то, и другое.

Вы должны работать итеративно, используя набор данных, который поможет доказать или опровергнуть эффективность данного профиля.

Профили повышения можно определить на портале Azure, как показано на следующем снимке экрана, или программно с помощью REST API или в пакетах SDK Azure, например с использованием класса ScoringProfile в пакете Azure SDK для .NET.

Add scoring profiles page

Использование взвешенных полей

Используйте взвешированные поля, если контекст поля важен, а запросы — полнотекстовый поиск. Например, если запрос содержит термин airport, то для airport в поле "Описание" может потребоваться больше веса, чем в HotelName.

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

"scoringProfiles": [  
    {  
      "name": "boostKeywords",  
      "text": {  
        "weights": {  
          "HotelName": 2,  
          "Description": 5 
        }  
      }  
    }
]

Использование функций

Используйте функции, когда простые относительные весы недостаточно или не применяются, как и в случае с расстоянием и свежестью, которые являются вычислениями по числовым данным. Вы можете указать несколько функций для профиля повышения. Дополнительные сведения о типах данных EDM, используемых в поиске ИИ Azure, см. в статье "Поддерживаемые типы данных".

Function Description
freshness Увеличивается по значениям в поле datetime (Edm.DateTimeOffset). Эта функция имеет атрибут "boostingDuration", чтобы указать значение, представляющее интервал времени, по которому происходит повышение.
magnitude Выполняет повышение на основе величины числового значения. К сценариям, в которых может вызваться эта функция, относится повышение приоритета на основе прибыли, наибольшей цены, наименьшей цены или числа загрузок. Эта функция может использоваться только с полями Edm.Double и Edm.Int. Для функции magnitude можно задать обратный диапазон (от высоких оценок до низких), если результаты нужно отобразить в обратном порядке (например, повысить приоритет для элементов с более низкими ценами по сравнению с элементами с более высокими ценами). Учитывая диапазон цен с $100 по $1, вы бы задали для boostingRangeStart значение 100, а для boostingRangeEnd — 1, чтобы увеличить количество элементов с меньшими ценами.
distance Повышение по сходству или географическому расположению. Эта функция может использоваться только с полями типа Edm.GeographyPoint .
tag Повышение по тегам, которые являются общими для документов поиска и строк запросов. Теги предоставляются в теге tagsParameter. Эту функцию можно использовать только с полями поиска типа Edm.String и Collection(Edm.String).

Правила использования функции

  • Функция может применяться только к полям с фильтруемыми атрибутами.
  • Тип функции (freshness, magnitude, distance, tag) необходимо указывать в нижнем регистре.
  • Функции не могут содержать пустые или пустые значения.

Template

В этом разделе показан синтаксис и шаблон для профилей оценки. Описание атрибутов профиля повышения см. в разделе Справочные данные по свойствам.

"scoringProfiles": [  
  {   
    "name": "name of scoring profile",   
    "text": (optional, only applies to searchable fields) {   
      "weights": {   
        "searchable_field_name": relative_weight_value (positive #'s),   
        ...   
      }   
    },   
    "functions": (optional) [  
      {   
        "type": "magnitude | freshness | distance | tag",   
        "boost": # (positive number used as multiplier for raw score != 1),   
        "fieldName": "(...)",   
        "interpolation": "constant | linear (default) | quadratic | logarithmic",   

        "magnitude": {
          "boostingRangeStart": #,   
          "boostingRangeEnd": #,   
          "constantBoostBeyondRange": true | false (default)
        }  

        // ( - or -)  

        "freshness": {
          "boostingDuration": "..." (value representing timespan over which boosting occurs)   
        }  

        // ( - or -)  

        "distance": {
          "referencePointParameter": "...", (parameter to be passed in queries to use as reference location)   
          "boostingDistance": # (the distance in kilometers from the reference location where the boosting range ends)   
        }   

        // ( - or -)  

        "tag": {
          "tagsParameter":  "..."(parameter to be passed in queries to specify a list of tags to compare against target field)   
        }
      }
    ],   
    "functionAggregation": (optional, applies only when functions are specified) "sum (default) | average | minimum | maximum | firstMatching"   
  }   
],   
"defaultScoringProfile": (optional) "...", 

Справочные данные по свойствам

Атрибут Описание
name Обязательно. Это имя профиля оценки. К нему применяются те же соглашения об именовании, что и к полям. Он должен начинаться с буквы, не может содержать точки, двоеточия или символы @ и не может начинаться с фразы azureSearch (с учетом регистра).
text Содержит свойство weights (весовые коэффициенты).
Веса Необязательно. Пары имени-значения, которые указывают поле с возможностью поиска и положительное целое число или количество с плавающей запятой, на которое повышается оценка поля. Положительное целое число или число становятся множителем для первоначальной оценки поля, формируемой алгоритмом ранжирования. Например, если оценка поля равна 2, а значение веса — 3, повышенной оценкой для поля будет 6. Затем отдельные оценки полей суммируются для создания оценки поля документа, которая используется для ранжирования документа в результирующем наборе.
functions Необязательно. Функция оценки может применяться только к фильтруемым полям.
Тип функций > Требуется для функций оценки. Указывает тип используемой функции. Допустимые значения: magnitude, freshness, distance и tag. В каждый профиль оценки можно включить несколько функций. Имя функции должно состоять из строчных букв.
Повышение функций > Требуется для функций оценки. Положительное число, используемое в качестве множителя для необработанной оценки. Это не может быть равно 1.
имя поля функций > Требуется для функций оценки. Функция оценки может применяться только к фильтруемым полям, входящим в коллекцию полей индекса. Кроме того, каждый тип функции накладывает дополнительные ограничения (freshness используется с полями типа datetime, magnitude — с полями типа integer или double, а distance — с полями типа location). В определении функции можно указать только одно поле. Например, чтобы использовать функцию magnitude дважды в одном профиле, необходимо добавить два определения magnitude (по одному для каждого поля).
Интерполяция функций > Требуется для функций оценки. Определяет наклон для повышения приоритета оценки от начала до конца диапазона. Допустимые значения: Linear (по умолчанию), Constant, Quadratic и Logarithmic. Дополнительные сведения см. в разделе Настройка интерполяций.
величина функций > Функция оценки magnitude используется для изменения рейтинга на основе диапазона значений для числового поля. Ниже приведены некоторые из наиболее распространенных примеров использования:

"Звездные оценки:" Измените оценку на основе значения в поле "Рейтинг звезды". Если релевантны два элемента, первым отобразится элемент с более высокой оценкой.
"Маржа:" Если важны два документа, розничный продавец может сначала увеличить документы с более высокими полями.
"Количество щелчков:" Для приложений, которые отслеживают действия щелчка по продуктам или страницам, можно использовать величину для повышения числа элементов, которые, как правило, получают большую часть трафика.
"Количество скачивание:" Для приложений, отслеживающих скачивание, функция величины позволяет повысить количество элементов с наиболее загруженными файлами.
функции > boostingRangeStart > Задает начальное значение диапазона, на основе которого вычисляется результат функции magnitude. Значение должно быть целым числом или числом с плавающей запятой. Для оценок по звездам от 1 до 4 — 1. Для маржи более 50 % — 50.
величина > функции > boostingRangeEnd Задает конечное значение диапазона, на основе которого вычисляется результат функции magnitude. Значение должно быть целым числом или числом с плавающей запятой. Для оценок по звездам от 1 до 4 — 4.
константная величина > функцийBoostBeyondRange > Допустимые значения: true или false (по умолчанию). Если задано значение true, к документам, содержащим значение целевого поля, превышающее верхнее ограничение диапазона, будет применяться максимальное повышение приоритета. Если задано значение false, эта функция не будет применяться к документам, содержащим значение целевого поля, которое не входит в диапазон.
свежесть функций > Функция оценки freshness используется для оценки ранжирования элементов на основе значений в полях DateTimeOffset. Например, элемент с более близкой датой может классифицироваться выше, чем старые элементы.

Кроме того, можно ранжировать такие элементы, как события календаря с будущими датами, таким образом, чтобы элементы ближе к настоящему времени могли быть ранжированы выше, чем элементы дальше в будущем.

В текущем выпуске службы один конец диапазона будет фиксирован до текущего времени. Другой конец — это время в прошлом на основе параметра boostingDuration. Чтобы повысить приоритет диапазона будущего времени, используйте отрицательное значение параметра boostingDuration.

Скорость, с которой повышение изменяется от максимального и минимального диапазона, определяется интерполяцией, примененной к профилю оценки (см. рисунок ниже). Чтобы изменить направление коэффициента повышения приоритета, выберите коэффициент повышения приоритета меньше 1.
функции > с повышением свежестиDuration > Задает срок действия, после которого повышение приоритета перестает применяться для определенного документа. Синтаксис и примеры приведены далее в подразделе Настройка boostingDuration.
Расстояние функций > Функция оценки расстояния используется для влияния на оценку документов на основе того, насколько близко или далеко они относительно эталонного географического расположения. Эталонное расположение предоставляется в качестве части запроса в параметре (с помощью параметра запроса оценкиParameter) в качестве аргумента lon,lat .
Справочник по расстоянию > функцийPointParameter > Параметр, передаваемый в запросах для использования в качестве эталонного расположения (с помощью параметра запроса scoringParameter).
функция > с повышением расстояния > Число, которое задает расстояние в километрах от эталонного расположения, где заканчивается диапазон повышения приоритета.
Тег функций > Функция оценки tag определяет оценку документов на основе тегов, имеющихся в документах и поисковых запросах. Документы, в которых имеются общие с поисковыми запросами теги, получают более высокий приоритет. Теги для каждого поискового запроса указываются в качестве параметра оценки (с помощью параметра запроса scoringParameter).
теги тегов > функцийParameter > Передаваемый в запросах параметр для указания тегов для определенного запроса (с помощью параметра запроса scoringParameter). Параметр состоит из списка целых терминов с разделителями-запятыми. Если заданный тег в списке является списком с разделителями-запятыми, можно использовать нормализатор текста в поле для удаления запятых во время запроса (сопоставлять символ запятой с пробелом). Этот подход будет "плоско" в списке, чтобы все термины были одной длинной строкой терминов с разделителями-запятыми.
functionAggregation Необязательно. Применяется, только если указаны функции. Допустимые значения: sum (по умолчанию), average, minimum, maximum и firstMatching. Оценка поиска — это одиночное значение, которое вычисляется на основе нескольких переменных, включая несколько функций. Эти атрибуты показывают, как значения повышения приоритета всех функций объединяются в единое агрегированное повышение приоритета, которое затем применяется к базовой оценке документа. Базовая оценка основана на значении tf-idf, которое вычисляется на основе документа и поискового запроса.
defaultScoringProfile Если при выполнении поискового запроса профиль повышения не указан, используется оценка по умолчанию (только tf-idf).

По умолчанию можно переопределить встроенный профиль, заменив настраиваемый профиль как используемый, если в запросе поиска нет определенного профиля.

Настройка интерполяций

Интерполяции позволяют задать форму наклона, используемого для оценки. Так как оценка идет по убыванию, наклон всегда снижается, но интерполяция определяет кривую нисходящего наклона. Можно использовать следующие типы интерполяции.

Интерполяция Description
linear Для элементов, которые находятся в диапазоне от минимального до максимального значения, применяется постоянно убывающая величина. Линейная интерполяция — это интерполяция для оценки профиля по умолчанию.
constant Для элементов, которые находятся между начальным и конечным диапазонами, к результатам ранжирования применяется постоянное повышение приоритета.
quadratic По сравнению с линейной интерполяцией с постоянно убывающим повышением приоритета квадратичная интерполяционная функция сначала уменьшается не так быстро, а по мере приближения к конечному диапазону уменьшается на гораздо большую величину. Этот параметр интерполяции не допускается в функциях оценки тегов.
logarithmic По сравнению с линейной интерполяцией с постоянно убывающим повышением приоритета логарифмическая интерполяционная функция сначала уменьшается быстрее, а по мере приближения к конечному диапазону уменьшается на гораздо меньшую величину. Этот параметр интерполяции не допускается в функциях оценки тегов.

Constant, linear, quadratic, log10 lines on graph

Настройка boostingDuration

boostingDuration — это атрибут функции freshness. Он задает срок действия, после которого повышение приоритета перестает применяться для определенного документа. Например, для повышения приоритета линейки продуктов или торговой марки в течение 10-дневного периода следует указать для соответствующих документов 10-дневный период как "P10D".

boostingDuration необходимо отформатировать как XSD-значение dayTimeDuration (ограниченное подмножество значения длительности ISO 8601). Используется следующий шаблон: "P[nD][T[nH][nM][nS]]".

Следующая таблица содержит несколько примеров.

Длительность boostingDuration
1 день "P1D"
2 дня и 12 часов "P2DT12H"
15 минут "PT15M"
30 дней, 5 часов, 10 минут и 6,334 секунды "P30DT5H10M6.334S"

Дополнительные примеры см. в документе о типах данных в схеме XML (веб-сайт W3.org).

Расширенный пример

В следующем примере показана схема индекса с двумя профилями повышения (boostGenre, newAndHighlyRated). Любой запрос к этому индексу, включающий профиль в качестве параметра запроса, будет использовать профиль для оценки результирующего набора.

Профиль boostGenre использует взвешенные текстовые поля, повышая совпадения в полях albumTitle, genre и artistName. Поля повышаются на 1.5, 5 и 2 позиции соответственно. Почему для поля genre приоритет повышен намного больше, чем для других полей? Если поиск выполняется в однородных данных (как в случае с genre в musicstoreindex), вам может потребоваться большая вариативность в относительных весах. Например, слово rock появляется в musicstoreindex как жанр и в идентично сформулированных описаниях жанра. Если жанр должен обладать большим весом, чем описание жанра, полю genre потребуется назначить гораздо больший относительный вес.

{  
  "name": "musicstoreindex",  
  "fields": [  
    { "name": "key", "type": "Edm.String", "key": true },  
    { "name": "albumTitle", "type": "Edm.String" },  
    { "name": "albumUrl", "type": "Edm.String", "filterable": false },  
    { "name": "genre", "type": "Edm.String" },  
    { "name": "genreDescription", "type": "Edm.String", "filterable": false },  
    { "name": "artistName", "type": "Edm.String" },  
    { "name": "orderableOnline", "type": "Edm.Boolean" },  
    { "name": "rating", "type": "Edm.Int32" },  
    { "name": "tags", "type": "Collection(Edm.String)" },  
    { "name": "price", "type": "Edm.Double", "filterable": false },  
    { "name": "margin", "type": "Edm.Int32", "retrievable": false },  
    { "name": "inventory", "type": "Edm.Int32" },  
    { "name": "lastUpdated", "type": "Edm.DateTimeOffset" }  
  ],  
  "scoringProfiles": [  
    {  
      "name": "boostGenre",  
      "text": {  
        "weights": {  
          "albumTitle": 1.5,  
          "genre": 5,  
          "artistName": 2  
        }  
      }  
    },  
    {  
      "name": "newAndHighlyRated",  
      "functions": [  
        {  
          "type": "freshness",  
          "fieldName": "lastUpdated",  
          "boost": 10,  
          "interpolation": "quadratic",  
          "freshness": {  
            "boostingDuration": "P365D"  
          }  
        },  
        {
          "type": "magnitude",  
          "fieldName": "rating",  
          "boost": 10,  
          "interpolation": "linear",  
          "magnitude": {  
            "boostingRangeStart": 1,  
            "boostingRangeEnd": 5,  
            "constantBoostBeyondRange": false  
          }  
        }  
      ]  
    }  
  ],  
  "suggesters": [  
    {  
      "name": "sg",  
      "searchMode": "analyzingInfixMatching",  
      "sourceFields": [ "albumTitle", "artistName" ]  
    }  
  ]   
}  

См. также