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

機械学習

「NVIDIA、ワシントンのAIの安全性確保の取り組みを支援」

本日、ホワイトハウスで開催されたイベントで、NVIDIAはバイデン政権が策定した自発的な取り組みを支持することを発表し、高...

データサイエンス

「ClimSimに出会ってください:機械学習と気候研究の物理学を結びつける画期的なマルチスケール気候シミュレーションデータセット」

数値物理シミュレーション予測は、気候変動政策の指針となる情報の主要な源です。最も高性能なスーパーコンピュータの限界に...

人工知能

ワンダーダイナミックスの使い方:自分自身を3Dキャラクターに変身させる方法

ボタンをクリックするだけで、自分自身を3Dアニメーションキャラクターに変身させることができます

人工知能

AIの革新的なイノベーションが開発者を強化する

SAPは、Build CodeやHANA Cloudなどの複数の生成AI機能を導入し、開発者が迅速にデータから価値を生み出し、革新するのを支援...

人工知能

「生成型AIのGPT-3.5からGPT-4への移行の道程」

導入 生成型人工知能(AI)領域におけるGPT-3.5からGPT-4への移行は、言語生成と理解の分野での飛躍的な進化を示しています。...

AIニュース

コールセンターにおけるAIソフトウェアが顧客サービスを革命化します

人工知能(AI)技術の急速な進歩により、チャットボットの導入を特に受けた顧客サービスとサポートに変革的なシフトがもたら...