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

機械学習

「機械学習が間違いを comitte たとき、それはどういう意味ですか?」

「ML/AIに関する議論で、私たちの通常の「ミステイク(間違い)」の定義は意味をなすでしょうか?もしそうでない場合、なぜで...

データサイエンス

カスタムGPTの構築:教訓とヒント

去る2023年11月6日の火曜日、サム・アルトマン(OpenAIのCEO)は、自然言語を使用して個人専用のChatGPTを作成できるようにす...

機械学習

「GiskardはHuggingFaceにGiskard Botをリリースします:HuggingFace Hubにプッシュした機械学習モデルの問題を自動的に検出するボットです」

2023年11月8日に発表された画期的な開発では、Giskard Botが機械学習(ML)モデルのゲームチェンジャーとして登場し、大規模...

データサイエンス

十年生のためのニューラルネットワークの簡略化

複雑なニューラルネットワークの概念を、コスト関数、ニューロン、バックプロパゲーション、重みとバイアスを非技術的で楽し...

データサイエンス

デット (物体検出用トランスフォーマー)

注意:この記事は、コンピュータビジョンの複雑な世界について探求し、特にトランスフォーマーとアテンションメカニズムに焦...

AIニュース

AIサージ:Stability AIのCEOは、2年以内にインドの開発者に仕事の喪失を予測します

AIの革命が進む中、世界はその影響に関する潜在的な利益と懸念を目撃しています。AIブームの中で、Stability AIのCEOであるエ...