Поделиться через


Контекст и действия

Внимание

Начиная с 20 сентября 2023 г. вы не сможете создавать новые ресурсы Персонализатора. Служба Персонализатора отменяется 1 октября 2026 года.

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

Контекст

Хотя сведения для контекста зависят от приложений и вариантов использования, обычно они включают следующие данные:

  • Демографические данные и данные профиля пользователя.
  • Данные, извлеченные из заголовков HTTP, например агент пользователя, или данные, полученные на основе сведений HTTP, например географический поиск информации на основе IP-адресов.
  • Данные о текущем времени, например дне недели, выходных и праздниках или рабочих днях, времени суток т. д.
  • Данные, извлеченные из мобильных приложений, например расположение, перемещения или уровень заряда батареи.
  • Статистические данные о поведении пользователей в прошлом, например фильмы определенных жанров, которые пользователь просматривал чаще всего.
  • Сведения о состоянии системы.

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

Действия

Действия представляют список параметров.

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

Примеры действий

Действия, которые вы отправляете в API ранжирования, будут зависеть от того, что вы пытаетесь персонализировать.

Далее приводятся некоторые примеры.

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

Загрузка действий из клиентского приложения

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

Предотвращение ранжирования действий

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

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

Функции

Контекст и возможные действия описаны с помощью функций. Функции представляют всю информацию, которую вы считаете важной для процесса принятия решений, чтобы максимизировать вознаграждения. Хорошая отправная точка заключается в том, чтобы представить, что вы задача выбрать лучшее действие на каждой метке времени и спросите себя: "Какая информация мне нужна, чтобы принять информированное решение? Какие сведения доступны для описания контекста и каждого возможного действия?" Функции могут быть универсальными или конкретными для элемента.

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

  • Со временем вы можете добавлять и удалять признаки, связанные с контекстом и действиями. Персонализатор обучается на доступной информации.
  • Для категориальных признаков нет необходимости предварительно определять возможные значения.
  • Для числовых функций нет необходимости предварительно определять диапазоны.
  • Имена функций, начиная с подчеркивания _ , будут игнорироваться.
  • Список функций может быть большим (сотни), но мы рекомендуем начать с краткого набора функций и расширения по мере необходимости.
  • Функции действий могут или не могут иметь корреляцию с функциями контекста .
  • Функции, которые недоступны, должны быть опущены из запроса. Если значение определенной функции недоступно для данного запроса, опустите функцию для этого запроса.
  • Избегайте отправки функций со значением NULL. Значение NULL будет обработано в виде строки со значением NULL, которое не указано.

Это нормально и естественно для функций, которые будут меняться с течением времени. Однако имейте в виду, что модель машинного обучения Персонализатора адаптируется на основе функций, которые он видит. Если отправить запрос со всеми новыми функциями, модель Персонализатора не сможет использовать прошлые события, чтобы выбрать лучшее действие для текущего события. Наличие "стабильного" набора функций (с повторяющимися функциями) поможет повысить производительность алгоритмов машинного обучения Персонализатора.

Признаки контекста

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

Признаки действия

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

Примеры:

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

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

Типы поддерживаемых признаков

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

Как типы функций влияют на машинное обучение в Персонализаторе

  • Строки. Для строковых типов каждая комбинация "ключ-значение" (имя функции, значение функции) рассматривается как одно-горячая функция (например, категория:"Производство" и категория:"Мясо" будет внутренне представлено как различные функции в модели машинного обучения).
  • Числовой: используйте только числовые значения, если число является величиной, которая должна пропорционально повлиять на результат персонализации. Это очень зависимый сценарий. Функции, основанные на числовых единицах, но где значение не является линейным , например возраст, температура или высота человека, лучше всего кодировать как категориальные строки. Например, возраст может быть закодирован как Age:"0-5", "Age":"6-10" и т. д. Высота может быть сегментирована как "Высота": "<5'0", "Высота": "5'0-5'4", "Высота": "5'5'5'11", "Высота":"6'0-6-4", "Высота":">6'4".
  • Boolean
  • Поддерживаются только числовые массивы.

Проектирование признаков

  • Используйте категориальные и строковые типы для функций, которые не являются величиной.
  • Убедитесь, что для персонализации достаточно возможностей. Чем более точным должно быть содержимое, тем больше требуется признаков.
  • Существуют особенности различных плотностей. Признак является плотным, если в несколько групп группируется много элементов. Например, тысячи видео можно классифицировать как продолжительные (от пяти минут) и короткие (до пяти минут). Это очень плотный признак. С другой стороны, эти же тысячи элементов могут иметь атрибут "заголовок", значение которого у всех этих элементов практически никогда не будут одинаковым. В таком случае признаки будут очень неплотными или разреженными.

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

Распространенные проблемы с проектированием функций и форматированием

  • Отправка функций с высокой кратностью. Функции, имеющие уникальные значения, которые, скорее всего, не повторяются во многих событиях. Например, ЛИЧНЫЕ данные, относящиеся к одному человеку (например, имя, номер телефона, номер кредитной карты, IP-адрес), не должны использоваться с Персонализатором.
  • Отправка идентификаторов пользователей с большим количеством пользователей вряд ли эта информация относится к обучению Персонализатора, чтобы максимально увеличить среднюю оценку вознаграждения. Отправка идентификаторов пользователей (даже если не PII) скорее всего добавит больше шума в модель и не рекомендуется.
  • Отправка уникальных значений, которые редко происходят более чем несколько раз. Рекомендуется сегментировать функции на более высокий уровень детализации. Например, наличие таких функций, как или "Context.TimeStamp.Hour":13 может быть полезным, так как "Context.TimeStamp.Day":"Monday" существует только 7 и 24 уникальных значений соответственно. Тем не менее, "Context.TimeStamp":"1985-04-12T23:20:50.52Z" очень точный и имеет чрезвычайно большое количество уникальных значений, что делает его очень трудным для Персонализатора, чтобы узнать из него.

Оптимизация наборов признаков

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

Развертывание наборов функций с помощью искусственного интеллекта и служб ИИ Azure

Искусственный интеллект и готовые к работе службы ИИ Azure могут быть очень мощным дополнением к Персонализатору.

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

Например:

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

Вы можете использовать несколько других служб ИИ Azure, например

Использование внедрения в качестве функций

Внедрение из различных моделей Машинное обучение оказалось аффективным признаком для Персонализатора

  • Внедрение из крупных языковых моделей
  • Внедрение из моделей визуального распознавания ИИ Azure

Пространства имен

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

Ниже приведены примеры пространств имен признаков, используемые приложениями:

  • User_Profile_from_CRM
  • Время
  • Mobile_Device_Info
  • http_user_agent
  • VideoResolution
  • DeviceInfo
  • Погода
  • Product_Recommendation_Ratings
  • current_time
  • NewsArticle_TextAnalytics

Соглашения об именовании пространства имен и рекомендации

  • Пространства имен не должны быть вложенными.
  • Пространства имен должны начинаться с уникальных символов ASCII (рекомендуется использовать пространства имен, основанные на UTF-8). В настоящее время наличие пространств имен с одинаковыми первыми символами может привести к столкновениям, поэтому настоятельно рекомендуется начинать пространства имен с символов, отличных друг от друга.
  • Пространства имен чувствительны к регистру. Например user , и User будет считаться разными пространствами имен.
  • Имена функций могут повторяться в пространствах имен и рассматриваться как отдельные функции.
  • Нельзя использовать следующие символы: коды < 32 (не печатные), 32 (пробел), 58 (двоеточие), 124 (канал) и 126–140.
  • Все пространства имен, начиная с подчеркивания _ , будут игнорироваться.

Примеры JSON

Действия

При вызове ранжирования вы будете отправлять разные действия для выбора возможных вариантов:

Объекты JSON могут включать вложенные объекты JSON и простые свойства и значения. Массив можно добавить, только если его элементы являются числами.

{
    "actions": [
    {
      "id": "pasta",
      "features": [
        {
          "taste": "salty",
          "spiceLevel": "medium",
          "grams": [400,800]
        },
        {
          "nutritionLevel": 5,
          "cuisine": "italian"
        }
      ]
    },
    {
      "id": "ice cream",
      "features": [
        {
          "taste": "sweet",
          "spiceLevel": "none",
          "grams": [150, 300, 450]
        },
        {
          "nutritionalLevel": 2
        }
      ]
    },
    {
      "id": "juice",
      "features": [
        {
          "taste": "sweet",
          "spiceLevel": "none",
          "grams": [300, 600, 900]
        },
        {
          "nutritionLevel": 5
        },
        {
          "drink": true
        }
      ]
    },
    {
      "id": "salad",
      "features": [
        {
          "taste": "salty",
          "spiceLevel": "low",
          "grams": [300, 600]
        },
        {
          "nutritionLevel": 8
        }
      ]
    }
  ]
}

Контекст

Контекст выражается в виде объекта JSON, отправляемого в API ранжирования:

Объекты JSON могут включать вложенные объекты JSON и простые свойства и значения. Массив можно добавить, только если его элементы являются числами.

{
    "contextFeatures": [
        {
            "state": {
                "timeOfDay": "noon",
                "weather": "sunny"
            }
        },
        {
            "device": {
                "mobile":true,
                "Windows":true,
                "screensize": [1680,1050]
            }
        }
    ]
}

Пространства имен

В следующем формате JSON, user, environment, deviceи activity являются пространствами имен.

Примечание.

Настоятельно рекомендуется использовать имена для пространств имен компонентов, основанных на UTF-8, и начинать с разных букв. Например, user, environment, device и activity начинаются с u, e, d и a. В настоящее время наличие пространств имен с теми же первыми символами может привести к столкновениям.

{
    "contextFeatures": [
        { 
            "user": {
                "profileType":"AnonymousUser",
                "Location": "New York, USA"
            }
        },
        {
            "environment": {
                "monthOfYear": "8",
                "timeOfDay": "Afternoon",
                "weather": "Sunny"
            }
        },
        {
            "device": {
                "mobile":true,
                "Windows":true
            }
        },
        {
            "activity" : {
                "itemsInCart": "3-5",
                "cartValue": "250-300",
                "appliedCoupon": true
            }
        }
    ]
}

Следующие шаги

Обучение с подкреплением