Wikipedia上位下位関係抽出ツールを使ってみた
おはようございます。
最近研究関連で言語処理の分野を見ています。
今回はWikipediaのダンプデータを使って用語の上位下位関係(is-a関係)を抽出するツールがあったので、それを使ってみました。
ツールはこちら。
なお、後述しますが抽出にはかなり時間がかかります。
インストール方法がツールのページに細かく書いてくれているのですが、このツールが2010年か2011年ぐらいのものでしたので、中々スムーズに使うことが出来ませんでした・・・
そこで今回はその方法をメモしておきます。
動作環境と必要なもの
動作環境
今回の私の環境は以下のようになります。
- OS: OS X Mavericks
- ruby: ruby 1.8.7
rubyはrbenvで1.8.7をインストールしました。
1.9以上だと動かないようなので・・・
※ 実際に2.0以上でやってましたが、色々修正が必要でめんどくさかったので結局1.8.7をインストールしました
インストールするもの一覧
さて、次に実行に必要なツールについてですが、以下のものが必要になります。
- 上位下位関係抽出ツールキット
- こちらからダウンロードし、解凍します。
- MeCab: 形態素解析器
- 自分は v0.996 で実行できました。インストールは過去記事参照で。
- IPA辞書: Mecab用辞書
- mecab-ruby
- ruby 1.8.7 に mecab-ruby をビルドします。インストール方法は過去記事参照で。
- pecco: 分類器
- 次で説明します
- Wikipediaのダンプデータ: 解析用
peccoのインストール
ここではpeccoという分類器のインストール方法について記載します。
これの make が中々通らず苦労しました・・・
多分これが一番詰まりました。
peccoのソースファイルを取得
まずはpeccoのソースファイルを取得します。
$ cd ex-hyponymy-1.0 $ wget http://www.tkl.iis.u-tokyo.ac.jp/~ynaga/pecco/pecco.tar.bz2 $ tar jxvf pecco.tar.bz2 $ cd pecco
darts-cloneのダウンロード
次に darts-clone というライブリの最新版をこちらからダウンロードします。
なお、darts-clone を使うとデフォルトより高速かつ省メモリになりますので今回はこちらを使いますが、darts-clone を使わなくても pecco は使うことが出来ます。
その場合は pecco の設定ファイルをである pecco_conf.h を以下のように編集して、次の手順(Makefileの編集)に飛びます。
$ vim pecco_conf.h // darts_clone を使う宣言をしている以下の行をコメントアウト // #define USE_DARTS_CLONE #define USE_CEDAR //この行を追加
さて、darts-cloneを使う場合の話に戻ります。
現時点では0.32が最新版ですのでそれをダウンロードしましょう。
$ wget https://darts-clone.googlecode.com/files/darts-clone-0.32g.tar.gz $ tar zxvf darts-clone-0.32g.tar.gz
次に darts-clone のヘッダファイルを pecco のディレクトリに移動して使えるようにします。
$ pwd /Users/username/Download/ex-hyponymy-1.0/pecco $ cp darts-clone-0.32g/include/darts.h ./darts-clone.h
これで darts-clone が使えるようになりました。
なお、darts-clone は Make でインストール可能ですが、今回はツールが使えるようになればそれで良いのでインストールはしないことにします。
さて、コピーが終わったらあとは darts-clone.h を呼び出しているファイルを少し編集するだけです。
ファイルは typedef.h になります。
$ vim typedef.h // 以下の行をコメントアウト //#include <darts-clone.h> #include "darts-clone.h" // 追加
これで pecco で darts-clone を使えるようになりました。
Makefileの編集
次にMakefileを環境に合わせて編集します。
$ vim Makefile // 以下の行をコメントアウト CC = ccache g++ CC = g++ //追加
このツールではg++でコンパイルするんですが、私のだとデフォルトのg++でやったらエラーが出ましたので、Homebrewでgccの最新版を入れて、gccやg++にシンボリックリンクを張りました。
インストール
さて、ここまで終わったらようやくpeccoをインストールします。
$ sudo make -f Makefile
これでエラーが出なければOKです。
上位下位関係抽出ツールを使う
いよいよツールを使いましょう。
ツールにはdata, data2, data3の3つの学習用データがあります。
デフォルトはdataですが、今回は一番精度の高いdata3を使いたいと思います。
データの指定は -t オプションです。
ちなみに更に高精度の結果が欲しい場合は -a オプションをつけると良いらしいです。
PATH=./pecco/:$PATH script/ex_hyponymy.sh -t ./data3 Wikipediaダンプファイル
上記ではpeccoにパスを通した上でやっています。
これでしばらく(かなりの時間かかりますが)待てば結果が出力されます。
自分の場合は40時間以上はかかったと思います。
出力結果
ツールの実行が終了すると、3つのファイルが作成されます。
hierarchyに対する出力結果
res_hier_withWD_posWDというファイルに出力されます。
この出力結果は、Wikipediaの箇条書きなどの階層構造から上位下位関係を抽出しています。
definitionに対する出力結果
res_def_withWD_posWDというファイルに出力されます。
この出力結果は、WikipediaのAbstract(概要文)から上位下位関係を抽出しています。
categoryに対する出力結果
res_cat_withWD_posWDというファイルに出力されます。
この出力結果は、Wikipediaの記事に付与されているカテゴリタグから上位下位関係を抽出しています。
それぞれの結果を見てみると確かに違いました。
私の場合はなぜかdefinitionだけ何回やってもエラー文も表示されてないのに出力されなかったので諦めましたが……
しかしまぁ、これでやっと使えました。
ここまでローカルにインストールして使うところまで書きましたが、正直Wikipediaの全記事データを分析しているのでめっちゃ時間かかるしメモリもかなり消費するので仮想サーバ上でやるのがおすすめです。
今回は以上です!
それでは。