形態素解析器 kagome を Google App Engine の最も安いインスタンスで動かす

概要

前回までのあらすじ: kagome を GAE で動かしたいという話があり,kagome.ipadic という IPA 辞書だけを収めたコンパクト版を用意して,GAE 上で動作させることに成功したわけですが,メモリの消費量が多くて B4インスタンス(メモリ 512MB)以上じゃないと動作しなかったわけです.正直,kagome を GAE で動かしたいという話をチラホラ聞くものの,それは「動くかどうか試してみたい」的なやつで,実際使ってらっしゃるという話は聞こえてこなかったわけです.

ところが・・・

kagome はちと動作に敷居が高いとのご指摘を受け,

不幸にも黒塗りの高級車に追突してしまう後輩をかばいすべての責任を負った三浦に対し,車の主,暴力団員谷岡に言い渡された示談の条件とは…。

参考:

Instance Class Memory Limit CPU Limit
B1 128 MB 600 Mhz
B2 256 MB 1.2 Ghz
B4 512 MB 2.4 Ghz
B4_1G 1024 MB 2.4 Ghz
B8 1024 MB 4.8 Ghz
F1 128 MB 600 Mhz
F2 256 MB 1.2 Ghz
F4 512 MB 2.4 Ghz
F4_1G 1024 MB 2.4 Ghz

何が問題か

メモリ使用量です.Java 実装の gomoku (Igo の派生) では動くとのことなので,ここにヒントがありそうです.

github.com

gomoku の特徴にはこうあります

  • Igo( http://igo.sourceforge.jp/ )から派生した形態素解析
  • 辞書データがあらかじめjarファイルに含まれていることが特徴
  • デフォルトではIPADIC(mecab-ipadic-2.7.0-20070801)を使用している
  • common lispで書かれた辞書構築コマンドを使うことでカスタマイズは可能
  • 現状ではIPADIC以外に対応しようとする場合は(おそらく)ソースコードの修正が必要
  • 素性としては品詞情報のみを保持
  • 原型や読みの情報などの情報は破棄している
  • その他、形態素解析器としての特徴は、おおむねIgoと同様

なるほど.たしかに辞書の付加項目をなくせば使用メモリが減らせそうです.

品詞
品詞細分類1
品詞細分類2
品詞細分類3 ↑ ここまでは保持
活用型    ↓ ここから先は別管理にして必要なときだけロードする
活用形
基本形
読み
発音

削減結果

変更前

実は F2 インスタンスでもぎりぎり動いたらしい.253 MB 必要. f:id:ikawaha:20170602004106p:plain

変更後

97.5 MB まで削減され,B1/F1 インスタンスで動くようになりました 🙌 ヤター

f:id:ikawaha:20170602004321p:plain

実際に動作確認してくださったり報告してくださった Kazzz さん,ありがとうございました!

ぜひ GAE/Go で形態素解析してみてください.Happy Hacking ! github.com