14
10

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 5 years have passed since last update.

Ateam引越し侍Advent Calendar 2016

Day 18

Googleスプレッドシートの機械学習アドオンを日本語で試す

Last updated at Posted at 2016-11-28

機械学習で分類問題を手軽に解くのに、GoogleスプレッドシートのアドオンであるSmart Autofill(スマート・オートフィル)がありますが、日本語を扱うために工夫が必要だったので、そのメモです。

Smart Autofillを利用する

Smart Autofillは、GoogleのPrediction APIを手軽に利用できるGoogleスプレッドシートのアドオンです。

スプレッドシートデータから学習した結果を使い、歯抜けになっている空白セルに入るべき値を予測して埋めてくれます。

screenshot1.png

Smart Autofillの入門ガイドには、多言語で入力されたテキストが、英語、スペイン語、フランス語のいずれであるかを自動補完するサンプルがあるのですが、これと同じことを日本語でも行うには、形態素解析をしておく必要がありました。

日本語を扱うための形態素解析

スプレッドシート上で形態素解析(分かち書き)を行うには、いくつか方法がありそうでしたが、てっとり早くYahooデベロッパーネットワークの日本語形態素解析APIを使用しました。

YahooAPIの分かち書きは便利です。抽出した単語を品詞ごとにフィルタリングできます。利用制限も1日あたり50000リクエストまでいけるので、何かお試しするには十分です。

スプレッドシートのメニューから、スクリプトエディタを開き、以下のソースを入力します。

コード.gs
function myFunction(text)
{
  var appid = "自分のアプリケーションID";
  var filter = "1%7C2%7C3%7C4%7C5%7C6%7C7%7C8%7C9%7C10";  // 名詞やら動詞やらを指定しています
  var url = "http://jlp.yahooapis.jp/MAService/V1/parse?appid="+appid+"&results=ma&sentence="+text+"&filter="+filter;
  var namespace = XmlService.getNamespace("urn:yahoo:jp:jlp");

  // APIを呼ぶ
  var xml = UrlFetchApp.fetch(url);
  // XMLをパース
  var document = XmlService.parse(xml.getContentText());

  var entries = document.getRootElement();
  var ma_result = entries.getChild("ma_result", namespace);
  var word_list = ma_result.getChild("word_list", namespace);
  var word = word_list.getChildren("word", namespace);

  var ret = "";
  for (var i = 0; i < word.length; i++) {
    // スペース区切りで抽出
    ret += word[i].getAllContent()[0].asElement().getText() + " ";
  }

  return ret;
}

スクリプトを保存したら、セル内で以下のように関数が使えるようになります。

=myFunction(A1)

filterパラメータには、フィルタリングしたい品詞を設定できます。フィルタリングが不要の場合は、パラメータを設定しなければOKです。

今回は、引越し侍で収集しているお客様からの口コミ文章をカテゴライズすることが目的だったので、日本語文章内の句読点や助詞などは不要かなと思って省く設定にしてみました。

filterに指定可能な品詞番号

品詞番号 品詞名
1 形容詞
2 形容動詞
3 感動詞
4 副詞
5 連体詞
6 接続詞
7 接頭辞
8 接尾辞
9 名詞
10 動詞
11 助詞
12 助動詞
13 特殊(句読点、カッコ、記号など)

まとめ

はじめ何も考えずに、そのままの日本語文章をSmart Autofillしてみたところ、うまくカテゴライズしてくれなかったのですが、よくよく考えたら、そりゃ分かち書きが必要だよねと思い、形態素解析したデータに対して実行してみたところ、いい感じでカテゴライズしてくれるようになりました。

実際に運用するには、Prediction APIを使ってプログラミングするほうが良いと思いますが、まずはどれくらいのクオリティで自動補完してくれるかのテストには、お手軽に試せるSmart Autofillはとても便利でした。

14
10
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
14
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?