前置き
この記事はGoogle Apps Script Advent Calendarの24日目の記事です。
一番最初にクリスマスイヴを予約したのですが、一番面倒なテーマを設定してしまって、
失敗したかも…。と思う反面、苦戦したのでおもしろくもなんとも無い1日が雑音もなく
過ぎていくと思うと、良かったかなと思っています。
Google Prediction API?
公式ドキュメント
https://developers.google.com/prediction/?hl=ja
少し説明
Google Prediction APIはGoogleが作っている機械学習アルゴリズムを使って、入力データがどんなデータなのかを解析するためのAPIです。
実際にどういうことに使えるかというと、
- 言語解析(入力データが何語なのか?)
- 顧客の心理分析
- Spam検知
- メールの自動分類
って感じに使えるようです。ただし、元になるデータを集めないとダメですけどね!
でも、未来を感じられるAPIではないかと思いますので、これを読んだ方は使ってみて下さい。
事前準備
- Google Cloud Storageを使わないといけないので、APIs Consoleで有効にして下さい。(課金情報の登録が必要ですが、いきなり課金はされないと思います。高くてもうまい棒1本程度…?)
- Google Prediction APIも有効にしてください。
- APIキーも取得しておいて下さい。(以前のGoogle Analytics APIの記事に書いた…かな?)
- Google Apps Script側で、Google APIでPredictionを追加する。Versionは1.5を選択する。
今日のコード.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
- まず、Google Cloud Storageにトレーニングデータをアップロードする。
- train()を実行してトレーニングデータを追加する。
- predict()を実行すると、何語かという結果が出力される。
- predict_japanese()を実行すると、日本語の認識結果が出力される。
- analyze()を実行すると、登録されているトレーニングデータの情報が取得される。
- get()を実行すると状態が取得される
- update()を実行すると新たなデータを追加できる
- HostedModelSample()を実行すると感情解析ができる。(※デモでしか使わないように!)
実行結果
基本的にAPIの戻り値がそのままっぽいので、今回は省略します。
お助けツール
APIs Explorer(うまく動かない時はこれでお試し下さい)
https://developers.google.com/apis-explorer/#p/prediction/v1.5/
結論
ハマってしまったけど、動き始めたら結構おもしろかった。
データをどうやって集めるかが重要かも。