Amazon Web Services ブログ
Amazon Personalize で使用できる項目属性数が 10 倍以上となり、レコメンデーションの関連性が改善
Amazon Personalize は Amazon Personalize で作成できるカスタム機械学習モデルを使用することで、これまでに機械学習の経験がなくても、ウェブサイト、アプリ、広告、E メールなどをパーソナライズできる機械学習サービスの 1 つです。このたび、Amazon Personalize が Personalizeでのモデリング用にこれまでの 10 倍以上の項目属性数をサポートするようになりましたことをお知らせします。Amazon Personalize で ML モデルを構築する際、以前は最大 5 つの項目属性を使用できました。現在、この属性数の上限が 50 となりました。項目に関する詳細情報、たとえば、カテゴリ、ブランド、価格、期間、サイズ、作成者、リリース年などを使用して、レコメンデーションの関連性を高めることができます。
この投稿では、カスタムの属性を持つ項目メタデータを Amazon Personalize に追加し、このデータとユーザー操作を使ってモデルを作成する方法を学びます。この投稿では、美容製品の Amazon カスタマーレビューをデータとして使用します。詳細およびこのデータをダウンロードするには、「Amazon Customer Reviews Dataset」をご参照ください。ユーザーがレビューした項目の履歴をユーザーおよび項目のメタデータとともに使用し、それらに対する製品のレコメンデーションを生成します。
データの前処理
Amazon Personalize でデータをモデル化するには、そのデータを次のようなデータセットに分割する必要があります。
- Users – ユーザーに関するメタデータが含まれます
- Items – 項目に関するメタデータが含まれます
- Interactions – 操作 (この投稿では、レビュー) および操作に関するメタデータが含まれます
各データセットについて、この投稿では次の属性を使用します。
- Users –
customer_id
、helpful_votes
、total_votes
- Items –
product_id
、product_category
、product_parent
- Interactions –
product_id
、customer_id
、review_date
、star_rating
この投稿では、marketplace
、review_id
、product_title
、vine
、verified_purchase
、review_headline
、review_body
を含む、他の利用可能な属性は使用しません。
さらに、Amazon Personalize のキーワードに準拠するため、この投稿では customer_id
の名前を USER_ID
に、product_id
の名前を ITEM_ID
に、review_date
の名前を TIMESTAMP
に変更しています。
Amazon Personalize への入力用データをダウンロードして処理するには、次の Python サンプルコードを使用してください。
Users データセットには、次のコードを入力します。
#Downloading data
$aws s3 cp s3://amazon-reviews-pds/tsv/amazon_reviews_us_Beauty_v1_00.tsv.gz .
$gunzip amazon_reviews_us_Beauty_v1_00.tsv.gz
#Generating the user dataset
import pandas as pd
fields = ['customer_id', 'helpful_votes', 'total_votes']
df = pd.read_csv('amazon_reviews_us_Beauty_v1_00.tsv', sep='\t', usecols=fields)
df = df.rename(columns={'customer_id':'USER_ID'})
df.to_csv('User_dataset.csv', index = None, header=True)
以下のスクリーンショットは、Users データセットを示しています。この出力は、以下で生成できます。
df.head()
Items データセットには、次のコードを入力します。
#Generating the item dataset
fields = ['product_id', 'product_category', 'product_parent']
df1 = pd.read_csv('amazon_reviews_us_Beauty_v1_00.tsv', sep='\t', usecols=fields)
df1= df1.rename(columns={'product_id':'ITEM_ID'})
#Clip category names to 999 characters to confirm to Personalize limits
maxlen = 999
for index, row in df1.iterrows():
product_category = row['product_category'][:maxlen]
df1.to_csv('Item_dataset.csv', index = None, header=True)
次のスクリーンショットは、Items データセットを示しています。この出力は、以下で生成できます。
df1.head()
Interactions データセットには、次のコードを入力します。
#Generating the interactions dataset
from datetime import datetime
fields = ['product_id', 'customer_id', 'review_date', 'star_rating']
df2 = pd.read_csv('amazon_reviews_us_Beauty_v1_00.tsv', sep='\t', usecols=fields, low_memory=False)
df2= df2.rename(columns={'product_id':'ITEM_ID', 'customer_id':'USER_ID', 'review_date':'TIMESTAMP'})
#Converting timstamp to UNIX timestamp and rounding milliseconds
num_errors =0
for index, row in df2.iterrows():
time_input= row["TIMESTAMP"]
try:
time_input = datetime.strptime(time_input, "%Y-%m-%d")
timestamp = round(datetime.timestamp(time_input))
df2.set_value(index, "TIMESTAMP", timestamp)
except:
print("exception at index: {}".format(index))
num_errors += 1
print("Total rows in error: {}".format(num_errors))
df2.to_csv("Interaction_dataset.csv", index = None, header=True)
次のスクリーンショットは、Interactions データセットを示しています。この出力は、以下で生成できます。
df2.head()
データの取り込み
上記のデータを処理した後、Amazon Personalize にデータを取り込むことができます。
データセットグループの作成
アプリケーションが送信するイベント (ユーザー操作)、およびユーザーと項目のメタデータを保存するデータセットグループを作成するには、次の手順を実行してください。
- Amazon Personalize コンソールの [Dataset groups] で、[Create dataset group] を選択します。
- [Dataset group name] にデータセットグループの名前を入力します。この投稿では、
DemoLimitIncrease
という名前を入力します。 - [Next] をクリックします。
データセットの作成とスキーマの定義
データセットグループを作成したら、データセットを作成し、それぞれのスキーマを定義します。次の手順は、Items データセット用です。
- [Dataset name] に名前を入力します。
- [Schema details] で [Create new schema] を選択します。
- [New schema name] で名前を入力します。
- [Schema definition] で次のコードを入力します。
{ "type": "record", "name": "Items", "namespace": "com.amazonaws.personalize.schema", "fields": [ { "name": "ITEM_ID", "type": "string" }, { "name": "product_parent", "type": "string", "categorical": true }, { "name": "product_category", "type": "string", "categorical": true } ], "version": "1.0"}
- [Next] をクリックします。
Users データセットと Interactions データセットについても同じ手順を実行し、インポートする列に適合するようにスキーマを定義します。
データのインポート
データセットを作成したら、Amazon S3 からデータをインポートします。バケットへの Amazon Personalize 読み込みアクセスを、必ず提供してください。Items データをインポートするには、以下の手順を実行します。
- [Dataset import job details] の [Dataset import job name] で、名前を入力します。
- [IAM Service role] で [AmazonPersonalize-ExecutionRole] をクリックします。
- [Data location] で S3 バケットの場所を入力します。
- [Create dataset import job] をクリックします。
同じ手順に従って、Users データセットと Interactions データセットをインポートします。
モデルのトレーニング
データを Amazon Personalize に取り込むと、モデルをトレーニングする準備が整います (solutionVersion
)。トレーニングを行うには、使用するレシピ (アルゴリズム) をユースケースにマッピングします。利用可能なオプションは、次のとおりです。
- ユーザーへの項目のレコメンデーションなど、ユーザーのパーソナライズには、次のレシピのいずれかを使用してください。
- HRNN – 操作データについてのみトレーニングして、ベースラインを提供します
- HRNN-Metadata – 操作 + ユーザー、項目、操作メタデータのトレーニングを行います。このようなデータが利用可能な場合に、使用することが推奨されます
- HRNN-Coldstart – コールド (新しい) 項目をユーザーにレコメンドするときに使用します
- 入力項目に類似した項目をレコメンドするには、SIMS を使用します。
- 特定のユーザーの入力項目のリストを再度ランク付けするには、Personalized-Ranking を使用します。
この投稿では、HRNN-Metadata レシピを使用してソリューションを定義してから、solutionVersion
(モデル) をトレーニングします。次の手順を完了してください。
- Amazon Personalize コンソールの [Dataset groups] で、[DemoLimitIncrease] を選択します。
- [Solutions] をクリックします。
- [Create solution] をクリックします。
- [Solution configuration] の [Solution name] で、名前を入力します。
- [Recipe selection] で [Manual] を選択します。
- [Recipe] で [aws-hrnn-metadata] をクリックします。
- [Next] をクリックします。
デフォルトのハイパーパラメーターを変更したり、ソリューションのハイパーパラメーター最適化を実行したりすることもできます。
レコメンデーションを取得する
レコメンデーションを取得するには、先ほど作成したソリューションとソリューションバージョンを使用してキャンペーンを作成します。次の手順を完了してください。
- [Dataset groups] の [DemoLimitIncrease] で、[Campaigns] を選択します。
- [Create new campaign] をクリックします。
- [Campaign details] の [Campaign name] で、名前を入力します。
- [Solution] で [the solution name from previous step] をクリックします。
- [Solution version ID] で、作成したソリューションバージョンを選択します。
- [Minimum provisioned transactions per second] で 1 と入力します。
- [Create campaign] をクリックします。
- キャンペーンの作成後、コンソールで詳細を確認し、それを使用してレコメンデーションを取得できます。
キャンペーンをセットアップしたら、プログラムでキャンペーンを呼び出し、項目 ID の形式でレコメンデーションを取得できます。コンソールを使用してレコメンデーションを取得し、スポットチェックを実行することもできます。さらに Amazon Personalize では、レコメンデーションをバッチ処理する機能もあります。詳細については、「Now available: Batch Recommendations in Amazon Personalize」をご覧ください。
まとめ
これで、これらのレコメンデーションを使って、ユーザーに関する知識に基づいて美容ウェブサイトのホームページをパーソナライズしたり、レコメンデーションを記載したャンペーンに関する E メールを送信したりするなど、見出しの内容を強化できます。Amazon Personalize でリアルタイムのレコメンデーションを実行するには、発生したユーザーイベントも送信する必要があります。詳細については、「Amazon Personalize is Now Generally Available」をご参照ください。今すぐ Amazon Personalize を始めましょう。
著者について
Vaibhav Sethi は Amazon Personalize のプロダクトマネージャーです。機械学習ソリューションの構築を支援する製品を提供することに取り組んでいます。趣味はハイキングと読書です。