Skip to content

Instantly share code, notes, and snippets.

@nazoking
Last active November 19, 2019 09:01
Show Gist options
  • Save nazoking/e9a7fd48023baf06ccd8aba6baf8fae6 to your computer and use it in GitHub Desktop.
Save nazoking/e9a7fd48023baf06ccd8aba6baf8fae6 to your computer and use it in GitHub Desktop.

http://www.chokkan.org/software/crfsuite/manual.html

CRFsuite - ドキュメンテヌション

目次

トレヌニング/タグ付けデヌタの圢匏

このセクションでは、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"です。
    • lbfgs L-BFGS法による募配降䞋
    • l2sgd L2正芏化項を䌎う確率的募配降䞋
    • 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-validate N倍亀差怜蚌を実行したす。 -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

グラフィカルモデル

1d䞀次マルコフCRFダむアド機胜付き

状態ず遷移の特城を持぀1次マルコフCRFダむアド機胜。状態の特城は属性ずラベルの組み合わせを条件ずし、遷移特城はラベルのバむグラムに条件付けされたす。

  • feature.minfreq=VALUE フィヌチャの発生頻床のカットオフしきい倀。 CRFsuiteは、蚓緎デヌタ䞭の出珟頻床がVALUEより倧きくない特城を無芖する。デフォルト倀は0぀たり、カットオフなしです。
  • feature.possible_states=BOOL CRFsuiteが蚓緎デヌタ内に存圚しない状態特城すなわち、負の状態の特城を生成するかどうかを指定する。 BOOLを1に蚭定するず、CRFsuiteは属性ずラベルの間に考えられるすべおの組み合わせを関連付ける状態機胜を生成したす。属性ずラベルの数をそれぞれAずLずするず、この関数はA * L個の特城を生成したす。この機胜を有効にするず、CRFモデルで項目が参照ラベルに予枬されない状態を知るこずができるため、ラベル付けの粟床が向䞊する可胜性がありたす。しかし、この機胜は、フィヌチャの数を増やし、トレヌニングプロセスを倧幅に遅くする可胜性がありたす。この機胜はデフォルトで無効になっおいたす。
  • feature.possible_transitions=BOOL CRFsuiteが蚓緎デヌタ内にさえも存圚しない遷移特城すなわち、負の遷移特城を生成するかどうかを指定する。 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

トレヌニングアルゎリズム

lbfgs限定されたメモリBroyden-Fletcher-Goldfarb-ShannoL-BFGSメ゜ッド

制限された蚘憶Broyden-Fletcher-Goldfarb-ShannoL-BFGS法を甚いおL1および/たたはL2正芏化項を甚いお蚓緎デヌタの尀床の察数を最倧化する。 L1正則化項の非れロ係数が指定されるず、アルゎリズムは、正則 - 限定的メモリ - 準ニュヌトンOWL-QN法に切り替わる。 実際には、このアルゎリズムはトレヌニングプロセスの開始時にフィヌチャりェむトを非垞にゆっくりず改善したすが、最終的に最適なフィヌチャりェむトにすばやく収束したす。

  • c1=VALUE L1正則化の係数。れロ以倖の倀を指定するず、CRFsuiteはOrthant-Wise Limited-Memory Quasi-NewtonOWL-QNメ゜ッドに切り替わりたす。デフォルト倀はれロですL1正芏化なし。
  • c2=VALUE L2正則化の係数。デフォルト倀は1です。
  • max_iterations=NUM L-BFGS最適化の最倧反埩回数。反埩回数がこの倀を超えるず、L-BFGSルヌチンは終了したす。デフォルト倀は、マシンの敎数の最倧倀INT_MAXに蚭定されおいたす。
  • num_memories=NUM L-BFGSが逆ヘッセ行列を近䌌するために䜿甚する制限されたメモリの数。デフォルト倀は6です。
  • epsilon=VALUE コンバヌゞェンスの条件を決定するむプシロンパラメヌタ。デフォルト倀は1e-5です。
  • stop=NUM 停止基準をテストするための反埩の継続時間。デフォルト倀は10です。
  • delta=VALUE 停止基準のしきい倀。 L-BFGS反埩は、最埌の$ {stop}反埩に察する察数尀床の改善がこの閟倀以䞋であるずきに停止する。デフォルト倀は1e-5です。
  • linesearch=STRING L-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

l2sgdL2正則化を䌎う確率的募配SGD

バッチサむズ1の確率募配降䞋SGDを䜿甚しお、L2正則化項を甚いお蚓緎デヌタの尀床の察数を最倧化する。このアルゎリズムは通垞、最適な特城重みに非垞に迅速に近づくが、最埌に遅い収束を瀺す。

  • c2=VALUE L2正則化の係数。デフォルト倀は1です。
  • max_iterations=NUM SGD最適化の最倧反埩回数゚ポック。最適化ルヌチンは、繰り返し回数がこの倀を超えるず終了したす。デフォルト倀は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

ap平均パヌセプトロン

珟圚のモデルパラメヌタがアむテムシヌケンスを正しく予枬できない堎合、このアルゎリズムはパヌセプトロン曎新をモデルに適甚したす。このアルゎリズムは、トレヌニングプロセスのすべおの曎新でフィヌチャりェむトの平均をずる。アルゎリズムはトレヌニングのスピヌドの点で最も高速です。アルゎリズムは非垞に簡単ですが、高い予枬性胜を瀺したす。実際には、反埩の最倧回数を指定するこずによっおトレヌニングプロセスを停止する必芁がありたす。反埩の最倧回数は、開発セットで調敎する必芁がありたす。

  • 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
paパッシブアグレッシブ

トレヌニングデヌタ䞭のアむテムシヌケンス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です。

arowりェむトベクトルAROWの適応正芏化

トレヌニングデヌタ内のアむテムシヌケンス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=MODEL CRFsuiteが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>

http://www.chokkan.org/software/crfsuite/tutorial.html

CRFsuite - Chunkingタスクに関するチュヌトリアル

タスクの説明

テキストチャンクは、テキストを構文的に盞関する単語の郚分に分割したす。 䟋えば、He reckons the current account deficit will narrow to only # 1.8 billion in September. ずの文章は、次のように分けるこずができたす。

[NP He ] [VP reckons ] [NP the current account deficit ] [VP will narrow ] [PP to ] [NP only # 1.8 billion ] [PP in ] [NP September ] .

この䟋では、NPは名詞句、VPは動詞句、PPは前眮詞句を衚したす。 このタスクは、テキスト内の䞀連のトヌクンに䞀連のラベルが割り圓おられたシヌケンシャルラベリングタスクずしお圢匏化されたす。 チャンクトヌクンのスパンをラベルで衚珟するために、IOB2衚蚘を䜿甚するこずがよくありたす。 IOB2蚘法を䜿甚するず、チャンクNPは、チャンクB-NPの開始およびチャンクI-NPの内郚によっお衚される。 チャンクに属さないトヌクンはOラベルで衚されたす。

B-NP He
B-VP reckons
B-NP the
I-NP current
I-NP account
I-NP deficit
B-VP will
I-VP narrow
B-PP to
B-NP only
I-NP #
I-NP 1.8
I-NP billion
B-PP in
B-NP September
O    .

このチュヌトリアルの目的は、CRFsuiteを䜿甚しお、特定の文トヌクンのシヌケンスのチャンクラベルを予枬するモデルを構築するこずです。

デヌタのトレヌニングずテスト

このチュヌトリアルでは、CoNLL 2000共有タスクによっお配垃されたトレヌニングおよびテストデヌタを䜿甚したす。 このチュヌトリアルで必芁なスクリプトは、CRFsuiteディストリビュヌションのexampleディレクトリにありたす。 たず、珟圚のディレクトリをexampleディレクトリに移動し、Webサむトからトレヌニングずテストのデヌタをダりンロヌドしたす。

$ cd example
$ wget http://www.cnts.ua.ac.be/conll2000/chunking/train.txt.gz
$ wget http://www.cnts.ua.ac.be/conll2000/chunking/test.txt.gz
$ less train.txt.gz
... (snip) ...

London JJ B-NP
shares NNS I-NP
closed VBD B-VP
moderately RB B-ADVP
lower JJR I-ADVP
in IN B-PP
thin JJ B-NP
trading NN I-NP
. . O

At IN B-PP
Tokyo NNP B-NP
, , O
the DT B-NP
Nikkei NNP I-NP
index NN I-NP
of IN B-PP
225 CD B-NP
selected VBN I-NP
issues NNS I-NP
was VBD B-VP
up IN B-ADVP
112.16 CD B-NP
points NNS I-NP
to TO B-PP
35486.38 CD B-NP
. . O

... (snip) ...

デヌタは、䞀連の単語䟋えば、「ロンドン」、「株匏」、品詞タグ䟋えば、「JJ」、「NNS」を含む䞀連の文章 スペヌス文字で区切られたチャンクラベル䟋えば、「B-NP」、「I-NP」を含む。 このチュヌトリアルでは、䞀連の単語ず品詞コヌドが䞎えられおいる䞀連のチャンクラベルを割り圓おるCRFモデルを䜜成したす。 デヌタセットの詳现に぀いおは、CoNLL 2000共有タスクWebサむトを参照しおください。

特城属性生成

次のステップでは、トレヌニングずテストのデヌタを事前凊理しお、デヌタ内の単語項目の特性を衚す属性を抜出したす。 CRFsuiteは内郚的にデヌタセットの属性からフィヌチャを生成したす。 䞀般に、これは、機械蚭蚈のアプロヌチにずっお最も重芁なプロセスです。これは、フィヌチャデザむンがラベリングの粟床に倧きく圱響するためです。 このチュヌトリアルでは、䜍眮の単語シヌケンスの先頭からのオフセットの単語から19皮類の属性を抜出したす。

  • w[t-2], w[t-1], w[t], w[t+1], w[t+2],
  • w[t-1]|w[t], w[t]|w[t+1],
  • pos[t-2], pos[t-1], pos[t], pos[t+1], pos[t+2],
  • pos[t-2]|pos[t-1], pos[t-1]|pos[t], pos[t]|pos[t+1], pos[t+1]|pos[t+2],
  • pos[t-2]|pos[t-1]|pos[t], pos[t-1]|pos[t]|pos[t+1], pos[t]|pos[t+1]|pos[t+2]

このリストでは、w [t]ずpos [t]は、それぞれ䜍眮tの単語ず品詞をシヌケンスで衚したす。 これらの特城は、w [t-1]およびpos [t + 1]などの呚囲の単語からの情報を䜿甚するこずによっお、䜍眮tでの単語の特性を衚す。 たずえば、次の䟋のトヌクン 'the'は、

        He PRP B-NP
        reckons VBZ B-VP
  t --> the DT B-NP
        current JJ I-NP
        account NN I-NP

これらの属性を取埗する簡単のため、䜍眮tは省略。

  • w[-2]=He, w[-1]=reckons, w[0]=the, w[1]=current, w[2]=account
  • w[-1]|w[0]=reckons|the, w[0]|w[1]=the|current
  • pos[-2]=PRP, pos[-1]=VBZ, pos[0]=DT, pos[1]=JJ, pos[2]=NN
  • pos[-2]|pos[-1]=PRP|VBZ, pos[-1]|pos[0]=VBZ|DT, pos[0]|pos[1]=DT|JJ, pos[1]|pos[2]=JJ|NN
  • pos[-2]|pos[-1]|pos[0]=PRP|VBZ|DT, pos[-1]|pos[0]|pos[1]=VBZ|DT|JJ, pos[0]|pos[1]|pos[2]=DT|JJ|NN

この䟋では、属性「w [0] = the」は、珟圚のトヌクンが「the」であるむベントを提瀺し、属性「pos [0] | pos [1] | pos [2] = DT | JJ | NN珟圚、次、および2単語先の品詞がそれぞれDT、JJ、NNであるむベントを提瀺する。 CRFsuiteは、これらの属性䟋えば、「pos [0] | pos [1] | pos [2] = DT | JJ | NN」ずラベル䟋えば、「B-NP」ずの間の関連を孊習し、指定されたテキスト属性は "name = value"ずいう芏玄に埓う必芁はありたせん䟋 "w [0] = the"。 CRFsuiteは、文字列にコロン文字属性名ずその重みを区切るために䜿甚が含たれおいない限り、任意の文字列を属性名ずしお受け入れたす。 "name = value"ずいう芏玄は単に属性名を解釈するためのものです。

CRFsuiteには、項目行がラベルで始たり、その属性がTAB '\ t'文字で区切られたデヌタセットが必芁です詳现は文曞を参照。蚓緎/詊隓デヌタからCRFsuiteデヌタぞの倉換を実装するこずは困難ではない。倉換の実装ずしお、CRFsuiteディストリビュヌションには、CoNLL 2000デヌタから属性を生成するPythonスクリプトchunking.pyが含たれおいたす。以䞋の手順では、train.txt.gzずtest.txt.gzをCRFsuiteデヌタ圢匏ず互換性のあるtrain.crfsuite.txtずtest.crfsuite.txtに倉換したす。

$ zcat train.txt.gz | ./chunking.py > train.crfsuite.txt
$ zcat test.txt.gz | ./chunking.py > test.crfsuite.txt
$ less train.crfsuite.txt
... (snip) ...

B-NP    w[0]=He w[1]=reckons    w[2]=the        w[0]|w[1]=He|reckons    pos[0]=P
RP      pos[1]=VBZ      pos[2]=DT       pos[0]|pos[1]=PRP|VBZ   pos[1]|pos[2]=VB
Z|DT    pos[0]|pos[1]|pos[2]=PRP|VBZ|DT __BOS__
B-VP    w[-1]=He        w[0]=reckons    w[1]=the        w[2]=current    w[-1]|w[
0]=He|reckons   w[0]|w[1]=reckons|the   pos[-1]=PRP     pos[0]=VBZ      pos[1]=D
T       pos[2]=JJ       pos[-1]|pos[0]=PRP|VBZ  pos[0]|pos[1]=VBZ|DT    pos[1]|p
os[2]=DT|JJ     pos[-1]|pos[0]|pos[1]=PRP|VBZ|DT        pos[0]|pos[1]|pos[2]=VBZ
|DT|JJ
B-NP    w[-2]=He        w[-1]=reckons   w[0]=the        w[1]=current    w[2]=acc
ount    w[-1]|w[0]=reckons|the  w[0]|w[1]=the|current   pos[-2]=PRP     pos[-1]=
VBZ     pos[0]=DT       pos[1]=JJ       pos[2]=NN       pos[-2]|pos[-1]=PRP|VBZ 
pos[-1]|pos[0]=VBZ|DT   pos[0]|pos[1]=DT|JJ     pos[1]|pos[2]=JJ|NN     pos[-2]|
pos[-1]|pos[0]=PRP|VBZ|DT       pos[-1]|pos[0]|pos[1]=VBZ|DT|JJ pos[0]|pos[1]|po
s[2]=DT|JJ|NN
I-NP    w[-2]=reckons   w[-1]=the       w[0]=current    w[1]=account    w[2]=def
icit    w[-1]|w[0]=the|current  w[0]|w[1]=current|account       pos[-2]=VBZ
     pos[-1]=DT      pos[0]=JJ       pos[1]=NN       pos[2]=NN       pos[-2]|pos
[-1]=VBZ|DT  pos[-1]|pos[0]=DT|JJ    pos[0]|pos[1]=JJ|NN     pos[1]|pos[2]=NN|NN
     pos[-2]|pos[-1]|pos[0]=VBZ|DT|JJ        pos[-1]|pos[0]|pos[1]=DT|JJ|NN  pos
[0]|pos[1]|pos[2]=JJ|NN|NN
I-NP    w[-2]=the       w[-1]=current   w[0]=account    w[1]=deficit    w[2]=wil
l       w[-1]|w[0]=current|account      w[0]|w[1]=account|deficit       pos[-2]=
DT      pos[-1]=JJ      pos[0]=NN       pos[1]=NN       pos[2]=MD       pos[-2]|
pos[-1]=DT|JJ   pos[-1]|pos[0]=JJ|NN    pos[0]|pos[1]=NN|NN     pos[1]|pos[2]=NN
|MD     pos[-2]|pos[-1]|pos[0]=DT|JJ|NN pos[-1]|pos[0]|pos[1]=JJ|NN|NN  pos[0]|p
os[1]|pos[2]=NN|NN|MD

... (snip) ...

トレヌニング

これでCRFsuiteをトレヌニングに䜿甚する準備が敎いたした。 train.crfsuite.txtからCRFモデルを蚓緎するには、次のコマンドを入力したす。 CRFsuiteは、蚓緎デヌタを読み取り、デヌタに基づいお必芁な状態属性ラベルおよび遷移bigramラベルを生成し、条件付き確率分垃の察数尀床を最倧にし、モデルをCoNLL2000.modelに栌玍する。

$ crfsuite learn -m CoNLL2000.model train.crfsuite.txt
CRFSuite 0.12  Copyright (c) 2007-2011 Naoaki Okazaki

Start time of the training: 2011-06-25T14:52:13Z

Reading the data set(s)
[1] train.crfsuite.txt
0....1....2....3....4....5....6....7....8....9....10
Number of instances: 8937
Seconds required: 5.890

Statistics the data set(s)
Number of data sets (groups): 1
Number of instances: 8936
Number of items: 211727
Number of attributes: 335674
Number of labels: 22

Feature generation
type: CRF1d
feature.minfreq: 0.000000
feature.possible_states: 0
feature.possible_transitions: 0
0....1....2....3....4....5....6....7....8....9....10
Number of features: 452755
Seconds required: 2.140

L-BFGS optimization
c1: 0.000000
c2: 1.000000
num_memories: 6
max_iterations: 2147483647
epsilon: 0.000010
stop: 10
delta: 0.000010
linesearch: MoreThuente
linesearch.max_iterations: 20

***** Iteration #1 *****
Log-likelihood: -275528.648286
Feature norm: 5.000000
Error norm: 44363.015822
Active features: 452755
Line search trials: 2
Line search step: 0.000050
Seconds required for this iteration: 4.860

***** Iteration #2 *****
Log-likelihood: -164450.778877
Feature norm: 9.067189
Error norm: 26619.939310
Active features: 452755
Line search trials: 1
Line search step: 1.000000
Seconds required for this iteration: 1.630

... (snip) ...

***** Iteration #165 *****
Log-likelihood: -13139.375165
Feature norm: 81.074163
Error norm: 2.638386
Active features: 452755
Line search trials: 1
Line search step: 1.000000
Seconds required for this iteration: 1.660

L-BFGS terminated with the stopping criteria
Total seconds required for training: 293.610

Storing the model
Number of active features: 452755 (452755)
Number of active attributes: 335674 (335674)
Number of active labels: 22 (22)
Writing labels
Writing attributes
Writing feature references for transitions
Writing feature references for attributes
Seconds required: 0.730

End time of the training: 2011-06-25T14:57:15Z

CRFモデルをトレヌニングし、テストデヌタで評䟡されたパフォヌマンス粟床、粟床、リコヌル、f1スコアを確認するこずもできたす。 蚓緎プロセスが進むに぀れお、あなたのモデルが改善されおいるこずを知るこずぱキサむティングなこずです。 次のコマンドラむンは、オプション-e2を䜿甚しおデヌタセット2test.crfsuite.txtのホヌルドアりト評䟡を実行したす。

$ crfsuite learn -e2 train.crfsuite.txt test.crfsuite.txt
CRFSuite 0.12  Copyright (c) 2007-2011 Naoaki Okazaki

Start time of the training: 2011-06-25T16:07:40Z

Reading the data set(s)
[1] train.crfsuite.txt
0....1....2....3....4....5....6....7....8....9....10
Number of instances: 8937
Seconds required: 5.870
[2] test.crfsuite.txt
0....1....2....3....4....5....6....7....8....9....10
Number of instances: 2013
Seconds required: 1.370

Statistics the data set(s)
Number of data sets (groups): 2
Number of instances: 10948
Number of items: 259104
Number of attributes: 387579
Number of labels: 23

Holdout group: 2

Feature generation
type: CRF1d
feature.minfreq: 0.000000
feature.possible_states: 0
feature.possible_transitions: 0
0....1....2....3....4....5....6....7....8....9....10
Number of features: 452755
Seconds required: 2.150

L-BFGS optimization
c1: 0.000000
c2: 1.000000
num_memories: 6
max_iterations: 2147483647
epsilon: 0.000010
stop: 10
delta: 0.000010
linesearch: MoreThuente
linesearch.max_iterations: 20

***** Iteration #1 *****
Log-likelihood: -279935.059188
Feature norm: 5.000000
Error norm: 45136.783202
Active features: 452755
Line search trials: 2
Line search step: 0.000050
Seconds required for this iteration: 5.230
Performance by label (#match, #model, #ref) (precision, recall, F1):
    B-NP: (8312, 10265, 12422) (0.8097, 0.6691, 0.7328)
    B-PP: (3986, 6030, 4811) (0.6610, 0.8285, 0.7354)
    I-NP: (14116, 27744, 14376) (0.5088, 0.9819, 0.6703)
    B-VP: (0, 0, 4658) (0.0000, 0.0000, 0.0000)
    I-VP: (0, 0, 2646) (0.0000, 0.0000, 0.0000)
    B-SBAR: (0, 0, 535) (0.0000, 0.0000, 0.0000)
    O: (3298, 3338, 6180) (0.9880, 0.5337, 0.6930)
    B-ADJP: (0, 0, 438) (0.0000, 0.0000, 0.0000)
    B-ADVP: (0, 0, 866) (0.0000, 0.0000, 0.0000)
    I-ADVP: (0, 0, 89) (0.0000, 0.0000, 0.0000)
    I-ADJP: (0, 0, 167) (0.0000, 0.0000, 0.0000)
    I-SBAR: (0, 0, 4) (0.0000, 0.0000, 0.0000)
    I-PP: (0, 0, 48) (0.0000, 0.0000, 0.0000)
    B-PRT: (0, 0, 106) (0.0000, 0.0000, 0.0000)
    B-LST: (0, 0, 5) (0.0000, 0.0000, 0.0000)
    B-INTJ: (0, 0, 2) (0.0000, 0.0000, 0.0000)
    I-INTJ: (0, 0, 0) (******, ******, ******)
    B-CONJP: (0, 0, 9) (0.0000, 0.0000, 0.0000)
    I-CONJP: (0, 0, 13) (0.0000, 0.0000, 0.0000)
    I-PRT: (0, 0, 0) (******, ******, ******)
    B-UCP: (0, 0, 0) (******, ******, ******)
    I-UCP: (0, 0, 0) (******, ******, ******)
    I-LST: (0, 0, 2) (0.0000, 0.0000, 0.0000)
Macro-average precision, recall, F1: (0.129025, 0.131010, 0.123104)
Item accuracy: 29712 / 47377 (0.6271)
Instance accuracy: 23 / 2012 (0.0114)

... (snip) ...

***** Iteration #162 *****
Log-likelihood: -13143.933308
Feature norm: 81.103204
Error norm: 2.207139
Active features: 452755
Line search trials: 1
Line search step: 1.000000
Seconds required for this iteration: 1.980
Performance by label (#match, #model, #ref) (precision, recall, F1):
    B-NP: (12013, 12374, 12422) (0.9708, 0.9671, 0.9689)
    B-PP: (4713, 4878, 4811) (0.9662, 0.9796, 0.9729)
    I-NP: (13998, 14497, 14376) (0.9656, 0.9737, 0.9696)
    B-VP: (4470, 4668, 4658) (0.9576, 0.9596, 0.9586)
    I-VP: (2551, 2700, 2646) (0.9448, 0.9641, 0.9544)
    B-SBAR: (449, 499, 535) (0.8998, 0.8393, 0.8685)
    O: (5945, 6122, 6180) (0.9711, 0.9620, 0.9665)
    B-ADJP: (322, 403, 438) (0.7990, 0.7352, 0.7658)
    B-ADVP: (711, 836, 866) (0.8505, 0.8210, 0.8355)
    I-ADVP: (54, 82, 89) (0.6585, 0.6067, 0.6316)
    I-ADJP: (110, 137, 167) (0.8029, 0.6587, 0.7237)
    I-SBAR: (2, 15, 4) (0.1333, 0.5000, 0.2105)
    I-PP: (34, 42, 48) (0.8095, 0.7083, 0.7556)
    B-PRT: (80, 102, 106) (0.7843, 0.7547, 0.7692)
    B-LST: (0, 0, 5) (0.0000, 0.0000, 0.0000)
    B-INTJ: (1, 1, 2) (1.0000, 0.5000, 0.6667)
    I-INTJ: (0, 0, 0) (******, ******, ******)
    B-CONJP: (5, 8, 9) (0.6250, 0.5556, 0.5882)
    I-CONJP: (10, 13, 13) (0.7692, 0.7692, 0.7692)
    I-PRT: (0, 0, 0) (******, ******, ******)
    B-UCP: (0, 0, 0) (******, ******, ******)
    I-UCP: (0, 0, 0) (******, ******, ******)
    I-LST: (0, 0, 2) (0.0000, 0.0000, 0.0000)
Macro-average precision, recall, F1: (0.604705, 0.576296, 0.581536)
Item accuracy: 45468 / 47377 (0.9597)
Instance accuracy: 1176 / 2012 (0.5845)

L-BFGS terminated with the stopping criteria
Total seconds required for training: 339.800

End time of the training: 2011-06-25T16:13:29Z

このログメッセヌゞは、トレヌニングデヌタから埗られたCRFモデルが95.97のアむテム粟床を達成したこずを報告しおいたす。

タグ付け

テストデヌタにCRFモデルずチャンクラベルを適甚するこずができたす。 CoNLL 2000共有タスクによっお配垃されたテストデヌタにはチャンクラベルが付いおいたす評䟡目的のため、CRFsuiteは既存のラベルを無芖し、モデルによっお予枬されたラベルシヌケンス1行に぀き1ラベル、空癜で区切られたラベルを出力したす。

$ cat test.crfsuite.txt
B-NP    w[0]=Rockwell   w[1]=International      w[2]=Corp.      w[0]|w[1]=Rockwe
ll|International        pos[0]=NNP      pos[1]=NNP      pos[2]=NNP      pos[0]|p
os[1]=NNP|NNP   pos[1]|pos[2]=NNP|NNP   pos[0]|pos[1]|pos[2]=NNP|NNP|NNP
        __BOS__
I-NP    w[-1]=Rockwell  w[0]=International      w[1]=Corp.      w[2]='s w[-1]|w[
0]=Rockwell|International       w[0]|w[1]=International|Corp.   pos[-1]=NNP
     pos[0]=NNP      pos[1]=NNP      pos[2]=POS      pos[-1]|pos[0]=NNP|NNP  pos
[0]|pos[1]=NNP|NNP   pos[1]|pos[2]=NNP|POS   pos[-1]|pos[0]|pos[1]=NNP|NNP|NNP  
     pos[0]|pos[1]|pos[2]=NNP|NNP|POS
... (snip) ...

$ crfsuite tag -m CoNLL2000.model test.crfsuite.txt
B-NP
I-NP
I-NP
B-NP
I-NP
I-NP
B-VP
B-NP
B-VP
B-NP
I-NP
I-NP
B-VP
B-NP
I-NP
B-PP
B-NP
I-NP
B-VP
I-VP
B-NP
I-NP
B-PP
B-NP
B-NP
I-NP
I-NP
O

... (snip) ...

CRFsuiteは、test.crfsuite.txt内の参照ラベルずTAB文字で区切られた予枬ラベルの䞡方を出力できたす。 この䟋では、各行の巊のラベルは入力デヌタtest.crfsuite.txtに曞き蟌たれた参照ラベルを衚し、右のラベルは予枬されたラベルを衚したす。 この機胜は、タグ付け結果の評䟡に圹立ちたす。

$ crfsuite tag -r -m CoNLL2000.model test.crfsuite.txt
B-NP    B-NP
I-NP    I-NP
I-NP    I-NP
B-NP    B-NP
I-NP    I-NP
I-NP    I-NP
B-VP    B-VP
B-NP    B-NP
B-VP    B-VP
B-NP    B-NP
I-NP    I-NP
I-NP    I-NP
B-VP    B-VP
B-NP    B-NP
I-NP    I-NP
B-PP    B-PP
B-NP    B-NP
I-NP    I-NP
B-VP    B-VP
I-VP    I-VP
B-NP    B-NP
I-NP    I-NP
B-PP    B-PP
B-NP    B-NP
B-NP    B-NP
I-NP    I-NP
I-NP    I-NP
O       O

... (snip) ...

CRFsuiteは、 "-qt"オプション付きのラベル付きテストデヌタを䜿甚しおCRFモデルを評䟡するこずもできたす。

$ crfsuite tag -qt -m CoNLL2000.model test.crfsuite.txt
Performance by label (#match, #model, #ref) (precision, recall, F1):
    B-NP: (12000, 12358, 12407) (0.9710, 0.9672, 0.9691)
    B-PP: (4707, 4872, 4805) (0.9661, 0.9796, 0.9728)
    I-NP: (13984, 14484, 14359) (0.9655, 0.9739, 0.9697)
    B-VP: (4466, 4662, 4653) (0.9580, 0.9598, 0.9589)
    I-VP: (2549, 2698, 2643) (0.9448, 0.9644, 0.9545)
    B-SBAR: (448, 498, 534) (0.8996, 0.8390, 0.8682)
    O: (5939, 6113, 6174) (0.9715, 0.9619, 0.9667)
    B-ADJP: (322, 403, 438) (0.7990, 0.7352, 0.7658)
    B-ADVP: (711, 835, 866) (0.8515, 0.8210, 0.8360)
    I-ADVP: (54, 82, 89) (0.6585, 0.6067, 0.6316)
    I-ADJP: (110, 137, 167) (0.8029, 0.6587, 0.7237)
    I-SBAR: (2, 15, 4) (0.1333, 0.5000, 0.2105)
    I-PP: (34, 42, 48) (0.8095, 0.7083, 0.7556)
    B-PRT: (80, 102, 106) (0.7843, 0.7547, 0.7692)
    B-LST: (0, 0, 4) (0.0000, 0.0000, 0.0000)
    B-INTJ: (1, 1, 2) (1.0000, 0.5000, 0.6667)
    I-INTJ: (0, 0, 0) (******, ******, ******)
    B-CONJP: (5, 7, 9) (0.7143, 0.5556, 0.6250)
    I-CONJP: (10, 12, 13) (0.8333, 0.7692, 0.8000)
    I-PRT: (0, 0, 0) (******, ******, ******)
    B-UCP: (0, 0, 0) (******, ******, ******)
    I-UCP: (0, 0, 0) (******, ******, ******)
Macro-average precision, recall, F1: (0.639239, 0.602512, 0.611086)
Item accuracy: 45422 / 47321 (0.9599)
Instance accuracy: 1176 / 2011 (0.5848)
Elapsed time: 0.940000 [sec] (2140.4 [instance/sec])

モデルファむルのダンプ

CRFモデルの粟床を改善するずきは、トレヌナヌが指定した特城量を確認するず䟿利です。 効率性の理由から、CRFsuiteはモデルをバむナリ圢匏で保存するため、モデルファむルを読み蟌むこずはできたせん。 したがっお、dumpコマンドを䜿甚しお、プレヌンテキスト圢匏のモデルを読み取る必芁がありたす。

$ crfsuite dump CoNLL2000.model
FILEHEADER = {
  magic: lCRF
  size: 28242501
  type: FOMC
  version: 100
  num_features: 0
  num_labels: 23
  num_attrs: 338547
  off_features: 0x30
  off_labels: 0x8B4EE4
  off_attrs: 0x8B5A0C
  off_labelrefs: 0x169C145
  off_attrrefs: 0x169C515
}

LABELS = {
      0: B-NP
      1: B-PP
      2: I-NP
      3: B-VP
      4: I-VP
      5: B-SBAR
      6: O
      7: B-ADJP
      8: B-ADVP
      9: I-ADVP
     10: I-ADJP
     11: I-SBAR
     12: I-PP
     13: B-PRT
     14: B-LST
     15: B-INTJ
     16: I-INTJ
     17: B-CONJP
     18: I-CONJP
     19: I-PRT
     20: B-UCP
     21: I-UCP
     22: I-LST
}

ATTRIBUTES = {
      0: U00=
      1: U01=
      2: U02=Confidence
      3: U03=in
      4: U04=the
      5: U05=/Confidence
      6: U06=Confidence/in
      7: U10=
... (snip) ...
}

TRANSITIONS = {
  (1) B-NP --> B-NP: 2.327985
  (1) B-NP --> B-PP: 4.391125
  (1) B-NP --> I-NP: 30.372649
  (1) B-NP --> B-VP: 7.725525
  (1) B-NP --> B-SBAR: 1.821388
  (1) B-NP --> O: 3.805715
  (1) B-NP --> B-ADJP: 4.801651
  (1) B-NP --> B-ADVP: 3.842473
... (snip) ...
}

TRANSITIONS_FROM_BOS = {
  (2) BOS --> B-NP: 17.875605
  (2) BOS --> B-PP: -0.318745
  (2) BOS --> I-NP: -4.387101
  (2) BOS --> B-VP: -0.383031
  (2) BOS --> I-VP: -1.163315
  (2) BOS --> B-SBAR: 1.368176
  (2) BOS --> O: 2.783132
... (snip) ...
}

TRANSITIONS_TO_EOS = {
  (3) B-NP --> EOS: 16.156051
  (3) B-PP --> EOS: -1.045312
  (3) I-NP --> EOS: -2.762051
  (3) B-VP --> EOS: -0.767247
  (3) I-VP --> EOS: -1.113502
  (3) B-SBAR --> EOS: -2.407145
  (3) O --> EOS: 4.131429
... (snip) ...
}

STATE_FEATURES = {
  (0) U00= --> B-NP: -2.622045
  (0) U00= --> B-PP: -1.562976
  (0) U00= --> I-NP: -2.555526
  (0) U00= --> B-VP: -1.329829
  (0) U00= --> I-VP: -1.152970
  (0) U00= --> B-SBAR: -2.590170
  (0) U00= --> O: -1.584688
  (0) U00= --> B-ADJP: -1.526879
... (snip) ...
}

属性゚クストラクタの蚘述に関する泚意

このチュヌトリアルでは、CRFsuiteディストリビュヌションにバンドルされおいる chunking.py を䜿甚しお、デヌタセットから属性を抜出したした。 実際には、目暙タスクに適した属性抜出噚を実装する必芁がありたす。 任意のプログラミング蚀語で任意の方法で属性抜出プログラムを曞くこずができたす。 ただし、デヌタに固定長のフィヌルドCoNLL 2000デヌタセットなどがあり、Pythonに粟通しおいる堎合は、chunking.pyのコヌドを倉曎するこずをお勧めしたす。 このセクションでは、chunking.pyスクリプトを倉曎する人のためのスクリプトの構造に぀いお説明したす。

以䞋はchunking.pyの実装です

#!/usr/bin/env python

"""
An attribute extractor for chunking.
Copyright 2010,2011 Naoaki Okazaki.
"""

# Separator of field values.
separator = ' '

# Field names of the input data.
fields = 'w pos y'

# Attribute templates.
templates = (
    (('w', -2), ),
    (('w', -1), ),
    (('w',  0), ),
    (('w',  1), ),
    (('w',  2), ),
    (('w', -1), ('w',  0)),
    (('w',  0), ('w',  1)),
    (('pos', -2), ),
    (('pos', -1), ),
    (('pos',  0), ),
    (('pos',  1), ),
    (('pos',  2), ),
    (('pos', -2), ('pos', -1)),
    (('pos', -1), ('pos',  0)),
    (('pos',  0), ('pos',  1)),
    (('pos',  1), ('pos',  2)),
    (('pos', -2), ('pos', -1), ('pos',  0)),
    (('pos', -1), ('pos',  0), ('pos',  1)),
    (('pos',  0), ('pos',  1), ('pos',  2)),
    )


import crfutils

def feature_extractor(X):
    # Apply feature templates to obtain features (in fact, attributes)
    crfutils.apply_templates(X, templates)
    if X:
        # Append BOS and EOS features manually
        X[0]['F'].append('__BOS__')     # BOS feature
        X[-1]['F'].append('__EOS__')    # EOS feature

if __name__ == '__main__':
    crfutils.main(feature_extractor, fields=fields, sep=separator)

共通のスタッフテンプレヌト、デヌタI / Oなどからの属性生成が他のモゞュヌル crfutils.py ず template.py で実装されおいるため、実装は非垞に簡単です。 chunking.pyスクリプトは3぀の重芁な倉数を定矩しおいたす

  • セパレヌタ
    • 入力デヌタの区切り文字。これはコマンドラむン匕数 "-s"オプションで䞊曞きするこずができたす。この䟋では、フィヌルドの区切り文字ずしおスペヌス文字を想定しおいたす。
  • フィヌルド
    • 空癜文字で区切られた入力デヌタのフィヌルド名巊から右の順。これはコマンドラむン匕数 "-f"オプションで䞊曞きするこずができたす。この䟋では、入力デヌタの各行が "w"、 "pos"、および "y"ずいう名前のフィヌルドで構成されおいるず仮定しおいたす。
  • テンプレヌト
    • Pythonタプル/リストオブゞェクトずしお曞かれた属性フィヌチャテンプレヌト

入力デヌタに察しおこれらの倉数を倉曎するだけで十分です。テンプレヌト内の各芁玠は、name、offsetペアのタプル/リストであり、名前はフィヌルド名を衚し、offsetは珟圚の䜍眮ぞのオフセットを衚したす。たずえば、タプル、

  (('w', -2), ),

珟圚の䜍眮の前に2぀のトヌクンで 'w'フィヌルドの倀を抜出したす。 1぀の芁玠 'w'、-2を持぀タプルを定矩するには、 'w'、-2の埌のコンマが必芁であるこずに泚意しおください。 タプル、

  (('w', -1), ('w',  0)),

前のトヌクンでの「w」フィヌルドの倀ず、珟圚の䜍眮すなわち、前のトヌクンで始たるバむグラムにおける「w」フィヌルドの倀ずを連結する属性を定矩する。

関数feature_extractorは、入力デヌタから読み蟌たれた䞀連の項目この䟋ではXを受け取り、必芁な属性を生成したす。匕数Xはアむテムのリストを衚したす。各項目は、フィヌルド名からその倀ぞのマッピング蟞曞オブゞェクトによっお衚されたす。 CoNLLチャンク凊理では、X [0] [ 'w']はシヌケンス内の最初のアむテムの単語を衚し、X [0] [ 'pos']はシヌケンス内の最埌のアむテムの品詞タグを衚したす。

X内の各項目のマッピングオブゞェクトには、アむテムのために生成された属性を栌玍する倀リストオブゞェクトを持぀特別なキヌ 'F'がありたす。属性リストの各芁玠は、文字列たたはname、valueのタプル重み付きの属性のいずれかでなければなりたせん。 chunking.pyスクリプトでは、crfutils.apply_templates属性リストを満たす可胜性がありたすを䜿っおフィヌチャテンプレヌトが適甚されたす。この䟋では、シヌケンスの最初ず最埌に特別な属性 "BOS"ず "EOS"も生成したす。

他のタスク甚のフィヌチャ抜出

chunking.pyに加えお、サンプルディレクトリには次のものが含たれおいたす。

  • 品詞タグ付けのための pos.py
    • コヌドの構造は chunking.py の構造に䌌おいたす。フィヌルド蚘述子ず属性テンプレヌトのみが異なりたす。
  • 名前付き゚ンティティ認識のための ner.py
    • このスクリプトは、入力デヌタから様々な特性䟋えば、トヌクンの文字圢状、接頭蟞および接尟蟞を抜出するため、より耇雑である。
  • CRF ++ず互換性のあるテンプレヌトを䜿甚するための template.py
    • 属性ずバむグラムのラベル付きの機胜はサポヌトされおいたせん。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment