fc2ブログ

word2vecで『三国志』を分析する

 テキストデータの分析に以前から興味があります。先日、参加したセミナーで「word2vec」が話題に出たこともあり、早速使ってみました。

 まずは、word2vecのインストールです。以下の書籍やネット上にも情報がたくさんありますね。githubからファイル類をダウンロードし、ビルドする方法です。以下のコマンドを順に実行します。
$ git clone https://github.com/svn2github/word2vec.git
$ cd word2vec
$ make
簡単にインストールできました。書籍にはWikipedia英語版の全テキストデータを用いたデモプログラムがありますので、実行して動作確認しました。ワードを英語で入力すると、その関連語をリストアップしてくれたり、3つのワードA、B、Cを入力し、AとBの関係性からCに関係するワードを見つけてくれたりします。もの忘れが気になる今日この頃、大変便利です。

 次のステップはやはり、自分の分析したいテキストに対して、学習して実行させたいですね。ネット上には定番なのか?「青空文庫」のデータを使った事例が多くあります。そこで今回は、以前青空文庫で読み直したことのある、吉川英治著『三国志』の「桃園の巻」を題材にしました。劉備・関羽・張飛三人の出会いから、曹操による董卓暗殺未遂までのストーリーですね。

データ分析の流れは以下の通りです。
 ①テキストデータのダウンロード
 ②前処理(UTF-8変換、ヘッダー、フッダー、ルビ削除、第三水準の漢字の置換等)
 ③形態素解析(今回はmecabを利用して、分かち書きファイルを作成)、 
 ④word2vecで学習
 ⑤分析実行。
この中で②、③が大変面倒な作業です。②はネット上にPythonで自動化されている事例を見かけます。今回試してみましたが、完全にうまく行かなかったので、結局エディタを用いて手間をかけて、手作業で文字置換や削除を行いました。結構大変でした。

 ②の前処理したテキストはこんな感じです。前処理の話は後日、自動化がうまく行った時点で改めてお話しします。preprocess_text_190324.png ③の形態素解析は以下のコマンドで行いました。
$ cat sangokushi1.txt | mecab -Owakati >> sangokushi1_wakachi.txt
入力テキストファイル(sangokushi1.txt)に対し、mecabを実行して「分かち書きファイル(sangokushi1_wakachi.txt)」を作成します。「分かち書き」は英文のように単語単位で区分しスペースを入れた書き方です。wakachi_text1_190324.pngこんな感じです・・。コンピュータにとっては分かりやすくなるのかもしれませんが、正直、読みにくくなりました・・。
 ④は以下のコマンドを実行しました。
$ word2vec -train sangokushi1_wakachi.txt -output sangokushi1.bin -size 200 -window 5 -sample le-3 -negative 5 -hs 0 -binary 1
③で作成した「分かち書きファイル」を読み込み、ベクトル次元200で学習し、学習後のデータをバイナリファイル(*.bin)で出力します。テキスト容量が小さいせいか(本来の学習にはさらに膨大なテキストデータが必要なのか)?、瞬時に実行終了しました。
 ⑤は以下のコマンドを実行しました。
$ distance sangokushi1.bin
Enter word or sentenceに対し「ワード」を入れて実行しますが、「Out of dictionary word!」というエラーが出ました。word2vec_run1_190324.png原因は、学習に使った「分かち書きファイル」で姓・名(劉・備、関・羽等)が分断されていました。ある意味では正しいのかもしれませんが・・・。wakachi_text2_190324.png姓名を一つにまとめた形で取り扱いたいので、分かち書きファイルをエディタで編集し、④から再処理し、⑤を再実行しました。結果は以下の通りです。word2vec_run2_190324.png入力ワードに関連のあるワードが抽出されました。抽出されたワードのほとんどは「登場人物」でした。人物の人間関係の良/悪、敵/味方はともかく、何らかの形で関わりのあるワードが導き出されている結果は大変面白いですね。学習させるテキストの量が増えればそれなりに精度が上がり、異なる結果が得られると思います。ただし、前処理のやり方については、結果にダイレクトに効いてくるので、丁寧かつ慎重に行わなくてはならないと思いました。
スポンサーサイト



コメント

非公開コメント

ご訪問者数

(Since 24 July, 2016)

タグクラウド


プロフィール

Dr.BobT

Author: Dr.BobT
興味のおもむくままに生涯考え続けるエンジニアでありたい。

月別アーカイブ

メールフォーム

名前:
メール:
件名:
本文: