Welcome to  Asakawa's  Neural  Network  Simulator 

浅川伸一 asakawa@ieee.org

東京女子大学のトップページ   情報処理センターのページ   東京女子大学の Gmail のページ   東京女子大学の図書館のページ   浅川のホームページへ戻る

人工文豪(マルコフ連鎖)の遊び方

教材のコピー

実習用教材をコピーするには,ターミナルエミュレータを開いて以下のコマンドをタイプする。

cp -rp ~asakawa/Markov_Chain .

すると自分のホームディレクトリ(ホームホルダ)に Markov_Chain というサブディレクトリ(ホルダ)ができている。

教材の中身

コピーしてきたディレクトリには,以下のような拡張子を持つファイルが含まれている

実習用にコピーしてきたディレクトリには以下のファイルが収められている。

作品 原著者 ファイル名 個数
ある阿呆の一生芥川龍之介Akuta_Aru 9
不思議の国のアリスルイス・キャロルAlice16
堕落論坂口安吾Ango_Daraku9
人間失格太宰治Dazai_Ningen9
インターネットの歴史?Hist_Inet8
ゲティスバーグ演説エイブラハム・リンカーンLincoln15
銀河鉄道の夜宮沢賢治Miyazawa_Ginga9
坊ちゃん夏目漱石Natsume_Bocchan9
こころ夏目漱石Natsume_Kokoro9
データ検証用データ不明quick_silver_fox15

このうち,文芸作品については青空文庫 http://www.aozora.gr.jp/ からダウロードした。

まずは動作確認

Markov_Chainというディレクトリに移動して, make コマンドを実行すると デモが観られるようになっている。

cd ./Markov_Chain
make

一通り実行するまで

青空文庫からダウンロードしたファイルを元に人工文豪を実行する手順を解説する。

  1. 青空文庫からファイルをダウンロードする
  2. ダウンロードしてきたファイルを解凍する
  3. ファイルの文字コードを EUC に変換する
  4. データーベースを作成する
  5. シミュレーションをして遊ぶ

大まかに言うと以上のような操作をすればよい。以下でそれぞれの操作の例を示す。

青空文庫からダウンロードする

青空文庫から圧縮されたデータをダウンロードするか,xhtmlファイルを画面上 からコピーアンドペーストするかいずれかの方法で持ってくる。

青空文庫のトップページ

以下ではダウンロードしてくる方法を解説する。 例えば,小泉八雲の「耳なし法一」を人工文豪で処理させるには

  1. xhtml ファイルを表示させて,ブラウザの画面からコピーし, エディタ(テキストエディットなど)で加工する
  2. zip ファイルをダウンロードする

という2通りがある。すなわち,小泉八雲の作品のうち「耳なし法一」を選んだところは 以下の画面のようになる。

耳なし法一

ここでファイルのダウンロードを選択すれば zip ファイルが得られる。

耳なし法一の2画面目

ファイルの解凍

その後,以下のコマンドをタイプして圧縮ファイル 42927_ruby_15422.zip から テキストファイル miminashi_hoichi.txt を取り出す。

mv ~/Downloads/42927_ruby_15422.zip .
unzip 42927_ruby_15422.zip
Archive:  42927_ruby_15422.zip
  inflating: miminashi_hoichi.txt    

形態素解析と文字コードの変換

解凍したテキストファイルを形態素解析ソフトによって単語の分かち書きファイルを作る。

nkf --Lu -euc miminashi_hoichi.txt|kakasi -w > Mimi.txt

形態素解析については,kakasi を使った。 ここからは地道な手作業になるが,テキストエディットで読み込んで不要な部分をカットする。

耳なし法一その4

以上の操作で,ダウンロード,解凍,形態素解析,及び文字コードの変更が終わったことになる。

人工文豪用にデータベースを作成する

続いて人工文豪用のデータベースを作成する。

./make-3s -d Mimi3w Mimi.txt

このコマンドによって Mimi3w.pag, Mimi3w.dir という二つのデータベースができあがる。

シミュレーションの実行

データベースの作成まで完了してれば,後はシミュレーションを実行するだけである。 

./Markov-3s -d Mimi3w

Markov-3sというファイルが人工文豪の実体である。 引数(ひきすう)として -d Mimi3w を指定しているが -d オプションはデータベース名の指定である。 この場合 Mimi3w.pagMimi3w.dirというファイルの指定である。 ただしファイルの拡張子は除いて指定する。

サンプル出力例を以下に示す。

./Markov-3s -d Mimi3w | --utf8
### Seed: 1259732991
に し て 咳 も せか ず 、 助け を 呼ん だ ところ で 助かる わけ の もの !   
痛 さ は 非常 で あっ た 。 いまだ かつて 人 の 「 大した 高い 身分 の 方 
へ 通っ て 行き ―― 庭 に 下り ―― 道路 の 方 から 跫音 の やって来る の が 、 
誰 れ も 芳一 の この 驚く べき 技 倆 に ひどく 感心 し て しまっ た 。 
しかし その 海岸 一帯 に は 入水 さ れ た くらい で あっ た 。 しかし その 
海岸 一帯 に は 入水 さ れ て い た !   もっと 前 に お前 を 引き込ん だ 
の だ ! … … 道理 で 返事 を し ない はず だ 、 何故 か と いう に 、 また 
水泳 する 人 を たえず 待ち受け て い なさい 。 すると 迎え が 来る 。   
その 女 は こう 云っ た ―― ますます 烈しく 壇ノ浦 の 合戦 の 曲 を 誦し た 。 
しかし その 海岸 一帯 に は 入水 さ れ 、 それから 女 の 声 を 張り上げ 、 
烈しい 海戦 の 歌 を うたっ た ―― が 、 誰 れ に も 御 話し に

オプションスイッチ

人工文豪では,-d, -h, -n, -s の 4 つのスイッチが用意されている。

オプション意味
-dデータベース名の指定
-h簡単な使い方のヘルプを表示する
-n何語出力するかをしている(デフォルトでは200単語)
-s乱数の種を指定する

乱数の種は,指定してなければ現在の時刻で初期化している。

他のマルコフ連鎖モデルとの比較

上の例では,3--gram の(すなわち3次の相関の)共起頻度を用いている。 1--gram, 2--gram, 及び 4--gram の操作も可能である。 詳しくは Makefile を参照して欲しいが,1--gram のデータベースは ./make-1w, ./make-1c で作ることができる。 ./make-2w, ./make-2c で 2 次の共起頻度 を調べることができる。./make-4th で 4 次の共起頻度のデータベースを作ることができる。

それらを使って実際に文章を算出させるプログラムが,それぞれ

である。すなわち make-1wで作ったデータベースはMarkov-1w でデータを表示することができる。make-2wで作ったデータはMarkov-2w で表示する。また,単語単位の n-gram を行うのが -wであり,文字単位の n-gram を表示するのが-cである。-cのついたプログラムは 英語の文章しか処理できない。

show

実際にどのような共起頻度かを調べるコマンドがshow-である。 例えば,2次の単語ベース n-gram を見たければshow-2wを用いれば良い。 たとえば次のようにである。

./show-2w -d Dazai_Ningen2w | nkf --utf8 | lv -Ou8

この出力例を以下に示す。

total =  47993
  (は,、)= 725
(た,。)= 591
(て,、)= 406
(まし,た)= 365
(、,自分)= 363
(でし,た)= 313
(自分,は)= 290
(が,、)= 279
(し,て)= 278
(。, )= 268

全部で47993個の 2-gram があり,そのうち最大のものは「は」と「、」との組み合わせであり, その725回あったという意味である。2番目に多かった組み合わせは「た」と「。」であった。