Google Cloudを使用してレコメンドシステムを構築する
Build recommendation system using Google Cloud.
Google Cloud Recommendation AIを使用して高度なレコメンドシステムを実装する
![source pixabay](https://miro.medium.com/v2/resize:fit:640/format:webp/1*UuXtxBnKHOkKdt021tbIHg.jpeg)
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](https://miro.medium.com/v2/resize:fit:640/format:webp/1*DPBqepfR1atYw9nKtxPczw.png)
Google Cloud Recommendation AIを実装する方法
レコメンドAIには、2つのものが必要です。1つはユーザーのアクティビティ、もう1つはユーザーがアクティビティを実行する製品の詳細です。
- あらゆる種類の分子との相互作用を理解する新しいAIモデルによって、タンパク質デザインの領域での境界を打破する
- 機械学習の解説:アルゴリズム、モデル、および応用の明らかにする
- AIの脅威:自動化された世界における見えない課題
アクティビティまたはアクションはイベントとして送信され、アイテムの詳細はRecommendation AIのカタログに格納されます。必要な量のイベントとカタログの詳細があると、ユーザーの過去の行動と属性に基づいて個人的なリストを提供するためにMLモデルをトレーニングできます。
それでは、それぞれの詳細について詳しく説明していきましょう。
![Data Pipeline to use Recommendation AI of Google Cloud, by Muffaddal](https://miro.medium.com/v2/resize:fit:640/format:webp/1*-XG1VGBlGPx5cFHyCTMkiw.png)
注: 実装には強力なGoogle Cloud、SQL、および技術的な知識が必要です。必要であれば、お知らせください。
1- 製品の詳細をインポートする
カタログには多くのフィールドと属性がありますが、id
、name
、title
、およびcategories
は必須フィールドで提供する必要があります。
カタログで使用可能なすべてのフィールドの詳細については、こちらをご覧ください。
製品の詳細が既にBiqQueryに存在すると仮定すると、BigQueryとRecommendation AIの統合を活用して、カタログデータをインポートします。
カタログに設定できるフィールドがたくさんあります。より多くのデータを生成できるほど良いです。このデモ用途では、最も一般的なものにとどまります。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](https://miro.medium.com/v2/resize:fit:640/format:webp/1*gfyob0Km5r489uhU5pUOFA.png)
下の画像に示すようなパネルが表示されます。インポートタイプで「Product Catalog」を選択し、データソースで「BigQuery」を選択します。BigQueryテーブルパスを入力し、ブランチを選択してインポートを実行します。
![Import catalog panel of Recommendation AI, by Muffaddal](https://miro.medium.com/v2/resize:fit:640/format:webp/1*0hADvITxpy924u_rhKnyeA.png)
数分待って、Retail AIのデータテーブルでカタログの詳細を表示できます。
2- 過去のイベントをインポートする
次に、ユーザーの過去のデータをRecommendation AIにインポートする必要があります。このステップはオプションですが、これを行うことで、より良い機械学習モデルを構築できます。
カタログと同様に、必要な形式でBigQueryテーブルにイベントを持っている必要があります。
以下は、Recommendation AIが受け入れるイベントです。
![Events that can be sent to Recommendation AI](https://miro.medium.com/v2/resize:fit:640/format:webp/1*TST2v3y-BR32jy50ReT_5g.png)
その中で、home-page-view
、detail-page-viewed
、add-to-cart
、およびpurchase-complete
が、AIモデルを完全にパワーアップするために必要です。
これらのイベントのそれぞれには、データのインポートに必要な特定のテーブルスキーマがあります。詳細については、ここで見つけることができます。
1- home-page-view
、detail-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-viewed
、add-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](https://miro.medium.com/v2/resize:fit:640/format:webp/1*ItuTi0P6Kb247zL9J16q6A.png)
注:カタログをインポートする前またはインポート中にユーザーイベントを記録した場合は、カタログのインポートが完了する前に記録されたイベントに再参加してください。
最後に、レコメンデーションの最初のモデルを作成するために1歩手前です。
レコメンデーションモデルの構築
レコメンデーションAIでサポートされている機械学習モデルは次のとおりです。
![AI Models supported by Recommendation AI, by Muffaddal](https://miro.medium.com/v2/resize:fit:640/format:webp/1*2KEa44LCa8yLpBOxOEYX0Q.png)
この記事では、Recommended For You
モデルを使用します。利用可能なモデルの詳細については、こちらをご覧ください。
モデルタブに移動し、MLモデルの構成を開始するためにモデルの作成をクリックしてください。
![Model creation in Recommendation AI, by Muffaddal](https://miro.medium.com/v2/resize:fit:640/format:webp/1*R6ePkuMjftBYbo8f-dWcow.png)
次に、モデルタイプでRecommended For You
モデルを選択します。
![AI Model selection in Recommendation AI, by Muffaddal](https://miro.medium.com/v2/resize:fit:640/format:webp/1*euKE6KqUe73zxe_8doduXw.png)
購入を改善することを目的としているため、MLモデルをコンバージョンに最適化するように設定します。モデル目的としてconversion rate (CVR)
を選択します。
![The model objective in Recommendation AI, by Muffaddal](https://miro.medium.com/v2/resize:fit:640/format:webp/1*JB1l9FXMynG0qs2YK3rUjQ.png)
チューニング頻度をevery three month
に設定し、属性値によるフィルタリングをauto
に設定します。
![Tunning and tab settings for Recommendation AI models, by Muffaddal](https://miro.medium.com/v2/resize:fit:640/format:webp/1*uRTCd4kVKiiwcc1ysWrOiw.png)
そして、作成ボタンをクリックします。これにより、モデルトレーニングが開始されます。AIモデルが準備できるまで1〜2日間お待ちください。所要時間はトレーニングに必要なデータ量に依存します。
提供
AIモデルが作成されたら、提供設定を構成して、AIモデルを呼び出してパーソナライズされたリストを取得できるようにします。
提供設定に入り、トップの提供ボタンをクリックしてレコメンデーションを選択してください。
![Model serving config in Recommendation AI, by Muffaddal](https://miro.medium.com/v2/resize:fit:640/format:webp/1*oVWcQk6kCQrcH0FkFd7sjQ.png)
提供の名前を付け、続行をクリックしてください。
作成したrecommended for you
モデルを選択します。これにより、この提供構成にモデルがアタッチされます。
設定タブでは、モデルの挙動を決定します。自動設定を使用できます。
![MuffaddalによるレコメンドAIの設定](https://miro.medium.com/v2/resize:fit:640/format:webp/1*JQaE8kpU2rehiLw9fANW7Q.png)
「作成」ボタンを押してください。設定の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!
Was this article helpful?
93 out of 132 found this helpful
Related articles
- 人間の理解と機械学習のギャップを埋める:説明可能なAIを解決策として
- TRACE(トレース)に会おう:グローバル座標トラッキングを使用した正確な3D人体姿勢および形状推定のための新しいAIアプローチ
- 予測の作成:Pythonにおける線形回帰の初心者ガイド
- PyTorchを使った転移学習の実践ガイド
- ChatGPTのバイアスを解消するバックパック:バックパック言語モデルはトランスフォーマーの代替AI手法です
- DeepMindのAIマスターゲーマー:2時間で26のゲームを学習
- 単一モダリティとの友情は終わりました – 今やマルチモダリティが私の親友です:CoDiは、合成可能な拡散による任意から任意への生成を実現できるAIモデルです