[Home]
[English] [Japanese]
CRFSuite と同じく、ソースコードからビルドする場合、本ソフトウェアは libLBFGS を必要とします(Windows バイナリでは静的リンクされているため必要ありません。使用方法をご覧ください)。Unix 系 OS での典型的な手順を次に示します。
まず、libLBFGS のページからソースコードをダウンロードし、適当なディレクトリに展開します。その後、configure を --prefix オプションでインストールパスを指定して実行し、 make -> make install します。
[/path/where/you/extracted/libLBFGS/] ./configure --prefix=/install/path/of/libLBFGS/
[/path/where/you/extracted/libLBFGS/] make
[/path/where/you/extracted/libLBFGS/] make install
その後、CRFSuite for variable-order Markov models (crfsuite-variableorder) の github リポジトリから圧縮ファイルをダウンロードし、適当なディレクトリに展開します。その後、configure を --with-liblbfgs オプションで上記の libLBFGS インストールパスを指定、--prefix で crfsuite-variableorder のインストールパスを指定して実行し、make -> make install します。
[/path/where/you/extracted/crfsuite-variableorder/] ./configure --with-liblbfgs=/install/path/of/libLBFGS/ --prefix=/install/path/of/crfsuite-variableorder/
[/path/where/you/extracted/crfsuite-variableorder/] make
[/path/where/you/extracted/crfsuite-variableorder/] make install
基本的な使い方は CRFSuite と共通ですが、素性を自動生成せず、ファイルから読み込むというところが違います。素性を記述したファイルは -f または --features オプションで指定します。n-1次の素性を指定する場合、フォーマットは次の通りです。
ATTR[tab]LABEL0[tab]LABEL1[tab]...LABELn[newline]LABEL0 は現在位置でのラベル、LABEL1 は前位置のラベル…という順番です。例えば、「前々位置でのラベルが NN、前位置でのラベルがVBZ、現在位置でのラベルが IN、現在位置での単語が "like"」という素性であれば、次のようになります。
W0_like[tab]IN[tab]VBZ[tab]NN[newline]("W0_" は適当なプレフィックスです)
訓練データファイル・評価データファイルの形式はオリジナルの CRFSuite と共通です。CRFSuite マニュアルをご参照ください。
素性データ・訓練データ・評価データ共に、手動で作ることは現実的ではないため、スクリプトを使用して生成することになります。ソースコード・バイナリパッケージ共に、"example" ディレクトリの下にサンプルスクリプト "conv.py" を入れてあります。これは主に英語の品詞タグ付けタスクを想定したもので、それ以外のタスクには、それに対応したスクリプトを作成する必要があります。
Penn Treebank 3 をお持ちでしたら、次のような手順で私の修士論文の実験を再現できます。
example ディレクトリ下の mrg_to_pos.py の中の mrg ディレクトリへのパスを修正し、mrg ファイルを次のようなテキストファイルに変換します。
NNP Pierre NNP Vinken , , CD 61 NNS years JJ old , , ...
0-18 が train.txt になり、22-24 がtest.txt になります。ここで conv.py を実行することで、私の修士論文中での「最大 2次」と同じデータができます(終端処理などの変更により、正確に同じ素性数にはなりません)。素性データ・訓練データ・評価データはそれぞれ features.txt, train_data.txt, test_data.txt となります。features.txt は次のようになっています。
W-2-1_of_crop . W-2-1_of_crop NN W0+1_still-raging_bidding VBG W-2-10_did_a_story NN W-2-10_David_Boren_-LRB- ( W-3-2-1__``_Five VBDtrain_data.txt/test_data.txt は次のようになります。
NNP LABEL W0_Pierre W-1_ W+1_Vinken W-10__Pierre W0+1_Pierre_Vinken W-2-1__ W-2-10___Pierre W-3-2-1___ suf1_e pre1_P suf2_re pre2_Pi suf3_rre pre3_Pie suf4_erre pre4_Pier suf5_ierre pre5_Pierr suf6_Pierre pre6_Pierre CONTAIN_UPPER NNP LABEL W0_Vinken W-1_Pierre W+1_, W-10_Pierre_Vinken W0+1_Vinken_, W-2-1__Pierre W-2-10__Pierre_Vinken W-3-2-1___Pierre suf1_n pre1_V suf2_en pre2_Vi suf3_ken pre3_Vin suf4_nken pre4_Vink suf5_inken pre5_Vinke suf6_Vinken pre6_Vinken CONTAIN_UPPER , LABEL W0_, W-1_Vinken W+1_61 W-10_Vinken_, W0+1_,_61 W-2-1_Pierre_Vinken W-2-10_Pierre_Vinken_, W-3-2-1__Pierre_Vinken suf1_, pre1_,
訓練時は、次のようにします。
$ crfsuite learn -m wsj.model -t test_data.txt -f features.txt train_data.txt
2~30GB程度のメモリが必要になりますので注意してください(シーケンシャルアクセスため、本来 HDD に書き出しても問題ないのですが、準備時間の都合上メインメモリで処理しています)。wsj.model にモデルデータが出力されます。
タグ付けは、次のようにします。
$ crfsuite tag -m wsj.model test.txt
評価のためには、次のようにします。
$ crfsuite tag -m wsj.model -qt test.txt
CRFSuite for variable-order Markov model の多くのオプションは CRFSuite と共通です。CRFSuite マニュアル をご参照ください。
ここでは、CRFSuite との差分について記述します。