前回まで
前回はレコメンデーションを取得するまでのソリューションの構築とキャンペーンを作成しました。
AWSでAIサービスを使ってみる〜第13回personalize編その③〜
今回はpersonalize最終回!レコメンデーションを取得していきます。
レコメンデーションの取得
それではこれまでにPersonalizeに登録してきた諸々のデータや仕組みを用いてレコメンデーション(商品のオススメ)を取得していきます。
レコメンデーション取得のプログラムの全体です。
import boto3
import sys
# コマンドライン引数
if len(sys.argv) != 2:
print('python', sys.argv[0], 'user-id')
exit()
personalize = boto3.client('personalize')
# personalizeruntimeサービスクライアントを作成
personalize_runtime = boto3.client('personalize-runtime')
# データセットグループを取得
for group in personalize.list_dataset_groups()['datasetGroups']:
#名前注意
if group['name'] == 'Personalize_TestGroup':
break
group_arn = group['datasetGroupArn']
# ソリューションを取得
for solution in personalize.list_solutions(
datasetGroupArn=group_arn)['solutions']:
#名前注意
if solution['name'] == 'Solution_Test':
break
solution_arn = solution['solutionArn']
# キャンペーンを取得
for campaign in personalize.list_campaigns(
solutionArn=solution_arn)['campaigns']:
#名前注意
if campaign['name'] == 'Campaign_Test':
break
campaign_arn = campaign['campaignArn']
# レコメンデーションを取得
result = personalize_runtime.get_recommendations(
campaignArn=campaign_arn, userId=sys.argv[1])
# アイテム名を読み込む
with open('item.txt', 'r') as file:
name = list(file)
# 順位とアイテム名を表示
for rank, item in enumerate(result['itemList'], 1):
print('{:2} {}'.format(rank, name[int(item['itemId'])]), end='')
インポートとサービスクライアントの作成
import boto3
import sys
# コマンドライン引数
if len(sys.argv) != 2:
print('python', sys.argv[0], 'user-id')
exit()
personalize = boto3.client('personalize')
# personalizeruntimeサービスクライアントを作成
personalize_runtime = boto3.client('personalize-runtime')
・sysをインポート。コマンドライン引数を指定してif文で引数であるuser-idが未入力の
場合、user-idを入力するよう表示します。
・レコメンデーションを取得する際にはpersonalize_runtimeを使用します。
今まで作成したもろもろの取得
# データセットグループを取得
for group in personalize.list_dataset_groups()['datasetGroups']:
#名前注意
if group['name'] == 'Personalize_TestGroup':
break
group_arn = group['datasetGroupArn']
# ソリューションを取得
for solution in personalize.list_solutions(
datasetGroupArn=group_arn)['solutions']:
#名前注意
if solution['name'] == 'Solution_Test':
break
solution_arn = solution['solutionArn']
# キャンペーンを取得
for campaign in personalize.list_campaigns(
solutionArn=solution_arn)['campaigns']:
#名前注意
if campaign['name'] == 'Campaign_Test':
break
campaign_arn = campaign['campaignArn']
# レコメンデーションを取得
result = personalize_runtime.get_recommendations(
campaignArn=campaign_arn, userId=sys.argv[1])
・データセットグループ、ソリューション、キャンペーンを取得。(それぞれ作成したarnの名前を入力)
・get_recommendationsメソッドでレコメンデーションを取得。
アイテム名の読み込みとアイテム名の表示
# アイテム名を読み込む
with open('item.txt', 'r') as file:
name = list(file)
# 順位とアイテム名を表示
for rank, item in enumerate(result['itemList'], 1):
print('{:2} {}'.format(rank, name[int(item['itemId'])]), end='')
・with openでアイテム名が書かれたtxtファイルを読み込みます。list関数を使い読み込んだファイルの各行からリストを作成します。
・for文で順位とアイテムを表示します。enumerate()でリストのインデックスを表示、引数1でインデックスを1から表示します。
参考:Python, enumerateの使い方: リストの要素とインデックスを取得
・format()のname[int(item['itemId'])]ではitem内のitemIdを整数に変換し、変換した値をname内のリストのインデックスとして使いアイテムIDに対応するアイテム名を取得します。
レコメンデーションの取得を実行
python pers_recommend.py 1
ユーザーIDを指定しファイルを実行
実行結果はこちら
1 金色イヌ
2 金色ネズミ
3 黄色サル
4 銀色ウマ
5 銀色トラ
.....
20 銀色ヒツジ
21 緑色サル
22 赤色イノシシ
23 黄色ウサギ
24 赤いスイトピー
25 赤色イヌ
ユーザーID:1のユーザーのレコメンデーションです。
1~25番目までのお勧めが表示されています。
なんと!24番目には隠しアイテムの'赤いスイトピー'がお勧めされてます(笑)
まとめ
personalizeでレコメンデーションを取得するまでのプログラムでした。
登録するものが多いですね(汗)
追記:キャンペーンがpersonalize上に存在する間は課金が発生します。放置しておくとあっという間に無料枠を超えてしまうため、不要になったらキャンペーンをコンソールから削除しましょう。
personalize編は以上で終了です。そろそろGCPとか触ってみたいですね。