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

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

目次

スケジュール

  • 18:00 - 18:30 受付
  • 18:30 - 19:00 座学セッション
  • 19:00 - 20:30 ハンズオン (各自黙々とやる感じ)
  • 20:30 - 21:00 質問など

座学セッション

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

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

  • 機械学習 と AI の言葉の違い
    • 機械学習
      • アルゴリズムの育成
      • 投資フェーズ
      • データサイエンティスト
      • SageMaker
    • AI
      • アルゴリズムをもとにビジネスロジックを作成
      • 回収フェーズ
      • フロントエンドエンジニア
      • Recognition, Polly など
  • Amazon Personalize
    • 個人化推薦 (<> 非個人化推薦)
    • 協調フィルタリングで実装
      • 頑張れは Excel, SQL でも実装できる
      • データが増えると再計算に時間がかかる
      • 情報が少ないとレコメンドの精度が低い (コールドスタート)
    • Personalize は Deep Learning ベース (Amazon.com と同様)
    • 属性情報、インベントリ、アクティビティストリーム という 3 つの情報からパーソナライズ
      • 商品状態が頻繁に変わる場合は アクティビティストリーム をオンにする
      • これらを元に学習させると、レコメンド用の API が完成する
      • inreractions, items, users 属性のうち、 interaction の CSV だけ学習可能
    • リアルタイムデータインジェクション
      • 再学習の頻度については公開されていない
      • インジェクションデータが 1,000 件を超えたら再学習される
      • データが増えない場合はいつまでたっても再学習されない (手動でやる)
    • コンソール (English only) または API でモデルを学習
      • データの投入
      • パース
      • 学習
      • 推論エンドポイントの生成 (キャンペーン と呼ぶ。一般的な機械学習用語では、 推論モデルのデプロイ )
    • 内蔵されているアルゴリズムは大きく 4 つ
      • Search Personalization
      • Related Items
      • User Personalization
        • HRNN
    • 類似サービス
      • Amazon Forecast : 精度の高い時系列予報サービス (プレビュー)

ハンズオン

ユーザー 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"
}

以上、よっしー (michimani) でした。

Share to ...

Follow on Feedly

comments powered by Disqus