Help us understand the problem. What is going on with this article?

Google Apps ScriptのPrediction Serviceを使ってみた

More than 5 years have passed since last update.

前置き

この記事はGoogle Apps Script Advent Calendarの24日目の記事です。
一番最初にクリスマスイヴを予約したのですが、一番面倒なテーマを設定してしまって、
失敗したかも…。と思う反面、苦戦したのでおもしろくもなんとも無い1日が雑音もなく
過ぎていくと思うと、良かったかなと思っています。

Google Prediction API?

公式ドキュメント

https://developers.google.com/prediction/?hl=ja

少し説明

Google Prediction APIはGoogleが作っている機械学習アルゴリズムを使って、入力データがどんなデータなのかを解析するためのAPIです。
実際にどういうことに使えるかというと、

  • 言語解析(入力データが何語なのか?)
  • 顧客の心理分析
  • Spam検知
  • メールの自動分類

って感じに使えるようです。ただし、元になるデータを集めないとダメですけどね!

でも、未来を感じられるAPIではないかと思いますので、これを読んだ方は使ってみて下さい。

事前準備

  1. Google Cloud Storageを使わないといけないので、APIs Consoleで有効にして下さい。(課金情報の登録が必要ですが、いきなり課金はされないと思います。高くてもうまい棒1本程度…?)
  2. Google Prediction APIも有効にしてください。
  3. APIキーも取得しておいて下さい。(以前のGoogle Analytics APIの記事に書いた…かな?)
  4. Google Apps Script側で、Google APIでPredictionを追加する。Versionは1.5を選択する。

今日のコード.gs

コード.gs
function train() {
  // トレーニングデータを追加する。
  var training = Prediction.newTraining();
  training.setId("languageidentifier");
  training.setStorageDataLocation("bucketName/language_id.txt");

  // いきなりトレーニングデータをinsertしようとすると、Prediction APIの
  // アクセスの承認が表示されなくて承認できないので適当にgetする感じで。
  // これのせいで、「サーバエラー」に悩まされてしまった…。
//  var ret = Prediction.Trainedmodels.get("languageidentifier");
//  Logger.log(ret);

  var training_reply = Prediction.Trainedmodels.insert(training);
  Logger.log(training_reply);
}

function get() {
  var data = Prediction.Trainedmodels.get("languageidentifier");
  Logger.log(data);
}

function predict() {
  // 予測させる
  var predict_input = Prediction.Trainedmodels.newPredictInput().setCsvInstance(["This", "is", "a", "tokenized", "sentence"]);
  var predict_output = Prediction.Trainedmodels.predict("languageidentifier", {"input" : predict_input});

  Logger.log(predict_output);
}

function predict_japanese() {
  // 日本語を予測させる
  var predict_input = Prediction.Trainedmodels.newPredictInput().setCsvInstance(["こんにちは"]);
  var predict_output = Prediction.Trainedmodels.predict("languageidentifier", {"input" : predict_input});

  Logger.log(predict_output);
}

function update() {
  // トレーニングデータを更新する。
  var update_training = Prediction.Trainedmodels.update("languageidentifier", {"label" : "日本語", "csvInstance" : ["こんにちは"]});
  Logger.log(update_training);
}

function analyze() {
  // 解析する。
  var result = Prediction.Trainedmodels.analyze("languageidentifier");
  Logger.log(result);
}

function HostedModelSample() {
  var input = Prediction.Hostedmodels.newPredictInput();
  input.setCsvInstance(["How about meeting up later?"]);

  // サンプルデータから感情を解析する。(例:「あとで会える?」というのは感情的にどうなのか?)
  var ret = Prediction.Hostedmodels.predict("sample.sentiment", {"input" : input});
  Logger.log(ret);
}

使い方

サンプルデータは公式ドキュメントのサイトにリンクがありますが、
ここにもつけておきます。https://developers.google.com/prediction/docs/language_id.txt?hl=ja

  1. まず、Google Cloud Storageにトレーニングデータをアップロードする。
  2. train()を実行してトレーニングデータを追加する。
  3. predict()を実行すると、何語かという結果が出力される。
  4. predict_japanese()を実行すると、日本語の認識結果が出力される。
  5. analyze()を実行すると、登録されているトレーニングデータの情報が取得される。
  6. get()を実行すると状態が取得される
  7. update()を実行すると新たなデータを追加できる
  8. HostedModelSample()を実行すると感情解析ができる。(※デモでしか使わないように!

実行結果

基本的にAPIの戻り値がそのままっぽいので、今回は省略します。

お助けツール

APIs Explorer(うまく動かない時はこれでお試し下さい)
https://developers.google.com/apis-explorer/#p/prediction/v1.5/

結論

ハマってしまったけど、動き始めたら結構おもしろかった。
データをどうやって集めるかが重要かも。

ttyokoyama
GDG Okayama Organizer たまにGoogle関連の技術の事を投稿しています。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした