3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

マルコフ連鎖ライブラリ作ってみた

Posted at

はじめに

"NeXov Enables eXtensible Observation of Vertices"
「NeXov」という汎用マルコフ連鎖ライブラリを開発してみました。ぜひこの記事を読んで使ってみてください!

NeXovの特徴

  • 有向グラフを用いて実装、モデルのインポートエクスポートも容易 (NetworkX)
  • NLPを用いた高精度なトークン化機能 (MeCab)
  • 自動整形された可視化グラフ (Graphviz)

NeXovは、これらを 「オールインワンで」 提供するライブラリとなっています。

インストール

いくつか前提ソフトがあるので先にインストールします。

MeCab

形態素解析を行うMeCabはNeXovのデータ前処理に使われています。MeCabをインストールするには、以下のサイトからインストーラーをダウンロードし、インストーラーの指示に従います。

Debian系ディストリは以下のコマンドを実行します。

$ sudo apt install mecab libmecab-dev mecab-ipadic-utf8

NEologd

NEologdは、MeCabを固有名詞に強くするためのシステム辞書です。
Windowsであれば、以下のサイトを参考にインストールしてください。

また、Debian系ディストリであれば以下のサイトが参考になります。

Graphviz

Graphvizは、グラフの可視化を行うライブラリです。以下のサイトを参考にインストールしてください。

Install

NeXovをインストールするには、以下のコマンドを実行します。

$ pip install nexov

使い方

NeXovには以下のような機能があり、それぞれ対応するコマンドがあります。

Command Feature
tokenize テキストのトークン化
generate モデルの構築・生成...etc
visualize モデルの可視化
usage: nexov [-h] {tokenize,generate,visualize} ...

NeXov Enables eXtensible Observation of Vertices

positional arguments:
  {tokenize,generate,visualize}
    tokenize            テキストをトークンに分割
    generate            モデルまたはテキストを生成
    visualize           モデルを画像として可視化

options:
  -h, --help            show this help message and exit

tokenize

tokenizeは、自動でテキストをトークン化するコマンドです。

オプション

usage: nexov tokenize [-h] -i INPUT [-o OUTPUT] [--method {mecab,char}]

options:
  -h, --help            show this help message and exit
  -i INPUT, --input INPUT
                        入力ファイル
  -o OUTPUT, --output OUTPUT
                        出力ファイル
  --method {mecab,char}
                        分割方法

$ cat input.txt
ぐっもーにん!
もにもに!
もーにん!!
もにもに!!!!
おはですー!!
おはですー!
おはようです!!!!!!
$ nexov tokenize -i input.txt -o tokens.txt
[+] Wrote tokenized data to tokens.txt
$ cat tokens.txt
ぐっも ー に ん !
も に も に !
も ー に ん ! !
も に も に ! ! ! !
お は です ー ! !
お は です ー !
おはよう です ! ! ! ! ! !

generate

generateは、モデルの構築と生成、またインポート・エクスポートも行うコマンドです。

オプション

usage: nexov generate [-h] -i INPUT [-s START] [-l LENGTH] [-e EXPORT] [-v VISUALIZE]

options:
  -h, --help            show this help message and exit
  -i INPUT, --input INPUT
                        モデルまたはトークン済みデータファイル
  -s START, --start START
                        開始トークン
  -l LENGTH, --length LENGTH
                        生成するトークン数
  -e EXPORT, --export EXPORT
                        生成後のモデルをファイルにエクスポート
  -v VISUALIZE, --visualize VISUALIZE
                        生成と同時に可視化を実行(拡張子を除く出力ファイル名を指定)

$ cat tokens.txt
ぐっも ー に ん !
も に も に !
も ー に ん ! !
も に も に ! ! ! !
お は です ー ! !
お は です ー !
おはよう です ! ! ! ! ! !
$ nexov generate -i tokens.txt -s-l 100
もにもにもにもーにもにん!おはです!おはですー!!!!もに!もにん!!もにん!おはですー!!!おはですー!!もー!おはようです!!!おはようです!!おはですーにもにもー!もに!!!!もにもーにん!!!おは です!!おはようですー!もにん!!

$ nexov generate -i tokens.txt -e model.json
[+] The model was exported to model.json
$ nexov generate -i model.json -s-l 100
もーにん!おはですーにもにん!!!!おはですー!!!もにん!もにもにもー!もにん!!!!!もにもにん!!もーにもにん!!!!おはようですー!おはです!!!!!!おはようですーに!おはですーに!!!!おはよ うですー!もにもにもにん!おは

visualize

visualizeは、モデルを画像で可視化するコマンドです。

オプション

usage: nexov visualize [-h] -i INPUT -o OUTPUT [--font FONT]

options:
  -h, --help            show this help message and exit
  -i INPUT, --input INPUT
                        モデルファイル
  -o OUTPUT, --output OUTPUT
                        出力ファイル(拡張子を除くファイル名を指定)
  --font FONT           使用するフォント

$ nexov visualize -i model.json -o output
[+] The model visualization was saved to output.png

output.png

生成例

3
2
0

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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?