uectl

@uec_tlに使用するマルコフ連鎖による文章生成とテキスト処理のためのパッケージ


Keywords
uectl, uec, markov
License
MIT
Install
pip install uectl==0.2.1

Documentation

UECTL

PyPI - Python Version PyPI Version GitHub LICENSE

@uec_tlに使用するマルコフ連鎖モデルとテキスト処理のためのパッケージです.

インストール

uectl本体:

$ pip install uectl

uectl本体+前処理用(MeCabが必要):

$ pip install uectl[preprocessing]

Dockerによる環境構築

マルコフ連鎖で文章を学習させる際, 文章を単語ごとに分ける必要があります. この単語ごとに区切る処理はMeCabというソフトウェアを使います. MeCabを各OSに応じて導入するのは少し面倒なので, Dockerで環境構築できるようにしました. ちなみにMeCabが必要なのは前処理の項だけです. uectl本体だけでも, 前処理済みのサンプルファイルsample_output.txtを使って, モデルの学習と文章生成を行うことができます.

セットアップ(初回時)とコンテナの立ち上げ

$ docker-compose up -d

uec_tl_markovという名前のイメージとuec_tl_markovという名前のコンテナが作成されます.

コンテナに移動

$ docker-compose exec app /bin/sh -c "[ -e /bin/bash ] && /bin/bash || /bin/sh"
root@コンテナID:/home/uec_tl_markov#

前処理

workspaceディレクトリに移動した後, preprocessing.pyを使って, テキストを前処理します.

$ cd workspace

sample_input.txtというサンプルファイルがあるので, それを使って試してみます.

$ cat sample_input.txt
私は電通大が好きです
調布が好きでした
好きな店は食神です
$ python preprocessing.py -i sample_input.txt -o sample_output.txt

前処理の結果はsample_output.txtに保存しました.

$ cat sample_output.txt
私 は 電通大 が 好き です 
調布 が 好き でし た 
好き な 店 は 食 神 です 

食 神以外は予想通りに区切れていますね.

モデルの学習

次にsample_output.txtの各行を学習データとして, N階マルコフ連鎖(N=2)のモデルを作成します.

$ python training_model.py -i sample_output.txt -o sample_model.json -s 2

学習したモデルはsample_model.jsonとして保存しました.

文章生成

最後に, 先ほど学習したモデルsample_model.jsonを使って, どのような文章を生成するかを確かめてみます.

$ python testing_model.py -i sample_model.json -c 5
調布が好きでした
好きな店は食神です
調布が好きでした
好きな店は食神です
私は電通大が好きでした

私は電通大が好きでしたという学習データには存在しない文章の生成を確認できました!

文章を生成し始める単語の指定もできます. 指定する単語数は1からNのいずれかです(今回の例ではN=2). それぞれの単語は空白文字で区切る必要があります.

$ python testing_model.py -i sample_model.json -c 5 -b "電通大 が"
電通大が好きでした
電通大が好きでした
電通大が好きです
電通大が好きでした
電通大が好きです

UEC18LT会登壇資料

電通大生の呟きを基に電通大生を錬成してみた