33
33

More than 5 years have passed since last update.

AWS Lambdaで 形態素解析 できる賢いSlackボットを低予算で作ろうじゃないか (2)

Posted at

はじめに

形態素解析といえば MeCabKuromoji が有名ですが、中でもTinySegmenterの軽量さにはビビってました。
ところが知らぬ間に、楽天さんが、さらにすごいやつをリリースしていました!

rakutenma_logo.png
https://github.com/rakuten-nlp/rakutenma

  • ピュア JavaScript
  • 日本語/中国語(簡体字) 対応
  • 品詞付き

これはランボーに入れちゃうしかないです!

ランボーとは:http://qiita.com/exabugs/items/e868df55333d0805acb2

AWS設定

Step 1: Lambda設定

  • ランボーのLambda関数を、差し替えます。

  • Lambdaは npm モジュール含みのzipを扱えるのですが、RakutenMA フルパッケージだと 50MByte を超えてしまいます。

  • 以下の最小構成なら、zip で 2MByte 弱でいけちゃう

    • rakutenma.js
    • hanzenkaku.js
    • model_ja.min.json (辞書)
  • Lambda関数は以下になります。
    (一式はこちら GitHub : https://github.com/exabugs/Lambot-MA )

var fs = require("fs");

var RakutenMA = require("./rakutenma/rakutenma");
var HanZenKaku = require("./rakutenma/hanzenkaku").HanZenKaku;
var model = JSON.parse(fs.readFileSync("./rakutenma/model_ja.min.json"));

rma = new RakutenMA(model);
rma.featset = RakutenMA.default_featset_ja;
rma.hash_func = RakutenMA.create_hash_func(15);


exports.handler = function(event, context) {

  // han->zen
  var text = series([HanZenKaku.h2z, HanZenKaku.hw2fw, HanZenKaku.hs2fs], event.text);

  var tokens = rma.tokenize(text);

  tokens = tokens.reduce(function (memo, token) {
    // remove white space tokens.
    if (token[1] !== 'W') {
      // zen->han
      token[0] = series([HanZenKaku.fs2hs, HanZenKaku.fw2hw], token[0]);
      memo.push(token);
    }
    return memo;
  }, []);

  text = tokens.join("\n");

  context.done(null, {text: text});
};

// utility
function series(array, input) {
  return array.reduce(function (input, func) {
    return func(input);
  }, input);
}

Step 2: Configure function

  • Memory: 使用メモリを 128 → 192 に増やす必要があります。

スクリーンショット_2015-11-03_22_17_48.png

確認

Slackで確認してみます。おぉ、ランボーで形態素解析できています!
東京都-京都 問題も、大丈夫ですね。
ランボーが徐々に賢くなってきました。

スクリーンショット_2015-11-03_18_49_35.png

まとめ

  • AWS Lambda 上に、形態素解析が可能な Slack用 ボット (ランボー) を構築しました。
  • ランボーは低料金でオートスケール、かつ、インフラ管理が不要です。
  • Lambdaでは実行環境(コンテナ)が再利用されるようなので、重めの初期化処理があったとしても、レスポンスが速いです。

注意

  • RakutenMA
    • min辞書では学習は不可のようです。
    • アルファベット6文字以上の連続は処理がおかしい?
33
33
1

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
33
33