Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Внимание
Начиная с 20 сентября 2023 г. вы не сможете создавать новые ресурсы Персонализатора. Служба Персонализатора выводится из эксплуатации 1 октября 2026 года. Рекомендуем перейти на проект с открытым исходным кодом microsoft/learning-loop.
Персонализатор работает, изучая, что приложение должно показывать пользователям в определенном контексте. Контекст и действия — это два наиболее важных фрагмента информации, которые вы передаете в Персонализатор. Контекст представляет сведения о текущем пользователе или состоянии системы, а действия — это выбранные варианты.
Контекст
Хотя сведения для контекста зависят от приложений и вариантов использования, обычно они включают следующие данные:
- Демографические данные и данные профиля пользователя.
- Данные, извлеченные из заголовков HTTP, например агент пользователя, или данные, полученные на основе сведений HTTP, например географический поиск информации на основе IP-адресов.
- Информация о текущем времени, например, является ли день выходным (например, выходной или рабочий), утро или день, праздничный сезон или нет и так далее.
- Данные, извлеченные из мобильных приложений, например расположение, перемещения или уровень заряда батареи.
- Статистические данные о поведении пользователей в прошлом, например фильмы определенных жанров, которые пользователь просматривал чаще всего.
- Сведения о состоянии системы.
Ваше приложение отвечает за загрузку сведений о контексте из соответствующих баз данных, датчиков и систем, которые могут быть у вас. Если данные контекста не изменяются, вы можете добавить логику в приложение для кэширования этой информации перед отправкой в API ранжирования.
Действия
Действия представляют собой список вариантов.
Не отправляйте более 50 действий, когда происходит их ранжирование. Каждый раз это могут быть те же самые 50 действий, или они могут изменяться. Например, если у вас есть каталог из 10 000 товаров для приложения электронной коммерции, вы можете использовать рекомендательную систему или модуль фильтрации, чтобы определить 40 товаров, которые могут понравиться клиенту, и использовать Персонализатор, чтобы найти тот, который создаст максимальное вознаграждение в текущем контексте.
Примеры действий
Действия, которые вы отправляете в API ранжирования, будут зависеть от того, что вы пытаетесь персонализировать.
Далее приводятся некоторые примеры.
| Цель | Действие |
|---|---|
| Настройте, какая статья будет выделена на новостном сайте. | Каждое действие является потенциальной новостной статьей. |
| оптимизация размещения рекламы на веб-сайте; | Каждый элемент будет являться макетом или правилами для создания макета рекламы (например, вверху, справа, с маленькими изображениями, с большими изображениями). |
| Отображение персонализированного ранжирования рекомендуемых элементов на торговом веб-сайте. | Каждое действие является определенным продуктом. |
| предложение элементов пользовательского интерфейса, например фильтров, для применения к определенной фотографии; | Каждое действие может быть различным фильтром. |
| выбор ответа бота для уточнения намерения пользователя или предложения действия; | Каждое действие может быть вариантом интерпретации ответа. |
| Выбор элементов для отображения в верхней части списка результатов поиска | Каждое действие является одним из нескольких лучших результатов поиска. |
Загрузка действий из клиентского приложения
Характеристики, полученные из действий, обычно могут поступать из систем управления содержимым, каталогов и систем рекомендаций. Приложение отвечает за загрузку сведений о действиях из соответствующих доступных баз данных и систем. Если ваши действия не изменяются или постоянная их загрузка оказывает ненужное воздействие на производительность, вы можете добавить в приложение логику для кэширования этой информации.
Предотвращение ранжирования действий
В определенных ситуациях вам не нужно отображать некоторые действия для пользователей. Лучший способ предотвратить ранжирование действия — добавить его в список исключенных действий или не передать его в запрос ранга.
В некоторых случаях вы можете не захотеть, чтобы события обучались по умолчанию. Другими словами, вы хотите тренировать события только тогда, когда выполнено определенное условие. Например, персонализированная часть веб-страницы находится под сверткой (пользователям необходимо прокрутить страницу перед взаимодействием с персонализированным содержимым). В этом случае вы отрисовываете всю страницу, но хотите записывать событие только тогда, когда пользователь прокрутит страницу и сможет взаимодействовать с персонализированным контентом. В таких случаях следует отложить активацию событий, чтобы избежать назначения событий вознаграждения по умолчанию (и обучения), с которыми пользователь не мог взаимодействовать.
Компоненты
Контекст и возможные действия описаны с помощью функций. Функции представляют всю информацию, которую вы считаете важной для процесса принятия решений, чтобы максимизировать вознаграждения. Хорошей отправной точкой будет представить, что вам поручено выбрать лучшее действие в каждый момент времени и спросить себя: "Какая информация мне нужна, чтобы принять обоснованное решение?" Какие сведения доступны для описания контекста и каждого возможного действия?" Функции могут быть универсальными или конкретными для элемента.
Персонализатор не определяет, не ограничивает или не исправляет функции, которые вы можете отправлять для действий и контекста.
- Со временем вы можете добавлять и удалять признаки, связанные с контекстом и действиями. Персонализатор обучается из доступной информации.
- Для категориальных признаков нет необходимости предварительно определять возможные значения.
- Для числовых функций нет необходимости предварительно определять диапазоны.
- Имена функций, начинающиеся с символа нижнего подчеркивания
_, будут игнорироваться. - Список функций может быть большим (сотни), но мы рекомендуем начать с краткого набора функций и расширения по мере необходимости.
- Функции действий могут или не могут иметь корреляцию с функциями контекста .
- Функции, которые недоступны, должны быть опущены из запроса. Если значение определенной функции недоступно для данного запроса, опустите функцию для этого запроса.
- Избегайте отправки функций со значением NULL. Значение NULL будет обработано в виде строки со значением "null", что нежелательно.
Это нормально и естественно для функциональных возможностей, меняющихся с течением времени. Однако имейте в виду, что модель машинного обучения Персонализатора адаптируется на основе функций, которые он видит. Если отправить запрос со всеми новыми функциями, модель Персонализатора не сможет использовать прошлые события, чтобы выбрать лучшее действие для текущего события. Наличие "стабильного" набора функций (с повторяющимися функциями) поможет повысить производительность алгоритмов машинного обучения Персонализатора.
Признаки контекста
- Некоторые функции контекста могут быть доступны только в течение определенного времени. Например, если пользователь вошел на веб-сайт интернет-магазина продуктов, контекст будет содержать функции, описывающие историю покупки. Эти функции недоступны для гостевого пользователя.
- Должен быть хотя бы один компонент контекста. Персонализатор не поддерживает пустой контекст.
- Если функции контекста идентичны для каждого запроса, персонализатор выберет глобально лучшее действие.
Особенности действия
- Не все действия должны содержать одни и те же функции. Например, в интернет-магазине продуктов у попкорна для микроволновки будет функция "время приготовления", в то время как у огурца этой функции не будет.
- Функции для определенного идентификатора действия могут быть доступны некоторое время, но затем стать недоступными.
Примеры:
Ниже приведены хорошие примеры функций действий. Эти будут в значительной степени зависеть от конкретного приложения.
- Признаки с характеристиками действий. Например, это может быть фильм или телевизионная передача.
- Признаки, информирующие о том, как пользователи могли взаимодействовать с этим действием в прошлом. Например, этот фильм в основном смотрят люди из демографических групп A или B, и его обычно показывают не более одного раза.
- Признаки, информирующие о том, как пользователи видят действия. Например, включает ли афиша фильма на миниатюре лица, автомобили или ландшафты?
Типы поддерживаемых функций
Персонализатор поддерживает функции строковых, числовых и логических типов. Скорее всего, приложение будет использовать в основном строковые функции с несколькими исключениями.
Как типы функций влияют на машинное обучение в Персонализаторе
- Строки: Для строковых типов каждая комбинация "ключ-значение" (имя признака, значение признака) рассматривается как One-Hot представление (например, категория: "Продукты" и категория: "Мясо" будут внутренне представлены как различные признаки в модели машинного обучения).
- Числовой: используйте только числовые значения, если число является величиной, которая должна пропорционально повлиять на результат персонализации. Это очень зависит от сценария. Функции, основанные на числовых единицах, но где значение не является линейным , например возраст, температура или высота человека, лучше всего кодировать как категориальные строки. Например, возраст может быть закодирован как Age:"0-5", "Age":"6-10" и т. д. Высота может быть сегментирована как "Высота": "<5'0", "Высота": "5'0-5'4", "Высота": "5'5'5'11", "Высота":"6'0-6-4", "Высота":">6'4".
- Булев
- Поддерживаются только числовые массивы.
Проектирование признаков
- Используйте категориальные и строковые типы для функций, которые не являются величиной.
- Убедитесь, что для персонализации достаточно возможностей. Чем точнее должен быть контент, тем больше требуется функций.
- Существуют особенности различных плотностей. Признак является плотным, если много элементов группируется в несколько корзин. Например, тысячи видео можно классифицировать как продолжительные (от пяти минут) и короткие (до пяти минут). Это очень плотный признак. С другой стороны, эти же тысячи элементов могут иметь атрибут "заголовок", значение которого у всех этих элементов практически никогда не будут одинаковым. Это очень неплотный или разреженный признак.
Наличие характеристик высокой плотности помогает Персонализатору экстраполировать обучение от одного элемента к другому. Но если есть только несколько характеристик, и они чересчур концентрированные, Персонализатор попытается точно нацелить содержимое только на несколько категорий, чтобы можно было выбрать среди них.
Распространенные проблемы с проектированием функций и форматированием
- Отправка признаков с высокой кардинальностью. Функции, имеющие уникальные значения, которые, скорее всего, не повторяются во многих событиях. Например, ЛИЧНЫЕ данные, относящиеся к одному человеку (например, имя, номер телефона, номер кредитной карты, IP-адрес), не должны использоваться с Персонализатором.
- Отправка идентификаторов пользователей (user IDs) При большом количестве пользователей эта информация вряд ли влияет на обучение Персонализатора, чтобы максимизировать среднее значение вознаграждения. Отправка идентификаторов пользователей (даже если они не являются лично идентифицируемой информацией) вероятнее всего добавит шума в модель и не рекомендуется.
-
Отправка уникальных значений, которые редко происходят более чем несколько раз. Рекомендуется сегментировать функции на более высокий уровень детализации. Например, наличие таких функций, как
"Context.TimeStamp.Day":"Monday"или"Context.TimeStamp.Hour":13, может быть полезным, так как существует только 7 и 24 уникальных значения соответственно. Тем не менее,"Context.TimeStamp":"1985-04-12T23:20:50.52Z"очень точный и имеет чрезвычайно большое количество уникальных значений, что затрудняет для персонализатора обучение на них.
Улучшение функциональных наборов
Анализ поведения пользователя путем запуска задания оценки функций. Это позволяет вам просмотреть прошлые данные, чтобы определить, какие характеристики значительно способствуют положительным вознаграждениям, а какие способствуют в меньшей степени. Вы сможете увидеть, какие функции приносят пользу, и именно вам вместе с вашим приложением предстоит находить более эффективные функции для отправки в Персонализатор, чтобы ещё больше улучшить результаты.
Развертывание наборов функций с помощью искусственного интеллекта и Azure AI services
Искусственный интеллект и готовые к использованию Azure AI services могут быть очень мощным дополнением к Персонализатору.
Выполняя предварительную обработку элементов с помощью служб искусственного интеллекта, вы можете автоматически извлекать информацию, которая, вероятнее всего, будет релевантной для персонализации.
Например:
- Можно запустить фильм с помощью Индексатора видео, чтобы извлечь элементы сцены, текст, тональность и многие другие атрибуты. Эти атрибуты можно затем можно сделать более плотными, чтобы они отражали характеристики, которые отсутствуют в исходных метаданных элемента.
- Изображения можно открывать с помощью средств обнаружения объектов, лиц, тональности и т. д.
- Информация в тексте может быть улучшена путем извлечения сущностей и тональности и расширения этих сущностей с помощью графа знаний Bing.
Можно использовать несколько других Azure AI services, например
Использование встраиваний в качестве признаков
Встраивания из различных моделей машинного обучения оказались эффективными для Персонализатора.
- Эмбеддинги из крупных языковых моделей
- Встраивания от моделей Зрение ИИ Azure
Пространства имен
Кроме того, функции можно упорядочить с помощью пространств имен (релевантных как для контекста, так и для функций действия). Пространства имен можно использовать для группировки функций по теме, по источнику или любой другой группировке, которая имеет смысл в вашем приложении. Определяется, используются ли пространства имен и какие они должны быть. Пространства имен организуют возможности в отдельные наборы и устраняют неоднозначность у возможностей с похожими именами. Пространства имен можно считать префиксом, который добавляется к именам функций. Пространства имен не должны быть вложенными.
Ниже приведены примеры пространств имен признаков, используемые приложениями:
- Пользовательский_профиль_из_CRM
- Время
- Информация_о_мобильном_устройстве
- http_user_agent
- Разрешение видео
- DeviceInfo
- Погода
- Рейтинги рекомендаций продуктов
- текущее время
- Аналитика_ТекстовНовостей
Правила и руководства по именованию пространства имен
- Пространства имен не должны быть вложенными.
- Пространства имен должны начинаться с уникальных символов ASCII (рекомендуется использовать пространства имен, основанные на UTF-8). В настоящее время наличие пространств имен с одинаковыми первыми символами может привести к столкновениям, поэтому настоятельно рекомендуется начинать пространства имен с символов, отличных друг от друга.
- Пространства имен чувствительны к регистру. Например
user, иUserбудет считаться разными пространствами имен. - Имена функций могут повторяться в пространствах имен и рассматриваться как отдельные функции.
- Нельзя использовать следующие символы: коды < 32 (непечатные), 32 (пробел), 58 (двоеточие), 124 (вертикальная черта) и 126–140.
- Все пространства имен, начинающиеся с символа подчеркивания
_, будут игнорироваться.
Примеры JSON
Действия
При вызове функции Rank вы будете отправлять различные действия на выбор.
Объекты 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
}
}
]
}