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が想像を絶する抗体を作成します:LabGeniusの医療工学への新しいアプローチ

南ロンドンの中心部で、かつてのビスケット工場が革新の最先端拠点に変わりました。ここでは、ロボティクス、AI、DNAシーケン...

機械学習

TaatikNet(ターティクネット):ヘブライ語の翻字のためのシーケンス・トゥ・シーケンス学習

この記事では、TaatikNetとseq2seqモデルの簡単な実装方法について説明していますコードとドキュメントについては、TaatikNet...

機械学習

NVIDIAは、Generative AIを用いて薬物探索を加速させるためにGenentechと協力

ジェネンテック(ロシュグループの一員)は、 生成AI を使って新しい治療法を発見し、患者に効果的に治療を提供することを先...

機械学習

ドレスコードの解読👗 自動ファッションアイテム検出のためのディープラーニング

電子商取引の活気ある世界では、ファッション業界は独自のランウェイですしかし、もし我々がこのランウェイのドレスコードを...

機械学習

「FlexGenに会おう:GPUメモリが限られている場合に大規模な言語モデル(LLM)を実行するための高スループットな生成エンジン」

大規模言語モデル(LLM)は最近、さまざまなタスクで印象的なパフォーマンスを発揮しています。生成型LLMの推論は以前にない...

人工知能

「AIがまだすぐには置き換えられない8つの仕事」

皆がAIが代替する仕事について話していますが、私たちはコインの裏側、つまりAIがまもなく置き換えないであろう仕事に目を向...