VibratoをLambdaで使いたい
Vibratoは高速便利な形態素解析器。
以下の記事参照。
VibratoをPythonで実験、Ginzaと速度比較
VibratoをWindows・Pythonで動かす高速な形態素解析器Vibrato。MeCabと同じ解析結果でMeCabの2倍速いらしい。Windows・Py…
これをAWS Lambdaで使いたい。
1. 実験
1.1. zipファイルの準備
Lambda関数にアップロードするzipファイルを用意する。
下記の2種を準備。
- lambda_function.py(Lambda関数で実行するコード)
- ipadic-mecab-2_7_0(Vibrato用の辞書ファイル)
「ipadic-mecab-2_7_0」は上の方にあるVibrato記事参照。
「lambda_function.py」の中身は以下の通り。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| import vibrato import zstandard import json
# Lambdaのハンドラ関数 def lambda_handler(event, context): # 辞書ファイルの読み込み dctx = zstandard.ZstdDecompressor() with open('ipadic-mecab-2_7_0/system.dic.zst', 'rb') as fp: with dctx.stream_reader(fp) as dict_reader: tokenizer = vibrato.Vibrato(dict_reader.read())
# Lambdaの引数で与えられたテキストの取得 text = event['text']
# 分かち書き tokens = tokenizer.tokenize(text) tokens = [token.surface() for token in tokens]
# 結果を返す return { 'statusCode': 200, 'body': json.dumps(tokens, ensure_ascii=False) }
|
これをzip圧縮。
下記のような構造になる。
1 2 3 4 5
| lambda_function.zip │ ├── lambda_function.py └── ipadic-mecab-2_7_0/ └── system.dic.zst
|
1.2. Lambdaレイヤーの作成
下記記事の要領でLambdaレイヤーを作成。
AWS Lambda用のレイヤーをWindows上のDockerで作成
Lambdaレイヤーを作成する目的と問題目的AWS Lambda関数で標準でないPythonライブラリ(今回の場合はopenai、linebot-sdkなど)を…
必要なPythonライブラリは2つ。
1.3. Lambda関数の作成
AWSコンソールから「Lambda→関数→関数の作成」に移動。
適当な名前を付けて「関数の作成」。

「Lambda→関数→さっき作った関数名→コード」に移動。
さっき作ったzipファイルをアップロード。

このまま動かすとメモリが足りなくてエラーが発生する。
「Lambda→関数→さっき作った関数名→基本設定を編集」に移動。
メモリを、デフォルトの「128MB」から余裕を見て「512MB」くらいに増やす。
さっき作ったLambdaレイヤーを設定。
1.4. テスト
「Lambda→関数→さっき作った関数名→テスト」に移動。
イベントJSONにtext変数を作る。
1 2 3
| { "text": "分かち書きしてください!" }
|
「テスト」をクリックすると以下のように結果が表示される。
1 2 3 4
| { "statusCode": 200, "body": "[\"分かち書き\", \"し\", \"て\", \"ください\", \"!\"]" }
|
うまくできた。
所要時間 1228.00 ms
この値が速いのかどうかはわからない。