AWS LambdaでVibratoを使う実験

AWS LambdaでVibratoを使う実験

VibratoをLambdaで使いたい

Vibratoは高速便利な形態素解析器。
以下の記事参照。

これを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」の中身は以下の通り。

  • 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レイヤーを作成。

必要なPythonライブラリは2つ。

  • vibrato
  • zstandard

1.3. Lambda関数の作成

  • 関数作成

AWSコンソールから「Lambda→関数→関数の作成」に移動。
適当な名前を付けて「関数の作成」。



  • zipファイルアップロード

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



  • 設定変更

このまま動かすとメモリが足りなくてエラーが発生する。

「Lambda→関数→さっき作った関数名→基本設定を編集」に移動。
メモリを、デフォルトの「128MB」から余裕を見て「512MB」くらいに増やす。

  • Lambdaレイヤー設定

さっき作ったLambdaレイヤーを設定。

1.4. テスト

「Lambda→関数→さっき作った関数名→テスト」に移動。

イベントJSONにtext変数を作る。

1
2
3
{
"text": "分かち書きしてください!"
}

「テスト」をクリックすると以下のように結果が表示される。

1
2
3
4
{
"statusCode": 200,
"body": "[\"分かち書き\", \"し\", \"て\", \"ください\", \"!\"]"
}

うまくできた。
所要時間 1228.00 ms

この値が速いのかどうかはわからない。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×