今までの記事では、次のような内容を説明してきました。Personalizeにデータを登録する場所である、データセットとイベントトラッカーについてこの記事では、前の記事で用意したイベントトラッカーを使って、データセットにデータを登録する方法を説明したいと思います。Personalizeの公式ドキュメントでも使われているユーザーによる映画の評価データMovieLensを使います。MovieLensは、ミネソタ大学の研究グループGroupLensが運営する映画推薦サイトmovielensで集められたデータから作られており、出典を明記することで基本的にどんな研究目的でも利用可能とのことです。Datasetsを使います.適当なディレクトリ(環境変数及びプログラム中の定数DIRに絶対パスが入っているとする)に移動してダウンロードし、zipファイルを展開します。tags.csvいくつかのファイルが含まれていますが、情報推薦のための学習データとしては、ファイルratings.csvを使います。Datasetsのドキュメントに記載がある通り、次のようなフォーマットでデータが記録されています。userId,movieId,rating,timestampuserIdとmovieIdはそれぞれユーザーと映画を識別するためのIDで、ratingは0.5(最低評価)から0.5刻みで最大5(最高評価)の値が記録されています。timestampはいわゆるUNIXタイムで、文献[1]によるとmovielensサイトでユーザーが映画に評価を付けた時間を表すとのことです。Personalizeに登録します。データを登録するためのメソッドは、次のように定義できます。post_data)endAPIのendpointが今まで定義したメソッドのものと異なるアドレスであることに注意して下さい。このメソッドPutEventsを用いてファイルのデータを登録するRubyのコードは、例えば次のようになるでしょう。}}trackingIdの値は、イベントトラッカーの属性を使います(前回の記事を参照して下さい)。PutEventsの1つ目の引数はイベントリストで複数のイベントを渡すことができるので、今回は1つずつ渡しますが配列化しています。公式ドキュメントによると、最大10個のイベントを1度に送信できるとのことです。eventTypeは任意の名前を付けることができますが、ここでは「rating」と名付け、「ユーザーが映画を評価した」というイベントが発生した、という状況を想定しました。イベントの中のpropertiesには、スキーマに対応したデータを入れます。ここで注意することは、スキーマでは予約語の項目USER_ID/ITEM_ID/EVENT_TYPE/EVENT_VALUE/TIMESTAMPはスネークケースであり、それらに対応するPutEventsの項目はキャメルケースであるということです。この対応付は自動的に行われ、もし不一致があるとデータ送信時(PutEvents実行時)にエラーが返ってきます。failed"}「rating」以外の名前を付けたイベントデータを送信することで、色々な切り口の情報推薦サービスが実現できます。ECサイトなら「search」(商品名検索時)、「view」(商品閲覧時)、「click」(商品詳細情報へのリンクをクリック時)などと複数の名前を使ってデータを送信することで、関心の高さが異なる状況に応じた情報推薦が可能となるでしょう。APIを用いるプログラミング技術としては、JSON形式で表された複数のイベント情報を含んだJSON形式のデータを送信するということで、ネスト構造のJSON形式データを送信しなければならないことに注意して下さい。第3回の記事でスキーマ情報を表示した時と同様に、イベント情報のJSON形式文字列がエスケープされ、HTTPリクエストとなり送信されます。作成されたJSON形式データは、例えば次のようになります。"1"}レシピを選ぶレシピは情報推薦の種類とそれに対応する前処理及び機械学習アルゴリズムのセットを指し、種類は3種類が用意されています。USER_PERSONALIZATION:ユーザーが関心を持ちそうな情報を推測するSEARCH_PERSONALIZATION:ユーザーの関心を推測して、情報のリストを並べ替えるRELATED_ITEMS:ある情報に関係がありそうな情報を推測する種類によって、使うことができる機械学習アルゴリズムが変わります。この記事では映画の評価データを用意したので、USER_PERSONALIZATIONを使ってユーザーが関心を持ちそうな映画情報を推測することにしましょう。レシピは自分で作成することも出来ますが、この記事ではAmazonにより用意されている定義済みレシピを使うことにします。USER_PERSONALIZATIONに対するレシピはニューラルネットワークを用いる学習アルゴリズムと、単純に「たくさんある情報は、どのユーザーも関心を持つに違いない」とするアルゴリズムの2種類が用意されています。network)レシピを使うことにします。このレシピでは、用意した映画の評価データのうち、評価の高さの情報は使用されないようです。確かに公式のPython-SDKによるサンプルプログラムを見ても、評価が高いデータを選んで学習データとしていることが分かります(低い評価を付けていても、ユーザーが関心を持っていると判断されてしまうから)。above元々、スキーマの中で評価データを入れる項目であるEVENT_VALUEは文字列として定義されているので、数値データとは扱われないわけです。Name)はarn:aws:personalize:::recipe/aws-hrnnです。このrecipeArnは、次の記事で使います。次の予定ここまでで、図の赤字になっている部分の準備ができました。次の記事では、機械学習アルゴリズムにパラメータを設定し、機械学習を実行させようと思います。