「Amazon SageMaker Feature Storeを使用して、あなたの生成型AIアプリケーションをパーソナライズしましょう」
「Amazon SageMaker Feature Storeを活用して、生成型AIアプリケーションをパーソナライズする方法」
大規模言語モデル(LLM)は、検索エンジン、自然言語処理(NLP)、医療、ロボット工学、コード生成などの分野で革新をもたらしています。これらのアプリケーションは、ダイナミックなチャットボットやAIアシスタントを通じて顧客体験を向上させるための小売業界にも適用され、説明や購買行動に基づいて顧客フィードバックを整理し、製品を推奨するために使用されます。
LLMアプリケーションの個別化は、最新のユーザー情報を統合することによって実現することができます。これは通常、複数のコンポーネントを統合することを意味します。そのようなコンポーネントの一つは、特徴ストアです。特徴ストアは、機械学習(ML)モデルのための特徴を保存、共有、管理するためのツールです。特徴は、MLモデルのトレーニングおよび推論中に使用される入力です。たとえば、映画を推奨するアプリケーションでは、特徴には以前の評価、好みのカテゴリ、人口統計情報などが含まれることがあります。 Amazon SageMaker Feature Storeは、MLモデルの特徴を保存、共有、管理するために特に設計された完全にマネージドなリポジトリです。別の重要なコンポーネントは、素早いエンジニアリングと異なるタイプのサブタスクの管理に適したオーケストレーションツールです。生成的AI開発者は、LangChainのようなフレームワークを使用することができます。これにより、LLMとオーケストレーションツールを統合してタスクの管理とプロンプトのエンジニアリングが可能となります。
最新のデータを動的に取得してパーソナライズされたコンテンツを生成するという概念を基に、LLMの使用は推奨システムの研究においても注目を浴びています。これらのアプローチの基本原理は、推奨タスク、ユーザープロファイル、アイテム属性、ユーザーとアイテムのインタラクションをカプセル化したプロンプトの構築にあります。これらのタスク固有のプロンプトは、LLMに供給され、特定のユーザーとアイテムの間の相互作用の可能性を予測することが求められます。論文 Personalized Recommendation via Prompting Large Language Modelsに述べられているように、推奨に基づいてエンゲージメントを誘導するプロンプトコンポーネントは、LLMが関連するコンテキストに注力し、ユーザーの好みに合わせるために重要な役割を果たします。
この記事では、ユーザープロファイルとアイテム属性を組み合わせてLLMを使用してパーソナライズされたコンテンツの推奨を生成するシンプルでパワフルなアイデアを詳しく説明します。本記事を通じて示されるように、これらのモデルは高品質でコンテキストに対応した入力テキストを生成するという大きな可能性を秘めています。これは、推奨の向上につながります。そのため、特徴ストア(ユーザープロファイルを表す)をLLMと統合してこれらのパーソナライズされた推奨を生成するプロセスを説明します。
- 「Amazon SageMakerを使用して、マルチモダリティモデルを用いた画像からテキストへの生成型AIアプリケーションを構築する」
- 「大規模言語モデルの品質をどのように向上させることができるのか? PIT:暗黙の自己改善フレームワークに会ってください」
- Mistral AIは、Mistral 7Bをオープンソース化します:多くのユースケースに適応可能な小型だけどパワフルな言語モデル
ソリューションの概要
映画エンターテインメント会社がメールキャンペーンを通じて異なるユーザーに映画を宣伝するシナリオを想像してみましょう。そのプロモーションには、よく知られている25本の映画が含まれており、それぞれのユーザーに対して興味や以前の評価の行動に基づいてトップ3の推奨を選択したいとします。
たとえば、ユーザーがアクション、ロマンス、SFなどの異なる映画ジャンルに興味を持っている場合、その特定のユーザーに対してトップ3の推奨される映画をAIシステムが判断することができます。さらにシステムでは、ユーザーごとに好みに合わせたトーンでパーソナライズされたメッセージを生成するかもしれません。この記事の後半でいくつかのパーソナライズされたメッセージの例を紹介します。
このAIアプリケーションには、以下の図に示すように、複数のコンポーネントが連携して動作します:
- ユーザープロファイリングエンジンは、ユーザーの過去の行動を入力として受け取り、彼らの興味を反映したユーザープロファイルを出力します。
- 特徴ストアはユーザープロファイルデータを維持します。
- メディアメタデータストアは推奨映画リストを最新に保ちます。
- 言語モデルは現在の映画リストとユーザープロファイルデータを取得し、ユーザーごとのトップ3の推奨映画を彼らの好みに合わせて書かれた自然な言語のレスポンスとして出力します。
- オーケストレーションエージェントは異なるコンポーネントを調整します。
要約すると、インテリジェントエージェントは、ユーザーと関連するデータとアイテムに基づいてプロンプトを構築し、ユーザーにカスタマイズされた自然言語の応答を配信することができます。これは、ユーザープロファイルに基づいてアイテムを推奨する典型的なコンテンツベースの推奨システムを表します。ユーザープロフィールは、特徴ストアに格納され、彼らの好みや嗜好に基づいています。これは通常、過去の評価などの前の行動に基づいて派生します。
次の図は、その動作を示しています。
アプリケーションは、ユーザーの推薦に応答するために以下の手順を実行します:
- ユーザープロファイリングエンジンは、ユーザーの歴史的な映画の評価を入力として受け取り、ユーザーの興味を出力し、SageMaker Feature Storeにフィーチャーを保存します。このプロセスは定期的に更新することができます。
- エージェントはユーザーIDを入力として受け取り、ユーザーの興味に基づいてプロンプトテンプレートを完成させます。
- エージェントはメディアのメタデータストアからプロモーションアイテムリスト(映画名、説明、ジャンル)を取得します。
- 興味のプロンプトテンプレートとプロモーションアイテムリストは、メールキャンペーンメッセージのためのLLMに供給されます。
- エージェントはパーソナライズされたメールキャンペーンをエンドユーザーに送信します。
ユーザープロファイリングエンジンは、各ユーザーのプロファイルを作成し、好みや興味を把握します。このプロファイルは、映画のジャンルなどのフィーチャーにマッピングされる要素を持つベクトルとして表されることができます。値はユーザーの興味のレベルを示します。フィーチャーストアのユーザープロファイルは、ユーザーの興味に合わせた個別の推薦を提案するためのシステムに使用されます。ユーザープロファイリングは、レコメンデーションシステム内のよく研究された領域です。簡単にするために、ユーザーの異なるカテゴリーごとの過去の評価を使用して、回帰アルゴリズムを構築し、全体的な好みを推測することができます。これは、XGBoostなどのアルゴリズムを使用して行うことができます。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)#データを取り込むfeature_group.ingest(data_frame=data_frame, max_workers=6, wait=True)
リアルタイムオンラインストレージの場合、次のコードを使用してユーザープロファイルをユーザーIDに基づいて抽出することができます:
feature_record = featurestore_runtime_client.get_record(FeatureGroupName=feature_group_name, RecordIdentifierValueAsString=customer_id)print(feature_record)
その後、上位3つの興味のある映画カテゴリーをランク付けして、下流の推薦エンジンに供給します:
ユーザーID: 42 上位3つのカテゴリー: [‘アニメーション’, ‘スリラー’, ‘アドベンチャー’]
当社のアプリケーションには2つの主要なコンポーネントがあります。最初のコンポーネントはフィーチャーストアからデータを取得し、2番目のコンポーネントはメタデータストアから映画のプロモーションリストを取得します。これらのコンポーネント間の調整は、LangChainのチェーンによって管理されます。これは、コンポーネントへの一連の呼び出しを表すシークエンスであります。
複雑なシナリオでは、アプリケーションはLLMやその他のツールへの固定されたシーケンスだけでなく、さらなる呼び出しのシーケンスが必要となる場合があります。ツールのスイートを備えたエージェントは、アクションのシーケンスを決定するためにLLMを使用します。一方、チェーンはハードコードされたアクションのシーケンスをエンコードしますが、エージェントは言語モデルの推論力を使用してアクションの順序と性質を指示します。
SageMaker Feature Storeを含むさまざまなデータソース間の接続は、以下のコードで示されています。取得したすべてのデータは統合され、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: # 詳細はノートブックを参照 return str(top_categories_df.values.tolist()) # Get promotion movie list from metadata store def read_promotion_list(self,) -> str: # 詳細はノートブックを参照 return output_string
さらに、Amazon SageMakerを使用して、LLMモデルをホストし、LangChain SageMakerエンドポイントとして公開します。LLMを展開するために、Amazon SageMaker JumpStartを使用します(詳細は、MetaのLlama 2基盤モデルが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: # ノートブックの詳細を参照する 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の推奨プロンプトと結果
研究 Prompting Large Language Modelsを使用したパーソナライズされた推奨に記載されているエンゲージメントに基づくプロンプトのハイレベルな概念に従い、私たちのプロンプト戦略の基本原則は、ユーザーの好みを統合し、プロンプトを作成することです。これらのプロンプトは、コンテンツの説明に含まれる属性をユーザーの好みと一致させるために設計されています。さらに詳しく説明すると、私たちのプロンプトは次の複数のコンポーネントから構成されます:
- コンテキストリレバンス – プロンプトテンプレートの最初の部分には、アイテム名(映画のタイトル)、説明(映画のあらすじ)、属性(映画のジャンル)などのメディアメタデータが組み込まれています。この情報を組み込むことで、プロンプトはLLMにより広範なコンテキストとより包括的な内容の理解を提供します。このコンテキスト情報は、コンテンツの説明と属性を通じて、アイテムをより良く理解するためにLLMを支援し、コンテンツの推奨シナリオでのユーティリティを向上させます。
- ユーザーの好みとの整合性 – ユーザーの好みを示すユーザープロファイルを考慮に入れることにより、潜在的な推奨はターゲットユーザーとの関連性のあるコンテンツの特性や特徴をより良く特定できます。この整合性により、アイテムの説明のユーティリティが向上し、ユーザーの好みに合った関連性のあるアイテムの推奨の効率が向上します。
- 推奨品質の向上 – エンゲージメントに基づくプロンプトは、ユーザーの好みを使用して関連性のあるプロモーションアイテムを特定します。また、ユーザーの好みを使用して、最終的な出力のトーンを調整することもできます。これにより、正確で情報豊かなパーソナライズされた体験が得られ、コンテンツ推奨システム全体のパフォーマンスが向上します。
次のコードは、プロンプトテンプレートの例を示しています:
prompt_template = """
当社の「Classic Cinema」は、お客様におすすめしたい映画を頻繁にプロモーションしています。今月は、いくつかの人気映画をプロモーションしています。
AIエージェントとして、「Classic Cinema」がユーザーに関連映画を推奨するためのメールキャンペーン作成をお手伝いします。プロモーション映画リストから厳選された映画のみを推奨するように、コンテキストリレバンスも考慮に入れてください。さらに、ユーザーの好みに合ったアイテムを提案することで、推奨品が関連していてユーザーの好みと一致する効果的な推奨を実現します。最終的には、ユーザーの好みのカテゴリーのトーンを反映したメールの草案を作成してください。メールの長さは100ワードを超えないようにしてください。
このコンテキストリレバンス映画リストからおすすめの映画をソースにしてください:
{promotion_movie_list}。
ユーザーは{user_preference}に興味を示しています。
おすすめは適切であり、メールのトーンは{user_preference}映画カテゴリに興味を持つ人々の好みを反映するようにしてください。
メールキャンペーンを100ワード以内に抑え、{user_preference}映画カテゴリに興味を持つ人々に魅力的な手紙にしてください。 ""
以下は、サイエンスフィクション、アドベンチャー、戦争ジャンルのユーザーの選好例です:
件名: 私たちのサイエンスフィクション、アドベンチャー、戦争映画で古典映画のフロンティアを探索しましょう!
親愛なる[名前]、時空を超えて旅に出る準備はできていますか?心を躍らせるアクションを体験し、戦場での勇気あるヒーローの勇ましい姿を目撃しましょう!他に探す必要はありません!クラシックシネマ proudlyは、サイエンスフィクション、アドベンチャー、戦争にご興味のある方々に特化した、厳選された映画のセレクションを誇りに思っています。
まず最初に紹介するのは、1980年の「スター・ウォーズ エピソード5/帝国の逆襲」です。このスターウォーズシリーズの古典的なインストールメントでは、ルーク・スカイウォーカーのジェダイマスターへの旅が描かれ、彼の友人たちは邪悪な帝国と対決します。画期的な特殊効果と記憶に残るキャラクターで、この映画はジャンルのファンには必見です。
次におすすめするのは、2014年の「インターステラー」です。時間と空間の謎に挑む思考を刺激するビジュアルに富んだ作品です。一団の探検家たちが人類を救うためのクエストに挑み、息をのむような風景を目にしながら宇宙の秘密を解き明かします。
最後におすすめするのは、1998年の「プライベート・ライアン」です。兄弟が戦死したパラトルーパーを探し出し救出する危険な任務を帯びた兵士たちの困難を描いた壮大で緊迫感のある戦争ドラマです。この批評的に称賛された映画は第二次世界大戦のヒーローたちへの力強いオマージュとなっています。これらの映画の名作を見逃すことのないように!今すぐ視聴してアドベンチャーのスリル、サイエンスフィクションの驚き、戦争の勇者たちの勇気を体験してください。楽しい鑑賞をお祈りしています。フォースと共にあれ!
よろしくお願いいたします。クラシックシネマ チーム
以下は、ドキュメンタリー、ミュージカル、ドラマのユーザーの選好の例です:
件名: ドキュメンタリー、ミュージカル、ドラマ愛好家のためのクラシックシネマのおすすめ
親愛なる[名前]、このメールがお手元に届き、お客様がご利用いただける様々な映画にお楽しみいただいていることを願っています。クラシックシネマでは、お客様の多様な好みに対応することを誇りに思っており、ドキュメンタリー、ミュージカル、ドラマの興味に合わせて厳選した3本の優れた映画をご紹介いたします。
まず最初におすすめするのは、1994年の「ショーシャンクの空に」です。腐敗した容赦のない刑務所制度の中で、2人の囚人の旅が希望と救済を見つける姿を描いた力強く感動的なドラマです。 gripping storyline、 outstanding performances、 timeless themesを持つこの映画は、手の込んだドラマが好きな人にはおすすめです。
次におすすめするのは、2001年の「ロード・オブ・ザ・リング1/旅の仲間」です。息をのむような映像、記憶に残るキャラクター、豊かに描かれた世界を融合させた壮大な冒険です。作り込まれたストーリーテリングの見本であり、深い歴史と文化を感じさせる中つ国にあなたを運び、もっともっとと望む気持ちにさせてくれるでしょう。
最後におすすめするのは、2002年の「ピアニスト」です。ポーランド人ユダヤ人ピアニストであるヴワディスワフ・シュピルマンが第二次世界大戦中にワルシャワのゲットーの破壊から生き残るために苦闘した本当の物語を描いた、深い感銘を与えるドキュメンタリーです。この映画は、想像を絶する悲劇に直面していても人間の精神の忍耐力と希望を思い起こさせる力強い作品です。これらのおすすめがお客様の興味に共感し、楽しいそして豊かな映画体験を提供できることを願っています。これらのタイムレスなクラシックを見逃さないでください。今すぐ視聴して、クラシックシネマの魔法を体感してください!よろしくお願いいたします。クラシックシネマ チーム
Llama 2 7B-Chat(以下のコードサンプルを参照)およびLlama 70Bの両方でテストを実施し、比較を行いました。どちらのモデルも優れた性能を発揮し、一貫した結論を導きました。最新のデータで満たされたプロンプトテンプレートを使用することで、任意のLLMをテストしやすくし、パフォーマンスとコストの適切なバランスを選ぶのに役立ちました。また、いくつかの共通の観察結果もいくつか得られましたので、それについても記載しておきます。
まず、提供されるおすすめはユーザーの好みと本当に一致していることがわかります。映画のおすすめは、アプリケーション内のさまざまな要素、特にフィーチャーストアに保存されたユーザープロファイルによってガイドされています。
さらに、電子メールのトーンもユーザーの好みに対応しています。LLMの高度な言語理解能力のおかげで、映画の説明やメールの内容をカスタマイズし、個々のユーザーに合わせることができます。
さらに、最終的な出力形式はプロンプトにデザインすることができます。例えば、私たちの場合では、挨拶の部分「Dear [Name]」はメールサービスによって埋められる必要があります。私たちの生成AIアプリケーションでは、個人を特定できる情報(PII)を公開しないようにしていますが、ポストプロセッシング中にこの情報を再導入する可能性があります。ただし、適切なレベルの許可が与えられていることを前提とします。
クリーンアップ
不必要なコストを回避するために、このソリューションの一部として作成したリソース、フィーチャーストア、SageMaker JumpStartで展開されたLLM推論エンドポイントなどを削除してください。
結論
LLMのパーソナライズされたおすすめの生成能力は非常に大きく、変革的です、特に適切なツールと組み合わせた場合です。SageMaker Feature StoreとLangChainを統合してプロンプトエンジニアリングを行うことで、開発者は高度にカスタマイズされたユーザープロファイルを構築し管理することができます。これにより、高品質でコンテキストに即した入力が得られ、おすすめのパフォーマンスが大幅に向上します。私たちの具体的なシナリオでは、これを個々のユーザーの映画のおすすめに適用して、非常にパーソナライズされた体験を実現する方法を見ました。
LLMの進化が続く中で、これらのモデルを使用してさらに興味深く、パーソナライズされた体験を提供するより革新的なアプリケーションが増えてくることを期待しています。可能性は無限であり、これらのツールを使用して何を作り出すかを楽しみにしています。SageMaker JumpStartやAmazon Bedrockなどのリソースが、AWSでのLLMを使用したおすすめのソリューションの構築を加速するために今利用可能ですので、強くおすすめします。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles
- 「Amazon SageMakerでのMLOpsによる堅牢な時系列予測」
- コンセプトグラフの紹介:3Dシーンのためのオープンボキャブラリーグラフ構造表現
- アクセンチュアは、AWS上でジェネレーティブAIサービスを使用して、ナレッジアシストソリューションを作成しました
- 「DEHBを使用したXGBoostとPythonを使った機械学習モデルの最適化:包括的なガイド」
- 「メタのCode Llamaコード生成モデルは、Amazon SageMaker JumpStartを介して利用可能になりました」
- エッジでの視覚品質検査のためのエンド・ツー・エンドMLOpsパイプラインの構築-パート2
- エッジでのビジュアル品質検査のためのエンドツーエンドのMLOpsパイプラインの構築-パート3