Furudateのブログ

プログラミングやネットワーク系の知識・技術がメインのブログ。技術メモ帳的な感じになるかと。岩手から発信していきます。

Wikipedia上位下位関係抽出ツールを使ってみた

おはようございます。
最近研究関連で言語処理の分野を見ています。
今回はWikipediaのダンプデータを使って用語の上位下位関係(is-a関係)を抽出するツールがあったので、それを使ってみました。
ツールこちら
なお、後述しますが抽出にはかなり時間がかかります。

インストール方法がツールのページに細かく書いてくれているのですが、このツールが2010年か2011年ぐらいのものでしたので、中々スムーズに使うことが出来ませんでした・・・
そこで今回はその方法をメモしておきます。

動作環境と必要なもの

動作環境

今回の私の環境は以下のようになります。

rubyはrbenvで1.8.7をインストールしました。
1.9以上だと動かないようなので・・・
※ 実際に2.0以上でやってましたが、色々修正が必要でめんどくさかったので結局1.8.7をインストールしました

インストールするもの一覧

さて、次に実行に必要なツールについてですが、以下のものが必要になります。

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の全記事データを分析しているのでめっちゃ時間かかるしメモリもかなり消費するので仮想サーバ上でやるのがおすすめです。

今回は以上です!
それでは。

参考にさせていただいたサイト

上位下位関係抽出ツール Version1.0: Hyponymy extraction tool

上位下位関係抽出ツールを使う | kitayama lab

上位下位関係抽出ツールを使ってみる - 重要なお知らせ