0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Azure ML チュートリアル (Recommendation - Movie Rating Tweets)

Last updated at Posted at 2022-09-06

はじめに

前回に引き続き、AzureMLのチュートリアルをしていきます。
今回もデザイナーを使っていきます。

チュートリアル概要

今回のチュートリアルは、Recommendation - Movie Rating Tweetsというものになります。
このサンプルでは、レコメンデーションモジュールを使って、映画のレコメンデーションエンジンを学習させる方法を紹介します。
これにより、ユーザーの評価または、好みを使い、そのユーザーがどのような評価をこの映画にするのかというモデルになります。

ブロックの説明

今回のデータ

今回のデータは映画のデータとユーザーの評価データを使います。
image.png

Movie Ratings

ユーザーの評価データ
ユーザーがどの映画に対して、評価をしたかのデータが入ってます
image.png

IMDB Movie Titles

映画のタイトルとID
IMDBの映画のデータが一覧で入ってます。
image.png

Join Data

二つのデータセットをMovie IDで結合するブロックになります。
image.png
設定を上から解説します。

Join key columns for left dataset

左のデータセットの結合キーカラムを選択します。
今回はMovieIdになります。
image.png

Join key columns for right dataset

右のデータセットの結合キーカラムを選択します。
今回はMovie IDになります。
image.png

Match case

キーカラムにおいて大文字小文字を区別した比較を行うかどうかを示す。
image.png

Join type

ジョインタイプの選択

  • Inner Join:内部結合
  • Left Outer Join:左外部結合
  • Full Outer Join:完全外部結合
  • Left Semi-Join:左セミ結合
    image.png

Keep right key columns in joined table

結合されたデータセットに、2つ目のデータセットのキーカラムを残すかどうかを指定する
image.png

Execute Python Script

今回のPythonの処理
レコメンダーモジュールが必要とする特定の順序でカラムを選択する。
image.png
コードはこんな感じ


# The script MUST contain a function named azureml_main
# which is the entry point for this module.

# imports up here can be used to

# The entry point function can contain up to two input arguments:
#   Param<dataframe1>: a pandas.DataFrame
#   Param<dataframe2>: a pandas.DataFrame
def azureml_main(dataframe1 = None, dataframe2 = None): return dataframe1[['UserId','Movie Name','Rating']],

Remove Duplicate Rows

同じMovide NameUserIdを持つ重複した行を削除するブロック。
image.png

Key column selection filter expression

重複検索時に使用するキーカラムの選択
今回はMovie NameUserIdを選択。
image.png

Retain first duplicate row

重複する行の集合の最初の行を残し,他の行を破棄するかどうかを示します。
image.png

Split Data

ここのブロックでは上記で作成した、トレーニングデータとテストデータを分けるブロックになります。
そのため、最後のoutputが二つになっており、それぞれに対して処理を行っていく形になります。
image.png
このブロックの機能を上から確認していきます。

Splitting mode

データセットの分割方法を選択する。
image.png

  • 行の分割
  • 正規表現
  • 相対表現

Fraction of rows in the first output dataset

入力データセットの行数に対する、最初の出力データセットの行数を表す比率を指定する。
image.png

Randomized split

行をランダムに選択するかどうかを指定する
image.png

Random seed

乱数生成器のシードを確認するための値を設定する。
image.png

Stratified split

各分割の行を層別カラムでグループ化するかどうかを指定する。
image.png

Train SVD Recommender

SVD Recommenderの検証データを作成します。
image.png

Select Columns in Dataset

データセット内のカラムを選択する
image.png
今回はMovide NameUserIdを選択。
image.png

Score SVD Recommender

テストデータを使って、SVD Recommenderで予測される評価を取得する
image.png

Recommender prediction kind

レコメンデーションが出力すべき予測の種類を指定する
image.png

  • Rating Prediction:評価の予測
  • Item Recommendation:ユーザーへのおすすめ
    今回は評価の予測をするのでRating Predictionで進めます。

Evaluate Recommender

Recommenderをモデルとして評価する。
image.png

以上がブロックの説明になります。
前回に引き続き、こちらでリアルタイム推論パイプラインの作成をしていきます。

リアルタイム推論パイプライン

大枠は前回と同じ感じになっています。
image.png
今回は作成するとエラーになってます。
エラーの内容としては、推論パイプラインにしたときに、Test datasetがどこからも参照されていないのエラーになります。
しかし、トレーニングの方はもともとのデータを分けてTest datasetにしていたので、今回はリアルタイム推論であり、Test datasetはリアルタイムで作成することになります。
image.png
なので、Evaluate Recommenderは削除して、推論パイプラインを作成していきます。
image.png

前回に引き続き、モデルが出来たらデプロイをして、テスト実行をしてみます。

テスト実行

そしたら、前回のようにテスト実行の画面まで行きます。
今回テストで使用するデータはこちらになります。

{
  "Inputs": {
    "WebServiceInput0": [
      {
        "UserId": 1,
        "MovieId": 68646,
        "Rating": 10,
        "Timestamp": 1381620027
      },
      {
        "UserId": 1,
        "MovieId": 113277,
        "Rating": 10,
        "Timestamp": 1379466669
      },
      {
        "UserId": 2,
        "MovieId": 454876,
        "Rating": 8,
        "Timestamp": 1394818630
      },
      {
        "UserId": 2,
        "MovieId": 790636,
        "Rating": 7,
        "Timestamp": 1389963947
      },
      {
        "UserId": 2,
        "MovieId": 816711,
        "Rating": 8,
        "Timestamp": 1379963769
      }
    ],
    "WebServiceInput1": [
      {
        "Movie ID": 8,
        "Movie Name": "Edison Kinetoscopic Record of a Sneeze (1894)"
      },
      {
        "Movie ID": 91,
        "Movie Name": "Le manoir du diable (1896)"
      },
      {
        "Movie ID": 417,
        "Movie Name": "Le voyage dans la lune (1902)"
      },
      {
        "Movie ID": 628,
        "Movie Name": "The s of Dollie (1908)"
      },
      {
        "Movie ID": 833,
        "Movie Name": "The Country Doctor (1909)"
      }
    ]
  },
  "GlobalParameters": {}
}

このデータで一度テストボタンを押してみます。
image.png
すると、エラーが出ます。
理由としては、上記のデータのWebServiceInput0MovieIDと、WebServiceInput1Movie IDが一致しないことによるエラーになります。
ブロックの時の処理でJoin Dataというのを行ってます。
そのため、MovieIDMovie IDを一致させる必要があります。

今回は自分で分かりやすいように書き換えるだけにします。

{
  "Inputs": {
    "WebServiceInput0": [
      {
        "UserId": 1,
        "MovieId": 1,
        "Rating": 10,
        "Timestamp": 1381620027
      },
      {
        "UserId": 1,
        "MovieId": 2,
        "Rating": 10,
        "Timestamp": 1379466669
      },
      {
        "UserId": 2,
        "MovieId": 3,
        "Rating": 8,
        "Timestamp": 1394818630
      },
      {
        "UserId": 2,
        "MovieId": 4,
        "Rating": 7,
        "Timestamp": 1389963947
      },
      {
        "UserId": 2,
        "MovieId": 5,
        "Rating": 8,
        "Timestamp": 1379963769
      }
    ],
    "WebServiceInput1": [
      {
        "Movie ID": 1,
        "Movie Name": "Edison Kinetoscopic Record of a Sneeze (1894)"
      },
      {
        "Movie ID": 2,
        "Movie Name": "Le manoir du diable (1896)"
      },
      {
        "Movie ID": 3,
        "Movie Name": "Le voyage dans la lune (1902)"
      },
      {
        "Movie ID": 4,
        "Movie Name": "The s of Dollie (1908)"
      },
      {
        "Movie ID": 5,
        "Movie Name": "The Country Doctor (1909)"
      }
    ]
  },
  "GlobalParameters": {}
}

そしたら、こちらのデータで実行してみます。
image.png
しっかり予測できました。

まとめ

今回は映画の評価の予測を行いました。
Recommender prediction kindを変更することで、おすすめの映画を出すことも可能なので、機会があればやりたいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?