@uec_tlに使用するマルコフ連鎖による文章生成とテキスト処理のためのパッケージ
Project description
UECTL
@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会登壇資料
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.