KNPで固有表現抽出モデルを生成し、テストする方法についてまとめます。
インストール方法
KNPのインストール
形態素解析データの生成
$ juman < {平文ファイル} > {出力ファイル}コマンドで、平文から形態素解析データを生成します。
固有表現情報の付加
形態素解析データに、以下のような形式で固有表現情報を付加します。
{元々の形態素解析結果} <NE:{タグ}:{情報}>
(ex.昨夜 さくや 昨夜 名詞 6 時相名詞 10 * 0 * 0 "代表表記:昨夜/さくや カテゴリ:時間" <NE:TIME:S>)
タグ
IREXによる定義 (文字コードがEUC-JPなので注意) に従った、次の8つになります。
- 固有名詞的表現
| 内容 | タグ |
|---|---|
| 組織名、政府組織名 | ORGANIZATION |
| 人名 | PERSON |
| 地名 | LOCATION |
| 固有物名 | ARTIFACT |
- 時間表現
| 内容 | タグ |
|---|---|
| 日付表現 | DATE |
| 時間表現 | TIME |
- 数値表現
| 内容 | タグ |
|---|---|
| 金額表現 | MONEY |
| 割合表現 | PERCENT |
情報
| 内容 | 情報 | 英称 |
|---|---|---|
| 単独で固有表現を形成している単語 | S |
Single |
| 固有表現を形成している最初の単語 | B |
Begin |
| 固有表現を形成している途中の単語 | I |
Inside |
| 固有表現を形成している最後の単語 | E |
End |
| ※英称については、あくまで語呂合わせ程度に捉えておいてください。 |
注意点
-
OPTIONALタグを付加しない
IREXによる定義にはOPTIONALというタグが定義されていますが、このタグは使用できないため、付加してはいけません。 -
EOSが連続しないようにする
元となる形態素解析データでは、EOS(行末)が連続していることがありますが、余分なEOSは除去しなければなりません。 -
改行やタブといった形態素を取り除く
元となる形態素解析データでは、改行やタブも以下のように形態素として出力されていますが、これは除去しなければなりません。
※下のデータを見てもわかりづらいかと思いますが、{改行} {改行} {改行} 未定義語 15 その他 1 * 0 * 0 NILという形になっています。
未定義語 15 その他 1 * 0 * 0 NIL
学習用データ生成
$ knp -ne-train < {固有表現情報付き形態素解析データ} 2> {出力ファイル}コマンドで学習用データを生成します。
※標準エラー出力をファイルに出力する (エラーが発生しても端末上に表示されない) ため、出力ファイルにエラーメッセージが出力されていないか確認するようにしてください。
学習
$ crf_learn -f 2 {KNPの解凍先ディレクトリ}/knp-4.16/crf/template {学習用データ} {出力ファイル}コマンドで固有表現抽出モデルの学習を行います。
※処理がかなり重くなるので、できるだけ他のソフトウェアを終了させてから行うようにしましょう。
テスト
-
/usr/local/etc/knprcのバックアップをとります。 -
/usr/local/etc/knprcのNEモデルファイルにモデルファイルのパスを指定します。 -
$ juman < {テストデータ} | knp -simple -dpnd-fastコマンドで生成したモデルのテストを行います。 -
/usr/local/etc/knprcを元に戻します。