サイトアイコン 協栄情報ブログ

Amazon Personalizeのバッチ推論ジョブを使ってみる【ハンズオン】

saitou-create-batch-inference-jobアイキャッチ画像


この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

Amazon Personalizeはフルマネージド型の機械学習サービスで、用意したデータをもとにユーザーへのおすすめ商品・情報を生成します。

 

おすすめ商品をメルマガやサイドバーで提供したい場合、Personalizeに用意されているAPIを利用します。しかし、ユーザー数が多くなり、短時間に大量のAPIが利用されるとスループットの制限やリクエストレートの限界に触れ、Personalizeのレスポンスが遅くなる場合があります。

 

メルマガでおすすめ商品情報の提供する際には、リアルタイム性を必要としないかと思いますので、ぜひAmazon Personalizeの機能のひとつ"バッチ推論ジョブ"を使ってみましょう。

 

今回の記事では、Amazon Personalizeのバッチ推論ジョブの概要やメリット、使い方を紹介します。

 

 

Amazon Personalizeのバッチ推論ジョブを使ってみる

■バッチ推論ジョブとは

Amazon Personalizeのバッチ推論ジョブ(batch inference job)は、大量のアイテムやユーザーに対して一括で推薦を生成する機能です。

 

 

 

●バッチ推論ジョブのメリット

バッチ推論ジョブのメリットは3つあります。

 

  1. 効率性: 大量の推薦を一度に処理できるため、時間とリソースを節約できます。
  2. 拡張性: データの量が増加しても、バッチ処理能力によってスムーズに対応できます。
  3. コスト効率: 非同期処理により、リアルタイムAPIの使用に比べてコストを抑えることができます。

 

 

■バッチ推論ジョブ作成ハンズオン

●必要な前提条件(AWSアカウント、データセットなど)

今回のハンズオンの前提条件は以下の通りです。

 

 

ソリューションの作成はこちらを参考にしてください。

 

1000件以上のインタラクションデータさえあればすぐに作成できるかと思います。わたしは今回ユーザー数50、アイテム数500、インタラクション10,000件分のデータをインポートし、ソリューションを作成しました。

 

 

●S3バケット準備

バッチ推論ジョブ作成には入力データと作成後の出力先が必要です。

 

事前にS3バケットの作成、もしくは既存のバケットにフォルダを作成しておきましょう。

 

今回はPerosonalizeのデータセットで利用しているS3バケットを利用します。同じバケットであればソリューション作成時に選択したIAMロールがそのまま使えます。

 

※もしS3バケットを新たに作成して使う場合は、PersonalizeとS3の権限が付与されたロールを準備してください

 

↓S3バケットに[input]と[output]のフォルダを作っておきます。

 

 

↓アクセスポリシーも確認しておきましょう。[読み込み]はもちろん、[書き込み]も必要です。

 

 

 

●入力データアップロード

バッチ推論ジョブ実行には、推薦情報を生成するためのユーザーIDがまとめれた入力データが必要です。形式はJSON Linesで、キーも"userId"と仕様が決まっています。USER_ID
でもなく、useridでもなく、キャメルケースのuserIdです。

 

ダミーデータを作成し、S3バケットのinput/にアップロードしましょう。

 

↓ダミーデータ作成は以下のコードを利用してください。ユーザー数50のダミーデータがjsonl形式で作成されます。

 

"""ユーザーリスト作成"""
import pandas as pd
import json

# ユーザー数を定義
num_users = 50

# ダミーデータの作成
users = {
    "userId": list(range(1, num_users + 1))
}

# pandasのDataFrameに変換
df = pd.DataFrame(users)

# userIdのデータ型を文字列型に変換
df['userId'] = df['userId'].astype(str)

# JSON Lines形式でファイルに保存
with open('userlist_dummy_data.jsonl', 'w') as file:
    for _, row in df.iterrows():
        json.dump(row.to_dict(), file)
        file.write('\n')

print("userlist_dummy_data.jsonl ファイルを作成しました。")

 

↓コードを実行すると、つぎのようなデータができます。

 

 

↓作成た入力データを、S3バケットのinput/にアップロードします。

 

 

アップロードが成功しましたら、準備は完了です。

 

 

●バッチ推論ジョブ作成

それでは、本題のバッチ推論ジョブを作成していきます。

 

↓サービス検索窓で[Amazon Personalize]を検索し、[Amazon Personalize]をクリックします。

 


 

↓左のナビゲーションペインから[Manage dataset groups]をクリックし、利用するデータセットグループをクリックします。

 

 

↓つづいて、左のナビゲーションペインから[Solutions and recipes]をクリックして、ソリューションの[status]が[Active]であることを確認します。

 

 

↓左のナビゲーションペインから[Batch inference jobs]をクリックします。

 

 

↓[Create batch inference job]をクリックします。

 

 

↓各項目を入力していきましょう。設定値は以下の通りです。自身の環境に合わせて入力してください。

 

項目 設定値
Batch inference job name 任意
IAM service role ソリューションと同じ
Solution 任意
Solution version ID 任意
Number of results 25
Batch inference job configuration デフォルト
S3 input path 入力データをアップロードしたフォルダパス(/input/)
S3 output path 出力先パス(/output/)

 

 

↓入力が完了したら、[Create batch inference job]をクリックします。

 

 

↓[status]が[Active]になるまで待ちましょう。

 

 

↓[Active]になりましたので、推薦情報の生成が完了です。データ量によりますが、何十万件とあると1時間くらいかかります。指定したS3バケットを見てみましょう。

 

 

ファイルが出力されていますね。

 

↓中身を確認してみましょう。

 

 

{"input":{"userId":"1"},"output":{"recommendedItems":["218","373","259","438","486","263","100","246","335","494","387","185","82","244","471","161","360","72","280","17","208","407","238","484","379"],"scores":[0.0047569,0.0046082,0.0042056,0.0037193,0.0036453,0.0036415,0.0036129,0.0035931,0.0035924,0.0034815,0.0034455,0.0033717,0.0033213,0.0032988,0.0032527,0.0032189,0.0032031,0.003196,0.0031614,0.0031442,0.0031085,0.0030817,0.0030498,0.0030479,0.0030428]},"error":null}
{"input":{"userId":"2"},"output":{"recommendedItems":["218","373","259","263","438","246","486","100","335","494","185","387","280","208","82","471","244","161","72","17","407","238","104","379","287"],"scores":[0.0047264,0.0045795,0.004256,0.0038549,0.0038274,0.0037197,0.0036501,0.0036484,0.003646,0.0036044,0.0035593,0.0035573,0.003406,0.0033317,0.0033077,0.0033033,0.0032737,0.0032733,0.0032311,0.0031868,0.0031507,0.0031268,0.0031202,0.0031167,0.0030982]},"error":null}
{"input":{"userId":"3"},"output":{"recommendedItems":["218","373","259","438","486","263","100","246","335","494","387","185","471","244","82","161","360","280","208","17","238","407","29","287","379"],"scores":[0.0047286,0.0045652,0.0041047,0.0038421,0.0037699,0.0037518,0.0035899,0.003568,0.0035577,0.0035245,0.0034068,0.0033957,0.0033478,0.0032384,0.0032244,0.0032108,0.0031884,0.0031748,0.0031694,0.0031607,0.0031459,0.00313,0.0031154,0.0030754,0.0030285]},"error":null}

 

ユーザーひとつ当たり、おすすめ情報が25件生成されています。scoreも入っていますね。

 

今回のハンズオンは以上です。

 

 

まとめ:Amazon Personalizeのバッチ推論ジョブを使ってみる【ハンズオン】

Webアプリケーションでサービスを提供する場合、クリック率やコンバージョン率を上げるのは重要なことです。

 

Amazon Personalizeはユーザーの"ほしい"を叶えてくれるサービスで、今回紹介した"バッチ推論ジョブ"は多くのユーザーの"ほしい"を効率的に生成することができます。ぜひ使ってみてください。

 

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
 
AIや機械学習のレコメンデーションサービスについて知りたい方は、ぜひ協栄情報にお問い合わせください。
https://www.cp-info.co.jp/contact/
 
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

 

 

参考リンク:AWS公式ドキュメント

 

↓ほかの協栄情報メンバーも機械学習・AIに関する記事を公開しています。ぜひ参考にしてみてください。

 

■Amazon CodeWhispererを試してみた(dapeng)
https://cloud5.jp/amazon-codewhisperer/

 

■Amazon Personalizeの使い方や事例を紹介【ハンズオンあり】(齊藤弘樹)
https://cloud5.jp/saitou-amazonpersonalize-entry/

 

■Amazon Personalizeの使い方や事例を紹介【ハンズオンあり】 part2(齊藤弘樹)
https://cloud5.jp/saitou-amazonpersonalize-handson/

 

■Amazon Personalize学習用ダミーデータをPythonで作ってみた(齊藤弘樹)
https://cloud5.jp/saitou-personalize-create-dammydata/

 

■Amazon Personalizeのエラーを解決!各カラムのデータ型を調べる方法(齊藤弘樹)
https://cloud5.jp/saitou-check-data-type/

 

■AWS Lambdaを使ってAmazon Personalizeの推薦情報をCSVでS3にエクスポートする方法(齊藤弘樹)
https://cloud5.jp/saitou-personalize-attribute-recommendation/

 

モバイルバージョンを終了