Google Cloudを使用してレコメンドシステムを構築する

Build recommendation system using Google Cloud.

Google Cloud Recommendation AIを使用して高度なレコメンドシステムを実装する

source pixabay

GoogleのMLエンジニアがあなたのためにレコメンドシステムをウェブサイトやアプリケーションに実装してくれると想像してみてください。Google Cloud Recommendation AIを使用すると、Youtube、Google広告、その他のGoogle製品で使用されているレコメンドシステムを活用して、パーソナライズを提供できます。

この記事では、Google Cloud Recommendation AIを実装する方法を説明します。これにより、顧客に個人的な体験を提供できます。

Noon、IKEA、KINGUIN、その他多くの企業がGoogle Recommendations AIを使用して、チャネル全体で高性能なレコメンドを提供しています。

Initial Impact of Recommendation AI for one of the Businesses that, by Muffaddal

Google Cloud Recommendation AIを実装する方法

レコメンドAIには、2つのものが必要です。1つはユーザーのアクティビティ、もう1つはユーザーがアクティビティを実行する製品の詳細です。

アクティビティまたはアクションはイベントとして送信され、アイテムの詳細はRecommendation AIのカタログに格納されます。必要な量のイベントとカタログの詳細があると、ユーザーの過去の行動と属性に基づいて個人的なリストを提供するためにMLモデルをトレーニングできます。

それでは、それぞれの詳細について詳しく説明していきましょう。

Data Pipeline to use Recommendation AI of Google Cloud, by Muffaddal

注: 実装には強力なGoogle Cloud、SQL、および技術的な知識が必要です。必要であれば、お知らせください。

1- 製品の詳細をインポートする

カタログには多くのフィールドと属性がありますが、idnametitle、およびcategoriesは必須フィールドで提供する必要があります。

カタログで使用可能なすべてのフィールドの詳細については、こちらをご覧ください。

製品の詳細が既にBiqQueryに存在すると仮定すると、BigQueryとRecommendation AIの統合を活用して、カタログデータをインポートします。

<img alt

カタログに設定できるフィールドがたくさんあります。より多くのデータを生成できるほど良いです。このデモ用途では、最も一般的なものにとどまります。nullableフィールドはオプションです。

ここでtypeフィールドは、製品がバリアントかプライマリかを決定する場所です。この記事ではPRIMARYを選択します。詳細はこちらをご覧ください。

テーブルが準備できたら、以下のクエリを使用してメインテーブルからカタログデータをこのテーブルに挿入できます。

insert into `recommendersystem.product_data` (  name,id,type,primaryProductId,collectionMemberIds,gtin,categories,title,brands,description,languageCode,attributes,  tags,      priceInfo,rating,expireTime,ttl,availableTime,availability,availableQuantity,fulfillmentInfo, uri, images,audience,colorInfo,sizes,materials,patterns,conditions,retrievableFields,publishTime,promotions)SELECT    name,   cast(id as string) as id,   "PRIMARY" as type,    cast(id as string) as primaryProductId,    null as collectionMemberIds,    null as gtin,   array [categories] as categories,   name as title,   array[title] as brands,   ifnull(description,name) as description,    null as languageCode,   [      struct(      'product_location' as key,  STRUCT(array[ifnull(city,"empty")] as text,  cast(null as ARRAY<FLOAT64>) as numbers, true as searchable, true as indexable ) as value      )]   as attributes,   ARRAY_CONCAT(      [ifnull(location,"empty")],      [ifnull(categories,"empty")]          ) as tags,    null as  priceInfo,    null as  rating,    null as  expireTime,    null as  ttl,    null as  availableTime,    null as  availability,    null as  availableQuantity,    null as  fulfillmentInfo,   url,   array[struct(image_url) as uri, null as height, null as width)] as images,   null as audience,   null as colorInfo,   null as sizes,   null as materials,   null as patterns,   null as conditions,   null as retrievableFields,   null as publishTime,   null as promotionsFROM `product.product_details`

新しいテーブルにデータが利用可能になると、Recommendation AIにインポートする準備が整います。

Google CloudのRetail AIのDataタブで、左上のImportをクリックしてデータをインポートします。

Import catalog details to Recommendation AI, by Muffaddal

下の画像に示すようなパネルが表示されます。インポートタイプで「Product Catalog」を選択し、データソースで「BigQuery」を選択します。BigQueryテーブルパスを入力し、ブランチを選択してインポートを実行します。

Import catalog panel of Recommendation AI, by Muffaddal

数分待って、Retail AIのデータテーブルでカタログの詳細を表示できます。

2- 過去のイベントをインポートする

次に、ユーザーの過去のデータをRecommendation AIにインポートする必要があります。このステップはオプションですが、これを行うことで、より良い機械学習モデルを構築できます。

カタログと同様に、必要な形式でBigQueryテーブルにイベントを持っている必要があります。

以下は、Recommendation AIが受け入れるイベントです。

Events that can be sent to Recommendation AI

その中で、home-page-viewdetail-page-viewedadd-to-cart、およびpurchase-completeが、AIモデルを完全にパワーアップするために必要です。

これらのイベントのそれぞれには、データのインポートに必要な特定のテーブルスキーマがあります。詳細については、ここで見つけることができます。

1- home-page-viewdetail-page-viewed、およびadd-to-cartのテーブルスキーマは次のとおりです。

[    {        "name": "eventType",        "type": "STRING",        "mode": "REQUIRED"    },    {        "name": "visitorId",        "type": "STRING",        "mode": "REQUIRED"    },    {        "name": "eventTime",        "type": "STRING",        "mode": "REQUIRED"    }, {   "name": "productDetails",   "type": "RECORD",   "mode": "REPEATED",   "fields": [     {       "name": "product",       "type": "RECORD",       "mode": "REQUIRED",       "fields": [         {           "name": "id",           "type": "STRING",           "mode": "REQUIRED"         }       ]     },     {       "name": "quantity",       "type": "INTEGER",       "mode": "REQUIRED"     }   ] },    {        "name": "attributes",        "type": "RECORD",        "mode": "NULLABLE",        "fields": [            {                "name": "deviceType",                "type": "RECORD",                "mode": "NULLABLE",                "fields": [                    {                        "name": "text",                        "type": "STRING",                        "mode": "REPEATED"                    }                ]            }        ]    }]

2- purchase-completeイベントのスキーマは次のとおりです。

[ {   "name": "eventType",   "type": "STRING",   "mode": "REQUIRED" }, {   "name": "visitorId",   "type": "STRING",   "mode": "REQUIRED" }, {   "name": "eventTime",   "type": "STRING",   "mode": "REQUIRED" }, {   "name": "productDetails",   "type": "RECORD",   "mode": "REPEATED",   "fields": [     {       "name": "product",       "type": "RECORD",       "mode": "REQUIRED",       "fields": [         {           "name": "id",           "type": "STRING",           "mode": "REQUIRED"         }       ]     },     {       "name": "quantity",       "type": "INTEGER",       "mode": "REQUIRED"     }   ] }, {   "name": "purchaseTransaction",   "type": "RECORD",   "mode": "REQUIRED",   "fields": [     {       "name": "revenue",       "type": "FLOAT",       "mode": "REQUIRED"     },     {       "name": "currencyCode",       "type": "STRING",       "mode": "REQUIRED"     }   ] }, {    "name": "attributes",    "type": "RECORD",    "mode": "NULLABLE",    "fields": [        {            "name": "deviceType",            "type": "RECORD",            "mode": "NULLABLE",            "fields": [                {                    "name": "text",                    "type": "STRING",                    "mode": "REPEATED"                }            ]        },        {            "name": "cityName",            "type": "RECORD",            "mode": "NULLABLE",            "fields": [                {                    "name": "text",                    "type": "STRING",                    "mode": "REPEATED"                }            ]        }    ]}]

テーブルが作成されたら、以下のクエリを使用して新しいテーブルにデータを挿入できます。

1- home-page-viewedのSQL挿入クエリは次のとおりです。

insert into `recommendersystem.user_event_home_page_view` (eventType, visitorId,eventTime,attributes)  SELECT   'home-page-view' as eventType,  visitorId,  eventTime,  struct(      struct([deviceType] as text)as deviceType,      struct([city] as text)as cityName   )    as attributes,  from (    select *,  deviceType from  `recommendersystem.user_event_history` 

2- detail-page-viewedadd-to-cartのSQL挿入クエリは

「recommendersystem.user_event_add_to_cart」に挿入するSQL挿入クエリ(eventType、visitorId、eventTime、productDetails、attributes)は以下の通りです。
SELECT 'add-to-cart' as eventType,visitorId,eventTime,[    struct( struct(product_id  as id) as product , 1 as quantity) ] as productDetails, struct(     struct([deviceType] as text)as deviceType,     struct([city] as text)as cityName        )   as attributes,from (  select *,  deviceType from  `recommendersystem.user_event_history` -- limit 100)

3-「purchase-complete」イベントのSQL挿入クエリは以下の通りです。
insert into `recommendersystem.user_event_purchase_complete` (eventType, visitorId,eventTime,productDetails,purchaseTransaction,attributes)SELECT 'purchase-complete' as eventType,cast( visitorId as string) as visitorId,eventTime,[    struct( struct(product_id  as id) as product , 1 as quantity) ] as productDetails,struct(safe_cast(revenue as float64) as revenue, 'USD' as currencyCode) as purchaseTransaction, struct(     struct([deviceType] as text)as deviceType,     struct([city] as text)as cityName        )   as attributesfrom (  select *, deviceType from  `recommendersystem.user_purchase_event` )

注意:訪問者IDとユーザーIDは同じか異なる場合があります。製品を使用する前にユーザーがログインする必要があるかどうかによります。

注意:Recommendation AIはGoogle Analytics 4 raw dataもサポートしています。その場合は変換を実行する必要はありません。

履歴データをインポートするには、retail aiのデータタブに移動して、トップのインポートをクリックします。

インポートパネルで、インポートタイプをユーザーイベントとして選択し、次のオプションを選択してインポートします。



ユーザーイベントがRecommendation AIに正常にインポートされました。

3-リアルタイムイベントの送信

次に、ユーザーにリアルタイムイベントを送信して、ユーザーが時間をかけてプラットフォームと関わるにつれてAIモデルを再トレーニングし、おすすめを改善する必要があります。 Recommendation AIにユーザーイベントを送信する方法には、JavaScriptピクセル、API、GTMの3つの方法があります。 この記事では、Webサイトまたはアプリケーションの性質に関係なく、APIを使用します。 以下は、home-page-viewedイベントを送信するためのcurlコールです。 curl -X POST \ -H "Authorization: Bearer ya29.a0AasRrdaM8jq4J0FBtJpsdhu87ZJcPlr4-8NqkDdGmLYtQ7P-riTx5man4k2maqWGNIsL1007a4BClSsfVbgHyjycaKn_5bviofo5XCbvCeO5-kkepnb_RUgy6prxRX7X8pi2PFHxX-kbmSmQgeEoILQQnK_aYMtTagSFzkUXC12Q2A5VmlfXR5cvSW-a80XxGOikpEf1jHuwusQx2EftBITnhPaYvg6Xi08qzvAEnmKgYicqCqY5o9d9ixav1jm6bd0r7A" \ -H "Content-Type: application/json; charset=utf-8" \ -H "X-Goog-User-Project: test-prod " --data "{ 'eventType': 'home-page-view', 'visitorId': '12', 'eventTime': '2021-09-28T03:33:33.000001Z', 'attributionToken': 'ABC', 'attributes': { 'city_name': { 'text': ['karachi'] }, 'device_type': { 'text': ['iOS'] }, }, 'userInfo': { 'userId': '123', }}"\"https://retail.googleapis.com/v2/projects/test-prod/locations/global/catalogs/default_catalog/userEvents:write" 「detail-page-view」のcurlコール

curl -X POST \     -H "Authorization: Bearer ya29.a0ARrdaMsd84J0FBtZdJp2jhu87ZJcPlr4-8NqkDdGmLYtQ7P-riTx5man4k2maqWGNIsL1007a4BClSsfVbgHyjycaKn_5bviofo5XCbvCeO5-kkepnb_RUgy6prxRX7X8pi2PFHxX-kbmSmQgeEoILQQnK_aYMtTagSFzkUXC12Q2A5VmlfXR5cvSW-a80XxGOikpEf1jHuwusQx2EftBITnhPaYvg6Xi08qzvAEnmKgYicqCqY5o9d9ixav1jm6bd0r7A" \     -H "Content-Type: application/json; charset=utf-8" \     -H "X-Goog-User-Project: test-prod "     --data "{         'eventType': 'detail-page-view',         'visitorId': '123',         'eventTime': '2021-09-28T03:33:33.000001Z',         'attributionToken': 'ABC',         'attributes': {            'city_name': {              'text': ['karachi']            },            'device_type': {              'text': ['iOS']            },         },         'productDetails': [{           'product': {             'id': '2806'           }          }],         'userInfo': {           'userId': '123',         }}"\"https://retail.googleapis.com/v2/projects/test-prod/locations/global/catalogs/default_catalog/userEvents:write"

add-to-cartのCurl呼び出し

curl -X POST \     -H "Authorization: Bearer ya29.sdrdaM8jq4J0FBtZdJp2jsdshu87ZJcPlr4-8NqkDdGmLYtQ7P-riTx5man4k2maqWGNIsL1007a4BClSsfVbgHyjycaKn_5bviofo5XCbvCeO5-kkepnb_RUgy6prxRX7X8pi2PFHxX-kbmSmQgeEoILQQnK_aYMtTagSFzkUXC12Q2A5VmlfXR5cvSW-a80XxGOikpEf1jHuwusQx2EftBITnhPaYvg6Xi08qzvAEnmKgYicqCqY5o9d9ixav1jm6bd0r7A" \     -H "Content-Type: application/json; charset=utf-8" \     -H "X-Goog-User-Project: test-prod"     --data "{         'eventType': 'add-to-cart',         'visitorId': '123',         'eventTime': '2021-09-28T03:33:33.000001Z',         'attributionToken': 'ABC',         'attributes': {            'city_name': {              'text': ['karachi']            },            'device_type': {              'text': ['iOS']            },         },         'productDetails': [{           'product': {             'id': '2806'           },     'quantity':1          }],         'userInfo': {           'userId': '123',         }}"\"https://retail.googleapis.com/v2/projects/test-prod/locations/global/catalogs/default_catalog/userEvents:write"

purchase-completeのCurl呼び出し

curl -X POST \     -H "Authorization: Bearer ya29.a0ARrsddaM8jJ0FBtZdJsdjhu87ZJcPlr4-8NqkDdGmLYtQ7P-riTx5man4k2maqWGNIsL1007a4BClSsfVbgHyjycaKn_5bviofo5XCbvCeO5-kkepnb_RUgy6prxRX7X8pi2PFHxX-kbmSmQgeEoILQQnK_aYMtTagSFzkUXC12Q2A5VmlfXR5cvSW-a80XxGOikpEf1jHuwusQx2EftBITnhPaYvg6Xi08qzvAEnmKgYicqCqY5o9d9ixav1jm6bd0r7A" \     -H "Content-Type: application/json; charset=utf-8" \     -H "X-Goog-User-Project: test-prod "     --data "{         'eventType': 'purchase-complete',         'visitorId': '123',         'eventTime': '2021-09-28T03:33:33.000001Z',         'attributionToken': 'ABC',         'attributes': {            'city_name': {              'text': ['karachi']            },            'device_type': {              'text': ['iOS']            },         },         'productDetails': [{           'product': {             'id': '2806'           },     'quantity':'1'          }],          'purchaseTransaction':{              "id": 'transacion-id-here',              "revenue": 'orderPrice-here',              "currencyCode": 'USD',               "quantity":'1'            }         'userInfo': {           'userId': '123',         }}"\"https://retail.googleapis.com/v2/projects/test-prod/locations/global/catalogs/default_catalog/userEvents:write"

イベントを送信するには、Google Cloudを使用して認証トークンを生成する必要があります。

リアルタイムのイベントは、Retail AIのイベントタブで表示できます。

Retail AI user events, by Muffaddal

注:カタログをインポートする前またはインポート中にユーザーイベントを記録した場合は、カタログのインポートが完了する前に記録されたイベントに再参加してください。

最後に、レコメンデーションの最初のモデルを作成するために1歩手前です。

レコメンデーションモデルの構築

レコメンデーションAIでサポートされている機械学習モデルは次のとおりです。

AI Models supported by Recommendation AI, by Muffaddal

この記事では、Recommended For Youモデルを使用します。利用可能なモデルの詳細については、こちらをご覧ください。

モデルタブに移動し、MLモデルの構成を開始するためにモデルの作成をクリックしてください。

Model creation in Recommendation AI, by Muffaddal

次に、モデルタイプでRecommended For Youモデルを選択します。

AI Model selection in Recommendation AI, by Muffaddal

購入を改善することを目的としているため、MLモデルをコンバージョンに最適化するように設定します。モデル目的としてconversion rate (CVR)を選択します。

The model objective in Recommendation AI, by Muffaddal

チューニング頻度をevery three monthに設定し、属性値によるフィルタリングをautoに設定します。

Tunning and tab settings for Recommendation AI models, by Muffaddal

そして、作成ボタンをクリックします。これにより、モデルトレーニングが開始されます。AIモデルが準備できるまで1〜2日間お待ちください。所要時間はトレーニングに必要なデータ量に依存します。

提供

AIモデルが作成されたら、提供設定を構成して、AIモデルを呼び出してパーソナライズされたリストを取得できるようにします。

提供設定に入り、トップの提供ボタンをクリックしてレコメンデーションを選択してください。

Model serving config in Recommendation AI, by Muffaddal

提供の名前を付け、続行をクリックしてください。

作成したrecommended for youモデルを選択します。これにより、この提供構成にモデルがアタッチされます。

設定タブでは、モデルの挙動を決定します。自動設定を使用できます。

MuffaddalによるレコメンドAIの設定

「作成」ボタンを押してください。設定のIDをメモしておいて、モデルAPIを呼び出す際に使用します。

レコメンドの取得

以下は、作成したモデルからレコメンドを取得するためのcurlコールです。

curl -X POST \    -H "Authorization: Bearer ya29.aARrdaM9Bm57OTsdsIQAzGT15GwYzZpVfssffknWPNJ8gpKRk6IHSFmGqs1nBpAlaRRg2fQvtJgtUDGsuIc-h-j0RMLkAPy7FjxQ4tQbYZl62ba-4q4oRx-oY2KwYDA-pEQW77SACo2a8hS1zEUZHyyHCO3V-PycSBetJeldjib5VYo969D1PFVF33WSSRLPIP9uBcTW9ABoYthSOioTePlaICbwV1p8dlXesnCH8PdPNuKPxJJI3rzrnIghKXUKSQb4E-mc" \    -H "Content-Type: application/json; charset=utf-8" \    -H "X-Goog-User-Project: test-prod"\    --data  '{             "pageSize":100,             "userEvent": {              "eventType": "home-page-view",              "visitorId": "123",              "userInfo": {                  "userId": "123"              },              "experimentIds": "123"            }          }' \https://retail.googleapis.com/v2/projects/test-prod/locations/global/catalogs/default_catalog/placements/<your serving id here>:predict

正確なユーザーID、サービングID、プロジェクトID、および認証トークンを渡すと、提供されたユーザーIDに対するパーソナライズされたリストが返されます。

上記のコードを開発者に共有してください。彼はあなたのウェブサイトやアプリでパーソナライズされたセクションを提供できるはずです。

実験

レコメンドシステムを最初に導入するときは、A/Bテストを強くお勧めします。これにより、ユーザーにパーソナライズされた体験を提供することでどれだけの価値を得られるのかを理解することができます。

最後に

この記事は、手間をかけずに完全にスケーラブルなレコメンダーシステムを構築するのに十分な情報を提供しています。しかし、Recommendation AIを最大限に活用するには、細部に注意する必要があります。

たとえば、複数のモデルを設定する場合には、帰属トークンが重要です。カタログを維持することも重要であり、Google Cloudの価格設定も考慮する必要があります。その他にもたくさんあります。

Google Cloud Recommendation AIを使用すると、Google自身のMLモデルを使用することができるだけでなく、レコメンドシステムのアーキテクチャを設計する全プロセスをスキップして、すばやく価値のあるレコメンドを提供できます。これを実装すれば、ビジネスのユーザーエンゲージメント、リテンション、および収益を増やすことができます。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

AI研究

「この新しいAI研究は、事前学習されたタンパク質言語モデルを幾何学的深層学習ネットワークに統合することで、タンパク質構造解析を進化させます」

科学的な探求には、魅力的で複雑な構造を持つタンパク質による魅力的で不思議な方法で重要な生物学的プロセスを支配する分子...

データサイエンス

「Transformerの簡略化:あなたが理解する言葉を使った最先端のNLP — part 3 — アテンション」

「トランスフォーマーは、AIの分野で、おそらく世界中で重大な影響を与えていますこのアーキテクチャはいくつかのコンポーネ...

AI研究

「INDIAaiとMetaが連携:AIイノベーションと共同作業の道を開く」

有望な展開として、INDIAaiとMetaが人工知能(AI)と新興技術の領域で強力な協力関係を築いています。両組織は覚書(MoU)に...

データサイエンス

「CHATGPTの内部機能について:AIに関する自分自身の疑問に対するすべての回答」

私たちは皆、ChatGPTが質問に答えたり、命令を実行したりするユーザーフレンドリーなAIチャットボットであることを知っていま...

AIニュース

ChatGPTを使用してAIエージェントを作成する

新しい「カスタムインストラクション」機能を使うことで、ChatGPTをAIエージェントに変えることができます

データサイエンス

「Jaro-Winklerアルゴリズムを使用して小規模言語モデル(SLM)を構築し、スペルエラーを改善・強化する」

「Jaro-Winklerアルゴリズムを使って、小さな固定定義データセットでSmall Language Model(SLM)を構築し、システムのスペル...