michimani.net

[レポート] 知っ得ハンズオン はじめてのレコメンデーション - Amazon Personalize @ AWS Loft Tokyo に行ってきました

2019-08-19

AWS Loft Tokyo で開催された 知っ得ハンズオン はじめてのレコメンデーション - Amazon Personalize に参加してきたので、そのレポート・メモです。

過去に参加した知っ得ハンズオンレポはこちら。

目次

スケジュール

座学セッション

最初は座学セッションということで、今回やるハンズオンの説明と、

以下、座学セッションのメモです。

ハンズオン

ユーザー 610 人による 9,700 本の映画視聴履歴とその評価のデータ (約 10 万件) をもとに、オススメの映画をレコメンドしてくれるサービスを作るというハンズオンでした。
データは CSV 形式で配布されたので、それを利用しました。

大まかな流れとしては次のような感じです。

  1. S3 に学習用データ (配布された CSV) をアップロード
  2. Amazon Personalize にて S3 のファイルを読み込み (約 20 分)
  3. 読み込んだデータをもとに学習 (約 50 分)
  4. 学習結果を元に キャンペーンを作成 (推論モデルのデプロイ)
  5. 作成したキャンペーンを使って推論環境を構築 (約 15 分)
  6. 推論環境からレコメンド結果を取得

こんなに簡単に推論環境ができてしまうのか?っていうくらいシンプルな手順でした。
終始マネジメントコンソール上での操作でしたが、フローとしては下図のダッシュボードにある 4 フローです。

Amazon Rekognition dashboard

構築した推論環境はマネジメントコンソール上でもテストできます。

Amazon Rekognition campaign demo

もちろん CLI からも実行可能です。

$ aws personalize-runtime get-recommendations \
--campaign-arn arn:aws:personalize:us-east-1:12345678XXXX:campaign/20190819-handson-campaign \
--user-id 123 \
--region us-east-1
{
    "itemList": [
        {
            "itemId": "63992"
        },
        {
            "itemId": "166528"
        },

    ... 略 ...

        {
            "itemId": "109374"
        },
        {
            "itemId": "47610"
        }
    ]
}

まとめ

AWS のレコメンドサービス Amazon Personalize のハンズオンに参加してきた話でした。
Amazon Personalize に関しては普段の業務では使う機会がないので、このようなハンズオンを開催していただけるのはとても嬉しい限りです。
今回は学習用のデータがあらかじめ用意されていたので、それを元にして簡単に推論環境を構築することができ、さらにレコメンド結果も簡単に取得することができました。座学セッションの中でもあったように、 機械学習AI という言葉の違いは自分の中でもしっかりと意識していきたいと思いました。Amazon Personalize に関しては AI の範囲にあるサービスなので、学習の部分を意識せずにアプリケーション内でレコメンドが簡単に使えるというサービスです。一方で学習用のデータを準備するのが大変かなという印象でした。
業務では使うことがなさそうですが、面白いサービスだなと思いました。

おまけ

今回はちょっと待ち時間が多かったのが少し残念でした。ハンズオンの流れでも書きましたが、 235 で待ち時間が発生します。
ただ、その間は AWS の他のレコメンドサービス Amazon Rekognition で遊んだりしていました。Amazon Rekognition はマネジメントコンソール上で画像ファイルをアップロードするだけで機能を試すことができるので、気になる方は使ってみてください。

Amazon Rekognition demo

実際に得られるレスポンス (JSON) も確認できます。

{
    "Labels": [
        {
            "Name": "Meal",
            "Confidence": 94.69331359863281,
            "Instances": [],
            "Parents": [
                {
                    "Name": "Food"
                }
            ]
        },
        {
            "Name": "Dish",
            "Confidence": 94.69331359863281,
            "Instances": [],
            "Parents": [
                {
                    "Name": "Meal"
                },
                {
                    "Name": "Food"
                }
            ]
        },
        {
            "Name": "Food",
            "Confidence": 94.69331359863281,
            "Instances": [],
            "Parents": []
        },
        {
            "Name": "Curry",
            "Confidence": 66.77191162109375,
            "Instances": [],
            "Parents": [
                {
                    "Name": "Food"
                }
            ]
        },
        {
            "Name": "Gravy",
            "Confidence": 57.303733825683594,
            "Instances": [],
            "Parents": [
                {
                    "Name": "Food"
                }
            ]
        },
        {
            "Name": "Bowl",
            "Confidence": 56.948299407958984,
            "Instances": [],
            "Parents": []
        }
    ],
    "LabelModelVersion": "2.0"
}

comments powered by Disqus