«Персонализируйте ваши приложения генеративного искусственного интеллекта с помощью хранилища функций Amazon SageMaker»
Особенность хранилища функций Amazon SageMaker настройте приложения искусственного интеллекта под ваш стиль
Большие языковые модели (LLM) революционизируют такие области, как поисковые системы, обработка естественного языка (NLP), здравоохранение, робототехника и генерация кода. Применение LLM также распространяется на розничную торговлю, где они могут улучшать опыт клиентов через динамичных чат-ботов и AI-помощников, а также на цифровой маркетинг, где они могут организовывать отзывы клиентов и рекомендовать товары на основе описаний и поведения покупателей.
Персонализация приложений LLM может быть достигнута путем интеграции актуальной информации о пользователе, что обычно включает несколько компонентов. Одним из таких компонентов является хранилище признаков, инструмент, предназначенный для хранения, совместного использования и управления признаками моделей машинного обучения (ML). Признаки – это входы, используемые во время обучения и вывода моделей ML. Например, в приложении, которое рекомендует фильмы, признаками могут быть предыдущие рейтинги, категории предпочтений и демографические данные. Amazon SageMaker Feature Store – это полностью управляемый репозиторий, специально разработанный для хранения, обмена и управления признаками моделей ML. Еще одним важным компонентом является оркестрационный инструмент, подходящий для своевременной разработки и управления различными типами подзадач. Разработчики генеративного искусственного интеллекта могут использовать фреймворки, такие как LangChain, предлагающие модули для интеграции с LLM и оркестрационные инструменты для управления задачами и создания подсказок.
Развивая идею динамического получения актуальных данных для создания персонализированного контента, использование LLM привлекло значительное внимание в недавних исследованиях рекомендательных систем. Основной принцип этих подходов заключается в создании подсказок, которые охватывают задачу рекомендации, профили пользователей, атрибуты элементов и взаимодействия пользователя-элемента. Эти задачно-специфические подсказки затем передаются в LLM, которая задает вероятность взаимодействия между конкретным пользователем и элементом. Как указано в статье Персонализированная рекомендация через подсказку от больших языковых моделей, составляющие подсказок, связанные с рекомендацией и направленные на вовлечение, играют важную роль в позволении LLM фокусироваться на соответствующем контексте и соответствовать предпочтениям пользователя.
В этой статье мы поясним простую, но мощную идею сочетания профилей пользователей и атрибутов элементов для генерации персонализированных рекомендаций контента с использованием LLM. Как будет продемонстрировано на протяжении статьи, эти модели обладают огромным потенциалом для генерации качественного контекстно-осознанного текста, что приводит к улучшенным рекомендациям. Чтобы проиллюстрировать это, мы расскажем вам о процессе интеграции хранилища признаков (представляющего профили пользователей) с LLM для создания этих персонализированных рекомендаций.
- Как улучшить качество больших языковых моделей? Знакомьтесь с PIT неявной системой самовоспроизводства
- Познакомьтесь с ConceptGraphs Структурированное графовое представление с открытым словарем для трехмерных сцен
- «Mistral AI открывает исходный код Mistral 7B небольшую, но мощную модель языка, способную адаптироваться ко многим сценариям использования»
Обзор решения
Давайте представим ситуацию, в которой киноакционерная компания продвигает фильмы различным пользователям с помощью электронной рассылки. Реклама содержит 25 известных фильмов, и мы хотим выбрать три лучшие рекомендации для каждого пользователя на основе их интересов и предыдущих оценок.
Например, имея в виду интересы пользователя к различным жанрам фильмов, таким как боевики, романтика и фантастика, мы можем позволить ИИ-системе определить три рекомендованных фильма для этого конкретного пользователя. Кроме того, система может генерировать персонализированные сообщения для каждого пользователя в оттенке, подходящем их предпочтениям. В этой статье мы приводим некоторые примеры персонализированных сообщений.
Это приложение ИИ должно включать несколько взаимосвязанных компонентов, как показано на следующей диаграмме:
- Механизм профилирования пользователя принимает во внимание предыдущие действия пользователя и выдает профиль пользователя, отражающий их интересы.
- Хранилище признаков содержит данные профилей пользователей.
- Медиа-хранилище метаданных поддерживает актуальный список промоушенов фильмов.
- Языковая модель берет текущий список фильмов и данные профилей пользователей и выдает три рекомендованных фильма для каждого пользователя, написанных на их предпочтительном тональном регистре.
- Оркестрационный агент координирует различные компоненты.
В заключение, интеллектуальные агенты могут создавать подсказки, используя данные, связанные с пользователем и элементами, и предоставлять настраиваемые естественно-языковые ответы пользователям. Это представляло бы типичную систему рекомендации на основе контента, которая рекомендует элементы пользователям на основе их профилей. Профиль пользователя сохраняется и поддерживается в хранилище признаков и охватывает их предпочтения и вкусы. Обычно он формируется на основе их предыдущих действий, таких как оценки.
Ниже приведена диаграмма, иллюстрирующая, как это работает.
Приложение выполняет следующие шаги для предоставления ответов на рекомендацию пользователя:
- Движок профилирования пользователя, который берет исторический рейтинг фильмов пользователя в качестве входных данных, выдает интересы пользователя и хранит функцию в SageMaker Feature Store. Этот процесс может быть обновлен в плановом порядке.
- Агент берет идентификатор пользователя в качестве входных данных, ищет интересы пользователя и завершает шаблон запроса, следуя интересам пользователя.
- Агент берет список предложений (название фильма, описание, жанр) из магазина медиа-метаданных.
- Шаблон запроса интересов и список предложений подаются на вход LLM для создания сообщений рекламной кампании по электронной почте.
- Агент отправляет персонализированную рекламную кампанию по электронной почте конечному пользователю.
Движок профилирования пользователя создает профиль для каждого пользователя, записывая их предпочтения и интересы. Этот профиль может быть представлен в виде вектора с элементами, соответствующими характеристикам, таким как жанры фильмов, с значениями, указывающими уровень интереса пользователя. Профили пользователей в хранилище функций позволяют системе предложить персонализированные рекомендации, соответствующие их интересам. Профилирование пользователей – это широко изучаемая область в системах рекомендаций. Чтобы упростить, вы можете создать алгоритм регрессии, используя предыдущие рейтинги пользователя в разных категориях, чтобы заключить их общие предпочтения. Это можно сделать с помощью алгоритмов, таких как XGBoost.
Обзор кода
В этом разделе мы приводим примеры кода. Полный обзор кода доступен в репозитории GitHub.
После получения функции интересов пользователя от движка профилирования пользователя мы можем сохранить результаты в хранилище функций. SageMaker Feature Store поддерживает пакетную интеграцию функций и онлайн-хранение для предварительного вывода в реальном времени. Для внедрения данных, они могут обновляться в автономном режиме, тогда как вывод должен происходить в миллисекундах. SageMaker Feature Store гарантирует, что автономные и онлайн-наборы данных остаются синхронизированными.
Для внедрения данных используется следующий код:
from sagemaker.feature_store.feature_group import FeatureGroupfeature_group_name = 'user-profile-feature-group'feature_group = FeatureGroup(name=feature_group_name, feature_definitions=feature_definitions, sagemaker_session=sess)#Ingest datafeature_group.ingest(data_frame=data_frame, max_workers=6, wait=True)
Для онлайн-хранения в реальном времени мы могли бы использовать следующий код для извлечения профиля пользователя на основе идентификатора пользователя:
feature_record = featurestore_runtime_client.get_record(FeatureGroupName=feature_group_name, RecordIdentifierValueAsString=customer_id)print(feature_record)
Затем мы ранжируем три самых интересующих категории фильмов, чтобы подать их на вход движку рекомендаций:
Идентификатор пользователя: 42 Топ-3 категории: [‘Анимация’, ‘Триллер’, ‘Приключения’]
Наше приложение использует два основных компонента. Первый компонент извлекает данные из хранилища функций, а второй компонент получает список промоушенов фильмов из хранилища метаданных. Взаимодействие между этими компонентами управляется с помощью Chains от LangChain, которые представляют собой последовательность вызовов компонентов.
Стратегия принятия решений между различными источниками данных, включая хранилище функций SageMaker, продемонстрирована в следующем коде. Все полученные данные объединяются для создания исчерпывающего запроса, который служит входными данными для LLM. Мы более подробно рассмотрим особенности проектирования запросов в следующем разделе. Приведено определение шаблона запроса, который взаимодействует с несколькими источниками данных:
from langchain.prompts import StringPromptTemplateclass FeatureStorePromptTemplate(StringPromptTemplate): feature_group_name = 'user-profile-feature-group' def format(self, **kwargs) -> str: user_id = kwargs.pop("user_id") feature_record = self.fetch_user_preference_from_feature_store(user_id) user_preference = self.rank_user_preference(feature_record) kwargs["promotion_movie_list"] = self.read_promotion_list() kwargs["user_preference"] = user_preference return prompt.format(**kwargs) def fetch_user_preference_from_feature_store(self, user_id): boto_session = boto3.Session() featurestore_runtime_client = boto_session.client('sagemaker-featurestore-runtime') feature_record = featurestore_runtime_client.get_record(FeatureGroupName=self.feature_group_name, RecordIdentifierValueAsString=str(user_id)) return feature_record['Record'] # Rank Top_3_Categories for given user's preference def rank_user_preference(self, data) -> str: # refer to the details in the notebook return str(top_categories_df.values.tolist()) # Get promotion movie list from metadata store def read_promotion_list(self,) -> str: # refer to the details in the notebook return output_string
Кроме того, мы используем Amazon SageMaker для размещения нашей модели LLM и ее открытия в качестве точки входа LangChain SageMaker. Чтобы развернуть LLM, мы используем Amazon SageMaker JumpStart (дополнительные сведения см. в статье Llama 2 Основные модели от Meta теперь доступны в Amazon SageMaker JumpStart). После развертывания модели мы можем создать модуль LLM:
from langchain import PromptTemplate, SagemakerEndpointfrom langchain.llms.sagemaker_endpoint import LLMContentHandlerclass ContentHandler(LLMContentHandler): def transform_input(self, prompt: str, model_kwargs: dict) -> bytes: # Подробности см. в записной книжкеДля ##спе辍фического вывода последовательность->str:def transform_output(self, output: bytes) -> str: # Подробности см. в записной книжкеcontent_handler = ContentHandler()sm_llm = SagemakerEndpoint( endpoint_name = endpoint_name, region_name = aws_region, model_kwargs = parameters, endpoint_kwargs={"CustomAttributes": 'accept_eula=true'}, content_handler = content_handler,)
В контексте нашего приложения агент запускает последовательность шагов, называемую LLMChain. Он интегрирует шаблон подсказки, модель и защитные меры для форматирования пользовательского ввода, передачи его модели, получения ответа и затем проверки (и, при необходимости, исправления) вывода модели.
from langchain.chains import LLMChainllmchain = LLMChain(llm=sm_llm, prompt=prompt_template)email_content = llmchain.run({'user_id': 4})print(email_content)
В следующем разделе мы рассмотрим предварительную подготовку ввода для LLM для получения ожидаемых результатов.
LLM-рекомендация: инструкции для подсказки и результаты
Следуя высокоуровневой концепции подсказки с учетом взаимодействия, описанной в исследовательском исследовании Персонализированная рекомендация с помощью больших моделей языка, основным принципом нашей стратегии подсказки является интеграция пользовательских предпочтений при создании подсказок. Эти подсказки разработаны для направления LLM на более эффективное выявление атрибутов в описании содержания, соответствующих пользовательским предпочтениям. Для более подробного описания состава нашей подсказки она состоит из нескольких компонентов:
- Контекстная связность – Первая часть нашего шаблона подсказки включает медиа-метаданные, такие как название объекта (название фильма), описание (синопсис фильма) и атрибут (жанр фильма). Включение этой информации в подсказку предоставляет LLM более широкий контекст и более полное понимание содержания. Эта контекстная информация помогает LLM лучше понять объект через его описание и атрибуты, тем самым улучшая его полезность в сценариях рекомендации контента.
- Выравнивание с пользовательскими предпочтениями – Учитывая профиль пользователя, обозначающий его предпочтения, потенциальные рекомендации лучше способны определить характеристики и особенности контента, соответствующие целевым пользователям. Это выравнивание улучшает полезность описаний объектов, так как оно повышает эффективность рекомендации объектов, связанных с пользовательскими предпочтениями.
- Улучшение качества рекомендации – Подсказка с учетом взаимодействия использует пользовательские предпочтения для определения соответствующих рекламных объектов. Мы также можем использовать пользовательские предпочтения для настройки стиля LLM для конечной выдачи. Это может привести к точному, информативному и персонализированному опыту, таким образом, улучшая общую производительность системы рекомендации контента.
Нижеприведенный код показывает пример шаблона подсказки:
prompt_template = """
Наша компания «Classic Cinema» часто продвигает фильмы, которые мы стремимся рекомендовать нашим клиентам. В этом месяце у нас есть несколько популярных фильмов на акции.
Ваша задача как ИИ-агента состоит в том, чтобы помочь «Classic Cinema» создать электронную рассылку, рекомендующую пользователям соответствующие фильмы. Рекомендации должны соответствовать нескольким руководящим принципам, включая контекстную связность, обеспечивая, что рекомендации строго относятся к нашему списку акционных фильмов. Кроме того, рекомендации должны соответствовать предпочтениям пользователей, предлагая объекты, которые соответствуют их интересам. Вам нужно предоставить ровно три рекомендуемых фильма. Наконец, пожалуйста, отразите стиль предпочитаемых категорий пользователя в электронной почте. Электронное письмо не должно превышать 100 слов.
Рекомендуемые фильмы должны быть взяты из этого списка фильмов, наиболее соответствующих контексту:
{promotion_movie_list}.
Пользователь проявил интерес к {user_preference}.
Пожалуйста, убедитесь в том, что рекомендации актуальны, а тональность электронной почты отражает вкусы тех, кто интересуется фильмами в категории {user_preference}.
Обратитесь к тем, кто интересуется фильмами в категории {user_preference}, и соблюдайте ограничение в 100 слов для электронной рассылки. """
Вот пример результата с предпочтениями пользователя в жанрах научной фантастики, приключений и военных:
Тема: Исследуйте просторы классического кинематографа с нашими фильмами научной фантастики, приключений и войны!
Уважаемый [Имя], Вы готовы отправиться в путешествие по времени и пространству, испытать бурю эмоций и стать свидетелем бравуры сражений на поле битвы? Не ищите дальше! Classic Cinema с гордостью представляет наш тщательно подобранный выбор фильмов, созданный специально для удовлетворения ваших интересов в научной фантастике, приключениях и военном жанрах.
Во-первых, у нас есть культовый фильм «Звездные войны: Эпизод V – Империя наносит ответный удар» (1980). Эта классическая часть саги Звездных войн рассказывает о пути Люка Скайуокера к становлению Джедая, в то время как его друзья сражаются с злобной Империей. С впечатляющими спецэффектами и запоминающимися персонажами, этот фильм обязателен для просмотра любого фаната жанра.
Затем мы рекомендуем «Межзвездный» (2014), фильм, задающий серьезные вопросы и поражающий визуально, глубоко погружаясь в тайны времени и пространства. Когда группа исследователей отправляется в путешествие, чтобы спасти человечество, они сталкиваются с захватывающими пейзажами и раскрывают секреты Вселенной.
И, наконец, у нас есть фильм «Спасти рядового Райана» (1998), захватывающая и интенсивная военная драма, рассказывающая о группе солдат, которые выполняют опасную миссию по поиску и спасению парашютиста, потерявшего братьев на войне. Этот критически признанный фильм является мощной хвалой героям Второй мировой войны. Не упустите возможность увидеть эти шедевры кино! Приятного просмотра, и да пребудет с вами сила!
С наилучшими пожеланиями,команда Classic Cinema
Вот еще один пример результата с предпочтениями пользователя в документальном, музыкальном и драматическом жанрах:
Тема: Рекомендации Classic Cinema для любителей документального, музыкального и драматического кино Уважаемый [Имя], Мы надеемся, что это письмо находит вас в порядке и что вы наслаждаетесь разнообразием фильмов, доступных на нашей платформе. Classic Cinema гордится тем, что учитывает разнообразные предпочтения наших клиентов, и мы подобрали три исключительных фильма, которые, на наш взгляд, подойдут вашим интересам в документальном, музыкальном и драматическом жанрах.
Во-первых, у нас есть фильм «Побег из Шоушенка» (1994), мощная и вдохновляющая драма, рассказывающая о пути двух заключенных, которые находят надежду и искреннюю жизненную цель в коррумпированной и жестокой тюремной системе. С захватывающим сюжетом, выдающимися исполнениями и вечными темами, этот фильм обязателен к просмотру для всех, кто любит качественную драму.
Далее, мы рекомендуем «Властелин колец: Братство Кольца» (2001), эпическое приключение, объединяющее захватывающую визуальность, запоминающихся персонажей и богатый мир с богатой историей и культурой. Этот фильм – учебник по искусству рассказа, с глубоким ощущением истории и культуры, которые перенесут вас в Средиземье и заставят захотеть большего.
В заключение, мы предлагаем “Пианиста” (2002), глубокий и трогательный документальный фильм, рассказывающий историю Владислава Шпильмана, польского еврейского пианиста, который борется за выживание во время разрушения варшавского гетто во время Второй мировой войны. Этот фильм является мощным напоминанием о способности человеческого духа к стойкости и надежде даже в условиях несказуемой трагедии. Мы надеемся, что эти рекомендации будут соответствовать вашим интересам и подарят вам приятный и просвещающий киноопыт. Не упустите возможность посмотреть эти вечные классики – смотрите и открывайте для себя волшебство Classic Cinema! С наилучшими пожеланиями, Команда Classic Cinema
Мы проводили тесты с помощью моделей Llama 2 7B-Chat (см. приведенный ниже образец кода) и Llama 70B для сравнения. Обе модели показали хорошие результаты, давая последовательные выводы. Используя шаблон запроса, заполненный актуальными данными, нам было легче тестировать произвольные LLMs, помогая выбрать правильный баланс между производительностью и стоимостью. Мы также сделали несколько общих наблюдений, которые стоит отметить.
Во-первых, мы видим, что рекомендации, предоставленные, действительно соответствуют предпочтениям пользователя. Рекомендации фильмов определяются различными компонентами в нашем приложении, в частности, профилем пользователя, хранящимся в хранилище функций.
Кроме того, тональность электронных писем соответствует предпочтениям пользователя. Благодаря продвинутым возможностям понимания языка LLM, мы можем настраивать описания фильмов и содержание электронных писем, адаптируя их под каждого отдельного пользователя.
Кроме того, конечный формат вывода может быть разработан в виде подсказки. Например, в нашем случае, приветствие “Уважаемый [Имя]” должно быть заполнено службой электронной почты. Важно отметить, что хотя мы избегаем раскрытия лично идентифицируемой информации (ЛИИ) в нашем генеративном приложении ИИ, есть возможность восстановления этой информации в процессе постобработки, если предоставлены соответствующие уровни разрешений.
Очистка
Чтобы избежать ненужных расходов, удалите ресурсы, созданные в рамках этого решения, включая хранилище функций и развернутый конечный пункт вывода LLM с помощью SageMaker JumpStart.
Заключение
Мощь LLM в создании персонализированных рекомендаций огромна и преобразовательна, особенно когда она используется с правильными инструментами. Интегрируя функциональное хранилище SageMaker и LangChain для создания подсказок, разработчики могут создавать и управлять высокоточными профилями пользователей. Это приводит к качественным входным данным, учитывающим контекст и значительно улучшающим производительность рекомендаций. В нашем иллюстративном сценарии мы видели, как это можно применить для настройки рекомендаций фильмов под индивидуальные пользовательские предпочтения, что приводит к высоко персонализированному опыту.
По мере развития области LLM, мы ожидаем появление более инновационных приложений, которые используют эти модели для доставки еще более интересных персонализированных впечатлений. Возможности неограничены, и мы с нетерпением ждем, что вы создадите с помощью этих инструментов. С такими ресурсами, как SageMaker JumpStart и Amazon Bedrock, доступными для ускорения разработки генеративных приложений ИИ, мы настоятельно рекомендуем исследовать создание рекомендательных решений с использованием LLM на AWS.