http://www.chokkan.org/software/crfsuite/manual.html
目次
このセクションでは、CRFsuiteがトレーニングおよびタグ付けに使用するデータ形式について説明します。 データは一連の項目シーケンスで構成され、各項目シーケンスは連続する行で表され、空の行で終わります。 アイテムシーケンスは、その特性(ラベルおよび属性)がラインで記述された一連のアイテムで構成されます。 項目行はラベルで始まり、属性はTAB(\t)文字で区切られます。
これはトレーニングデータの例です(CoNLL 2000チャンク共有タスクから取得)。
http://www.chokkan.org/software/crfsuite/data_sample.png 図1. CRFsuiteのサンプルデータ
この例には、4つのアイテムシーケンスが含まれています(最後のものは部分的に示されています)。第1のシーケンスの第1の項目は、ラベル B-NP で注釈され、w[0]=An、w[1]=AP、pos[0]=DT、 pos[1]= NNP、 __ BOS__ です。この例のラベルと属性は、特定の命名規則(フィーチャデザイン)に従います。B-NP は現在のトークンが名詞句の始まりであることを示し、w[0]=Anは、現在のアイテムの表面形態が「An」であることを示し、pos[1]=NNP は次のトークンが固有名詞であることを示し、 __ BOS__ は現在のアイテムがシーケンスの最初のアイテムであることを示します。しかし、CRFsuiteはラベルや属性の命名規則や機能設計には関心がありませんが、単なる文字列として扱います。 CRFsuiteは、ラベルと属性の意味を知らなくても、属性とラベルの関連性(特徴の重み)を学習します(例えば、現在のアイテムが属性 pos[0]=DT を有する場合、意味のわからないラベル B-NP を有する可能性が高い)。つまり、ラベルや属性名をデータセットに書き込むだけで任意の機能を設計して使用することができます。
属性は、コロン文字(:)で区切られたスケーリング値を持つことができます。正式には、特徴の影響量は、対応する属性のスケーリング値にフィーチャウェイトを乗じて決定されます。大まかに言えば、属性のスケーリング値は、属性の出現頻度と同様の効果を持ちますが、小数点または桁違いにすることもできます。スケーリング値が大きいと、トレーニングでオーバーフロー(レンジエラー)が発生する可能性があることに注意してください。コロン文字はデータセットで特別な役割を持つため、CRFsuiteはエスケープシーケンスを使用します。 「\:」および「\\」は、それぞれ属性名の「:」および「\」を表します。属性値が省略された場合(コロン文字なし)、CRFsuiteはスケーリング値を 1 とみなします。たとえば、これらの3つの項目は、属性とスケーリング値の点で同じです。
B-NP w[1..4]=a:2 w[1..4]=man w[1..4]=eats
B-NP w[1..4]=a w[1..4]=a w[1..4]=man w[1..4]=eats
B-NP w[1..4]=a:2.0 w[1..4]=man:1.0 w[1..4]=eats:1.0
タグ付けのデータ形式は、学習用のデータ形式とまったく同じですが、タグ付けデータ内のラベルは空にすることができます(ただし、省略することはできません)。 タグ付きの場合、CRFsuiteは入力データ内のラベルを無視するか、または予測のパフォーマンスを測定するためにそれらを使用します。
これは、データ形式を表すBNF記法です。
<line> ::= <item> | <eos>
<item> ::= <label> ('\t' <attribute>)+ <br>
<eos> ::= <br>
<label> ::= <string>
<attribute> ::= <name> | <name> ':' <scaling>
<name> ::= (<letter> | "\:" | "\\")+
<scaling> ::= <numeric>
<br> ::= '\n'
CRFsuiteをインストールする最も簡単な方法は、バイナリ配布を使用することです。現在、Win32およびLinux(Intel 32ビットおよび64ビットアーキテクチャ)のバイナリが配布されています。
CRFsuite 0.5以降、ソースパッケージにはlibLBFGSの部分が含まれなくなりました。 CRFsuiteをビルドするには、まずlibLBFGSをダウンロードしてビルドする必要があります。
Windows環境では、libLBFGSのVisual Studioソリューションファイル(lbfgs.sln)を開いてビルドします。ソリューションファイルは、ReleaseまたはDebugディレクトリにスタティックリンクライブラリlbfgs.lib(リリースビルド)またはlbfgs_debug.lib(デバッグビルド)をビルドします。 CRFsuiteのソリューションファイル(crfsuite.sln)は、libLBFGSのヘッダファイルとライブラリファイルがwin32 / lbfgsディレクトリに存在することを前提としているため、このディレクトリを作成し、lbfgs.h、lbfgs.lib、および/またはlbfgs_debug.libをディレクトリにコピーします。次に、ソリューションファイル(crfsuite.sln)を開いてビルドします。
Linux環境では、libLBFGSのソースパッケージをダウンロードしてビルドします。ご使用のオペレーティングシステムにlibLBFGSをインストールしない場合は、configureスクリプトに " - prefix"オプションを指定してください。この例では、ホームディレクトリ($ HOME)の下のlocalディレクトリにlibLBFGSをインストールします。
$ ./configure --prefix=$HOME/local
$ make
$ make install
CRFsuiteを作成する準備が整いました。 libLFGSを別のディレクトリにインストールしている場合は、 "--with-liblbfgs"オプションの引数にディレクトリを指定してください。
$ ./configure --prefix=$HOME/local --with-liblbfgs=$HOME/local
$ make
$ make install
CRFsuiteユーティリティは、最初のコマンドライン引数がコマンド名であることを想定しています。
- 学ぶ
- トレーニングセットからCRFモデルをトレーニングする。
- タグ
- CRFモデルを用いてタグ配列をタグする。
- ダンプ
- CRFモデルをプレーンテキスト形式でダンプします。
コマンドライン構文を表示するには、-h(--help)オプションを使用します。
$ crfsuite -h
CRFSuite 0.12 Copyright (c) 2007-2011 Naoaki Okazaki
USAGE: crfsuite <COMMAND> [OPTIONS]
COMMAND Command name to specify the processing
OPTIONS Arguments for the command (optional; command-specific)
COMMAND:
learn Obtain a model from a training set of instances
tag Assign suitable labels to given instances by using a model
dump Output a model in a plain-text format
For the usage of each command, specify -h option in the command argument.
トレーニングセットからCRFモデルをトレーニングするには、次のコマンドを入力します。
$ crfsuite learn [OPTIONS] [DATA]
引数DATAが省略された場合、または ' - 'の場合、このユーティリティはSTDINからトレーニングデータを読み込みます。 learnコマンドの使用法を表示するには、-h(--help)オプションを指定します。
$ crfsuite learn -h
CRFSuite 0.12 Copyright (c) 2007-2011 Naoaki Okazaki
USAGE: crfsuite learn [OPTIONS] [DATA1] [DATA2] ...
Trains a model using training data set(s).
DATA file(s) corresponding to data set(s) for training; if multiple N files
are specified, this utility assigns a group number (1...N) to the
instances in each file; if a file name is '-', the utility reads a
data set from STDIN
OPTIONS:
-t, --type=TYPE specify a graphical model (DEFAULT='1d'):
(this option is reserved for the future use)
1d 1st-order Markov CRF with state and transition
features; transition features are not conditioned
on observations
-a, --algorithm=NAME specify a training algorithm (DEFAULT='lbfgs')
lbfgs L-BFGS with L1/L2 regularization
l2sgd SGD with L2-regularization
ap Averaged Perceptron
pa Passive Aggressive
arow Adaptive Regularization of Weights (AROW)
-p, --set=NAME=VALUE set the algorithm-specific parameter NAME to VALUE;
use '-H' or '--help-parameters' with the algorithm name
specified by '-a' or '--algorithm' and the graphical
model specified by '-t' or '--type' to see the list of
algorithm-specific parameters
-m, --model=FILE store the model to FILE (DEFAULT=''); if the value is
empty, this utility does not store the model
-g, --split=N split the instances into N groups; this option is
useful for holdout evaluation and cross validation
-e, --holdout=M use the M-th data for holdout evaluation and the rest
for training
-x, --cross-validate repeat holdout evaluations for #i in {1, ..., N} groups
(N-fold cross validation)
-l, --log-to-file write the training log to a file instead of to STDOUT;
The filename is determined automatically by the training
algorithm, parameters, and source files
-L, --logbase=BASE set the base name for a log file (used with -l option)
-h, --help show the usage of this command and exit
-H, --help-parameters show the help message of algorithm-specific parameters;
specify an algorithm with '-a' or '--algorithm' option,
and specify a graphical model with '-t' or '--type' option
トレーニングには以下のオプションがあります。
-t、--type=TYPEフィーチャ生成に使用するグラフィカルモデルを指定します。 デフォルト値は "1d"です。1d状態と遷移の特徴を持つ1次マルコフCRF(ダイアド機能)。 状態の特徴は属性とラベルの組み合わせを条件とし、遷移特徴はラベルのバイグラムに条件付けされます。
-a、--algorithm=NAMEトレーニングアルゴリズムを指定します。 デフォルト値は "lbfgs"です。lbfgsL-BFGS法による勾配降下l2sgdL2正規化項を伴う確率的勾配降下ap平均パーセプトロンPAパッシブアグレッシブ(PA)arow重みベクトル(AROW)の適応正規化
-p、--param=NAME=VALUEトレーニングのパラメータを設定します。 CRFsuiteは、パラメータ(NAME)をVALUEに設定します。利用可能なパラメータは、選択されたグラフィカルモデルおよびトレーニングアルゴリズムに依存する。使用可能なパラメータのヘルプメッセージを表示するには、 '-a'または '--algorithm'で指定されたアルゴリズム名と '-t'または '--algorithm'で指定されたグラフィカルモデルで '-H'または '--help- - タイプ'。-m、--model=MODEL訓練されたモデルをMODELファイルに格納します。デフォルト値は ""(空)です。 MODELが空の場合、CRFsuiteはモデルをファイルに保存しません。-g、--split=NインスタンスをN個のグループに分割し、{1、...、N}の番号を各グループに割り当てます。このオプションは主にN倍のクロスバリデーション(-xオプション付き)を実行するために使用されます。デフォルトでは、CRFsuiteは入力データをグループに分割しません。-e、--holdout=M保留評価にはグループ番号Mのインスタンスを使用します。 CRFsuiteは、グループ番号Mのインスタンスをトレーニングに使用しません。デフォルトでは、CRFsuiteは保留評価を実行しません。-x、--cross-validateN倍交差検証を実行します。 -gオプションを使用して分割数を指定します。デフォルトでは、CRFsuiteはクロスバリデーションを実行しません。-l、--log-to-fileトレーニングのログメッセージをファイルに書き出します。ファイル名は、コマンドライン引数(トレーニングアルゴリズム、グラフィカルモデル、パラメータ、ソースファイルなど)から自動的に決定されます。デフォルトでは、CRFsuiteはログメッセージをSTDOUTに書き込みます。-L、--logbase=BASEログファイルのベース名を指定します(-lオプションとともに使用します)。 デフォルトでは、ベース名は "log.crfsuite"です。-h、--helpこのコマンドの使用法を表示して終了します。-H、--help-parametersパラメータとその説明のリストを表示します。 -tおよび-aオプションを使用して、グラフィカルモデルとトレーニングアルゴリズムをそれぞれ指定します。-p、--param=NAME=VALUEトレーニングのパラメータを設定します。 CRFsuiteは、パラメータ(NAME)をVALUEに設定します。 パラメータとその説明のリストを表示するには、-H(--help-parameters)オプションを使用します。
トレーニングのためのCRFsuiteコマンドラインのいくつかの例を以下に示します。
train.txtのCRFモデルをデフォルトのパラメータでトレーニングし、モデルをCRF.modelに保存します。
$ crfsuite learn -m CRF.model train.txt
STDINのCRFモデルをデフォルトのパラメータでトレーニングします。
$ cat train.txt | crfsuite learn -
train.txt(グループ#1)からCRFモデルをトレーニングします。 訓練中に、ホールドアウトデータtest.txt(グループ#2)でモデルをテストします。
$ crfsuite learn -e2 train.txt test.txt
トレーニングデータtrain.txtで10倍のクロスバリデーションを実行します。 ログ出力はlog.crfsuite_lbfgsに格納されます(ログファイルの名前は、トレーニングパラメータによって異なる場合があります)。
$ crfsuite learn -g10 -x -l train.txt
状態と遷移の特徴を持つ1次マルコフCRF(ダイアド機能)。状態の特徴は属性とラベルの組み合わせを条件とし、遷移特徴はラベルのバイグラムに条件付けされます。
feature.minfreq=VALUEフィーチャの発生頻度のカットオフしきい値。 CRFsuiteは、訓練データ中の出現頻度がVALUEより大きくない特徴を無視する。デフォルト値は0(つまり、カットオフなし)です。feature.possible_states=BOOLCRFsuiteが訓練データ内に存在しない状態特徴(すなわち、負の状態の特徴)を生成するかどうかを指定する。 BOOLを1に設定すると、CRFsuiteは属性とラベルの間に考えられるすべての組み合わせを関連付ける状態機能を生成します。属性とラベルの数をそれぞれAとLとすると、この関数は(A * L)個の特徴を生成します。この機能を有効にすると、CRFモデルで項目が参照ラベルに予測されない状態を知ることができるため、ラベル付けの精度が向上する可能性があります。しかし、この機能は、フィーチャの数を増やし、トレーニングプロセスを大幅に遅くする可能性があります。この機能はデフォルトで無効になっています。feature.possible_transitions=BOOLCRFsuiteが訓練データ内にさえも存在しない遷移特徴(すなわち、負の遷移特徴)を生成するかどうかを指定する。 BOOLを1に設定すると、CRFsuiteはすべての可能なラベルペアを関連付ける遷移機能を生成します。訓練データのラベルの数がLであるとすると、この関数は(L * L)の遷移特徴を生成する。この機能はデフォルトで無効になっています。
CRFsuiteコマンドラインの例をいくつか紹介します。
2回未満の機能はトレーニングに使用されません。
$ crfsuite learn -m CRF.model -p feature.minfreq = 2 train.txt
負の状態と遷移のフィーチャ(別名、密なフィーチャセット)を生成します。
$ crfsuite learn -m CRF.model -p feature.possible_states=1 -p feature.possible_transitions=1 train.txt
制限された記憶Broyden-Fletcher-Goldfarb-Shanno(L-BFGS)法を用いてL1および/またはL2正規化項を用いて訓練データの尤度の対数を最大化する。 L1正則化項の非ゼロ係数が指定されると、アルゴリズムは、正則 - 限定的メモリ - 準ニュートン(OWL-QN)法に切り替わる。 実際には、このアルゴリズムはトレーニングプロセスの開始時にフィーチャウェイトを非常にゆっくりと改善しますが、最終的に最適なフィーチャウェイトにすばやく収束します。
c1=VALUEL1正則化の係数。ゼロ以外の値を指定すると、CRFsuiteはOrthant-Wise Limited-Memory Quasi-Newton(OWL-QN)メソッドに切り替わります。デフォルト値はゼロです(L1正規化なし)。c2=VALUEL2正則化の係数。デフォルト値は1です。max_iterations=NUML-BFGS最適化の最大反復回数。反復回数がこの値を超えると、L-BFGSルーチンは終了します。デフォルト値は、マシンの整数の最大値(INT_MAX)に設定されています。num_memories=NUML-BFGSが逆ヘッセ行列を近似するために使用する制限されたメモリの数。デフォルト値は6です。epsilon=VALUEコンバージェンスの条件を決定するイプシロンパラメータ。デフォルト値は1e-5です。stop=NUM停止基準をテストするための反復の継続時間。デフォルト値は10です。delta=VALUE停止基準のしきい値。 L-BFGS反復は、最後の$ {stop}反復に対する対数尤度の改善がこの閾値以下であるときに停止する。デフォルト値は1e-5です。linesearch=STRINGL-BFGSアルゴリズムで使用される線探索法。利用可能なメソッドは、 "MoreThuente"(MoreとThuenteによって提案されたMoreThuenteメソッド)、 "Backtracking"(通常のWolfe条件でのバックトラッキングメソッド)、 "StrongBacktracking"(強力なWolfe条件でのバックトラッキングメソッド)です。デフォルトの方法は "MoreThuente"です。max_linesearch=NUMライン検索アルゴリズムの試行回数の最大値。デフォルト値は20です。
L-BFGSトレーニングのコマンドラインのいくつかの例を以下に示します。
L2正則化(c1 = 0、c2 = 1.0)でモデルを訓練する。
$ crfsuite learn -m CRF.model -a lbfgs -p c2=1 train.txt
L1正則化(c1 = 1.0、c2 = 0)でモデルを訓練する。
$ crfsuite learn -m CRF.model -a lbfgs -p c1=1 -p c2=0 train.txt
L1とL2の正則化(c1 = 1.0、c2 = 1.0)でモデルを訓練する。
$ crfsuite learn -m CRF.model -a lbfgs -p c1=1 -p c2=1 train.txt
バッチサイズ1の確率勾配降下(SGD)を使用して、L2正則化項を用いて訓練データの尤度の対数を最大化する。このアルゴリズムは通常、最適な特徴重みに非常に迅速に近づくが、最後に遅い収束を示す。
c2=VALUEL2正則化の係数。デフォルト値は1です。max_iterations=NUMSGD最適化の最大反復回数(エポック)。最適化ルーチンは、繰り返し回数がこの値を超えると終了します。デフォルト値は1000です。period=NUM停止基準をテストするための反復の継続時間。デフォルト値は10です。delta=VALUE停止基準のしきい値。最後の$ {period}反復での対数尤度の改善がこの閾値以下であるとき、最適化プロセスは停止する。デフォルト値は1e-5です。calibration.eta=VALUE校正に使用される学習率(η)の初期値。デフォルト値は0.1です。calibration.rate=VALUE較正のための学習率の増減率。デフォルト値は2です。calibration.samples=NUM較正に使用されるインスタンスの数。較正ルーチンは、VALUEより大きくないインスタンスをランダムに選択する。デフォルト値は1000です。calibration.candidates=NUM学習率の候補者の数。較正ルーチンは、対数尤度を高めることができる学習率の候補NUMを見つけた後に終了する。デフォルト値は10です。calibration.max_trials=NUM校正の学習率の最大試行回数。較正ルーチンは、学習率の候補値NUMを試した後に終了する。デフォルト値は20です。
次に、SGDトレーニングのコマンドラインの例を示します。
L2正則化(c2=1.0)でモデルを訓練する。
$ crfsuite learn -m CRF.model -a l2sgd -p c2=1 train.txt
現在のモデルパラメータがアイテムシーケンスを正しく予測できない場合、このアルゴリズムはパーセプトロン更新をモデルに適用します。このアルゴリズムは、トレーニングプロセスのすべての更新でフィーチャウェイトの平均をとる。アルゴリズムはトレーニングのスピードの点で最も高速です。アルゴリズムは非常に簡単ですが、高い予測性能を示します。実際には、反復の最大回数を指定することによってトレーニングプロセスを停止する必要があります。反復の最大回数は、開発セットで調整する必要があります。
max_iterations=NUM反復の最大回数(エポック)。最適化ルーチンは、繰り返し回数がこの値を超えると終了します。デフォルト値は100です。epsilon=VALUEコンバージェンスの条件を決定するイプシロンパラメータ。モデルによって予測された不正確なラベルの比率がVALUEより大きくない場合、最適化ルーチンは終了する。デフォルト値は1e-5です。
ここでは、Averaged Perceptronのコマンドラインの例を示します。
10回の反復でモデルを訓練する。
$ crfsuite learn -m CRF.model -a ap -p max_iterations = 10 train.txt
トレーニングデータ中のアイテムシーケンス(x、y)が与えられた場合、アルゴリズムは損失を計算する。ここで、s(x、y) (y ')はビタビ・ラベル・シーケンスのスコアであり、s(x、y)はトレーニング・データのラベル・シーケンスのスコアであり、d(y'、y)はビタビ・ラベル・シーケンス)および参照ラベル配列(y)を含む。アイテムに負でない損失がない場合、アルゴリズムは損失に基づいてモデルを更新します。
type=NUMフィーチャウェイトを更新するための戦略:スラック変数なしのPA(0)、PAタイプI(1)、またはPAタイプII(2)。デフォルト値は1です。c=VALUEアグレッシブ性パラメータ(PA-IおよびPA-IIにのみ使用されます)。このパラメータは目的関数へのスラック項の影響を制御します。デフォルト値は1です。error_sensitive=BOOLこのパラメータが真(非ゼロ)である場合、最適化ルーチンは目的関数に、モデルによって予測された不正確なラベルの数の平方根を含む。デフォルト値は1(真)です。averaging=BOOLこのパラメータが真(非ゼロ)である場合、最適化ルーチンは、トレーニングプロセスにおけるすべての更新における特徴重みの平均を計算する(Averaged Perceptronと同様)。デフォルト値は1(真)です。max_iterations=NUM反復の最大回数(エポック)。最適化ルーチンは、繰り返し回数がこの値を超えると終了します。デフォルト値は100です。epsilon=VALUEコンバージェンスの条件を決定するイプシロンパラメータ。平均損失がVALUEより大きくない場合、最適化ルーチンは終了する。デフォルト値は1e-5です。
トレーニングデータ内のアイテムシーケンス(x、y)が与えられた場合、アルゴリズムはロスを計算する。s(x、y ')はビタビラベルのスコアである s(x、y)は、トレーニングデータのラベルシーケンスのスコアである。
variance=VALUEすべての特徴量の初期分散。 このアルゴリズムは、平均0と分散VALUEを持つ多変量ガウス分布として特徴量のベクトルを初期化します。 デフォルト値は1です。gamma=VALUE損失関数と特徴量の変化との間のトレードオフ。 デフォルト値は1です。max_iterations=NUM反復の最大回数(エポック)。 最適化ルーチンは、繰り返し回数がこの値を超えると終了します。 デフォルト値は100です。epsilon=VALUEコンバージェンスの条件を決定するイプシロンパラメータ。 平均損失がVALUEより大きくない場合、最適化ルーチンは終了する。 デフォルト値は1e-5です。
CRFモデルを使用してデータにタグを付けるには、次のコマンドを入力します。
$ crfsuite tag [OPTIONS] [DATA]
引数DATAが省略された場合、または ' - 'の場合、CRFsuiteはSTDINからデータを読み取ります。タグコマンドの使用法を表示するには、-h(--help)オプションを指定します。
$ crfsuite tag -h
CRFSuite 0.12 Copyright (c) 2007-2011 Naoaki Okazaki
USAGE: crfsuite tag [OPTIONS] [DATA]
Assign suitable labels to the instances in the data set given by a file (DATA).
If the argument DATA is omitted or '-', this utility reads a data from STDIN.
Evaluate the performance of the model on labeled instances (with -t option).
OPTIONS:
-m, --model=MODEL Read a model from a file (MODEL)
-t, --test Report the performance of the model on the data
-r, --reference Output the reference labels in the input data
-p, --probability Output the probability of the label sequences
-i, --marginal Output the marginal probabilities of items
-q, --quiet Suppress tagging results (useful for test mode)
-h, --help Show the usage of this command and exit
タグ付けには次のオプションがあります。
-m、--model=MODELCRFsuiteがCRFモデルを読み込むファイル名。-t、--test入力データにラベルが付けられていると仮定して、CRFモデルのパフォーマンス(精度、精度、リコール、f1尺度)を評価します。この機能はデフォルトで無効になっています。-r、--reference入力ラベルがラベル付けされていると仮定して、予測ラベルと並列に参照ラベルを出力します。この機能はデフォルトで無効になっています。-p、--probabilityモデルによって予測されたラベル配列の確率を出力する。この機能を有効にすると、ラベルシーケンスは "@probability \ tx.xxxx"という行で始まります。 "x.xxxx"はシーケンスの確率を表し、 "\ t"はTAB文字を表します。この機能はデフォルトで無効になっています。-i、--marginalラベルの限界確率を出力する。この機能を有効にすると、予測される各ラベルの後ろに「:x.xxxx」が続きます。「x.xxxx」はラベルの確率を表します。この機能はデフォルトで無効になっています。-q、--quietタグ付きラベルの出力を抑制します。この関数は、-tオプションを使用してCRFモデルを評価する場合に便利です。-h、--helpこのコマンドの使用法を表示して終了します。
タグ付けのためのCRFsuiteコマンドラインのいくつかの例を以下に示します。
CRFモデルCRF.modelを使用してデータtest.txtにタグを付ける
$ crfsuite tag -m CRF.model test.txt
ラベリングされたデータtest.txt上のCRFモデルCRF.modelを評価する。
$ crfsuite tag -m CRF.model -qt test.txt
CRFモデルをプレーンテキスト形式でダンプするには、次のコマンドを入力します。
$ crfsuite dump <MODEL>