このページは、PredictionAPIを15分程度で、とりあえず使ってみるサンプルを紹介します。
とりあえずこのサンプルを試したあとに、他のドキュメントを読むとよいでしょう。
Prerequisites 前提条件
- Getting StartedページのPrerequisitesを満たしていることを確認してください。
- このサンプルを実行するために、Google Storageへのファイルのアップロード方法をマスターしておいてください。
The Problem 解決課題
あなたの会社では、電子メールで複数の言語での問い合わせを受け付けていると考えてください。
そしてあなたは、該当する言語の担当者に、電子メールを振り分けなければなりません。
つまりここでの問題は、与えられたテキストが英語なのかスペイン語なのかフランス語なのか判別する、ということになります。
これをするためにあなたは、予測エンジンに学習させるための学習データを作成する必要があります。
一つの学習データは、いくつかのテキストで構成されており、そのテキストの言語を表す、「英語」「スペイン語」「フランス語」のいずれかのラベルが振られているものとします。
学習の後に、任意の言葉や文章を与えると、予測エンジンはそれを上記の言語のうち一番近いものに分類します。
The Solution 解法
Hello Predictionを行う処理の流れは以下のようになります。1.認証トークンの取得
- PredictionAPIへのリクエストは、すべて認証されている必要があります。 APIはOAuth認証をサポートします。このサンプルでは、OAuthに対応したoacurlコマンドラインツールを使います。最初にトークンをリクエストし、その後のリクエストには、すべてトークンを含める必要があります。
2.学習データのアップロード
- Google Storageに、英語、スペイン語、フランス語を含んだ学習データをアップロードします。 Google Storageにアップロードしたデータのbucket名やオブジェクト名は、学習モデルの一意識別子として使われます。 Prediction APIのリクエストは、この一意識別子により、学習モデルを指定する必要があります。
3.学習
- Prediction APIに、学習データを読み込んで学習するように指示します。 この処理は非同期に行われるため、定期的にサーバーに問い合わせを行って、学習の状態を調べる必要があります。 学習に基づく予測問い合わせを行う前に、学習は完了していなければなりません。
4.問い合わせの実行
- 学習の完了後、単語や文章を含んだクエリをサーバーに送信し、サーバーから、そのテキストに対応した言語を受け取ります。 このステップは何回でも実行できます。
このサンプルでは、oacurlコマンドラインツールと、リクエスト送信用のヘルパースクリプトを使用します。
oacurlのヘルパースクリプトは、ライブラリのページにあります。(スクリプトの使い方や、注意点を解説しています。)
oacurlはここからダウンロード
1.認証トークンの取得
oacurlを使用した認証を行う際、インターネットにアクセスでき、ブラウザが使用可能である必要があります。
ダウンロードしたoacurlのjarファイルを置いたディレクトリに移動し、以下のコマンドを実行してください。
このコマンドはブラウザを立ち上げ、Googleアカウントのログインページを表示します。
ログインの後、oacurlがあなたのGoogleアカウントでPrediction APIにアクセスすることを許可するかどうかを聞いてきます。
Prediction APIをアクティブにしたGoogleアカウントでログインすることを忘れないでください。
$ java -cp oacurl-1.2.0.jar com.google.oacurl.Login --scope https://www.googleapis.com/auth/prediction
※このコマンドにより取得したトークンには長めのライフタイムがあり、セッションの最初に一度実行すればOKです。
もし、セッションの途中で認証エラーが発生した場合は、もう一度このコマンドを実行し、再度トークンを取得してください。
2.学習データのアップロード
この学習ファイルをダウンロードしてください。
これは、英語とスペイン語とフランス語の学習データを含んでいます。
学習ファイルのフォーマットは、カンマ区切りのテキストファイルで、2つのカラムと、多数のレコードからなります。
2つ目のカラムは、一つの言語に対するサンプルテキストです。
1つ目のカラムは、サンプルテキストの言語を表すラベル名です。
学習ファイルを開いて、中身を見てみてください。
学習ファイルをGoogle Storage Bucketにコピーしてください。
このサンプルでは、「examplebucket」というbucketを使っていますが、あなた自身のbucketに読み替えてください。
(bucket名は他ユーザーとの間でもユニークでなければならない。)
オブジェクト名については、好きな名前にすることができます。オリジナルの学習ファイルと同じにする必要はありません。
$ gsutil cp ./language_id.txt gs://examplebucket/prediction_models/languages $ gsutil ls gs://examplebucket gs://examplebucket/prediction_models/languages
3.学習
次のステップはシステムに学習させることです。
そのためには、先ほどアップロードした学習ファイルのbucket/objectを指定したPOSTリクエストをサーバーに送信します。
リクエストの送信後、学習が完了するまでポーリングします。
このサンプルでは、oauth-train.shと、oauth-check-training.shという、ヘルパースクリプトを使います。
これらのスクリプトファイルをローカルにコピーして、以下のように実行してください。
この学習は、1分以内に終了するはずです。もしそれ以上かかるようなら、障害が発生している可能性が高いです。
学習データをGoogle Storageにアップロードしたか、また、スクリプト実行の際にGoogle Storageのbucket/objectを正しく指定したかを確認してください。
なお、スクリプトを実行する際、gs:// は不要です。
$ ./oauth-train.sh examplebucket/prediction_models/languages { "kind": "prediction#training", "id": "examplebucket/prediction_models/languages", "selfLink": "https://www.googleapis.com/prediction/v1.2/training/examplebucket/prediction_models/languages" } $ ./oauth-check-training.sh examplebucket/prediction_models/languages { "kind": "prediction#training", "id": "examplebucket/prediction_models/languages", "selfLink": "https://www.googleapis.com/prediction/v1.2/training/examplebucket/prediction_models/languages", "modelInfo": { "modelType": "classification", "classificationAccuracy": 0.95 }, "trainingStatus": "DONE" }
4.問い合わせの実行
学習が完了すれば、サーバーに問い合わせを送信し、予測させることができるようになります。
oauth-predict.shスクリプトファイルをダウンロードし、以下のコマンドを実行して、"muy bueno"が、フランス語、スペイン語、英語のうち、どれに一番近いと判断されるか試してください。
$ ./oauth-predict.sh examplebucket/prediction_models/languages "\"muy bueno\"" { "kind": "prediction#output", "id": "examplebucket/prediction_models/languages", "selfLink": "https://www.googleapis.com/prediction/v1.2/training/examplebucket/prediction_models/languages/predict", "outputLabel": "Spanish", "outputMulti": [ { "label": "French", "score": 0.334130 }, { "label": "Spanish", "score": 0.418339 }, { "label": "English", "score": 0.247531 } ] }スコアが最大のものが、一番近いと判断されたもので、それは"outputLabel"で示されているスペイン語となります。