Tetsuro Sasada 2016/08/12 <sasada.tetsuro.7e@kyoto-u.ac.jp>
http://plata.ar.media.kyoto-u.ac.jp/tool/PWNER/

PW+DPによるNEタグ推定ツールセット

・一般分野タグ学習のコーパスにはIREX CRL固有表現コーパス
  (+ 毎日新聞95年版コーパス)を利用しています。

・レシピ用語タグ学習のコーパスには
  http://plata.ar.media.kyoto-u.ac.jp/data/recipe/NLP14.pdf
  で構築したレシピ用語コーパスを利用しています。

# 更新 2016/08/12
  - IOB2タグ推定モデル学習用スクリプト(train.sh)を追加
    - IOB2タグ推定モデルの素性頻度ファイルを追加 (IREX CRL, レシピ用語)
  - NEタグ定義用のファイルを分離
  - 単語・単語列辞書 -> IOB2コーパス変換プログラム
    (./bin/ws2iob2.pl)を追加

# 必要環境
  - Kytea ver 0.4.2以上 (最新版を推奨)
    http://www.phontron.com/kytea/index-ja.html
  - Perl 5.8.7以上 (最新版を推奨)

########################## 利用方法 (IREX CRL) ##########################
1. 単語分割されたコーパス(Test.word, NER対象となるコーパス)を
   用意し、
   ./sample/Test.word
   を置き換える
2. % ./ner.sh
   - kyteaのパスが通っていない場合は
     kytea, train-kyteaの場所をner.shで直接指定
   - IOB2形式の正解コーパス(Test.iob2)を
     ./sample/Test.iob2
     と置き換えておくと推定精度が出力される

# レシピ用語認識を行う場合は、ner.shを編集して
# IOB2タグ推定モデルを
# MODEL="./recipe416.knm"に変更し、
# NESearch.pl, NEAccu.plで指定するNE一覧のファイルを
# Recipe.listに変更してください。

#########################################################################


######### 利用方法 (IREX CRLにコーパス、NE辞書を追加して再学習)##########

## IOB2コーパスを追加する場合
  - train.shを編集する
    "TRAIN_KYTEA_OPT"
    に-full add.iob2を追加
  % ./train.sh

## 単語列辞書を追加する場合
  例: LOCATIONタグとPERSONタグの2つの辞書を追加して学習する場合
  % perl ./bin/ws2iob2 LOCATION < LOC.word > LOC.iob2
  % perl ./bin/ws2iob2 PERSON < PER.word > PER.iob2

  - train.shを編集
     - TRAIN_KYTEA_OPTに
       "-full LOC.iob2 -full PER.iob2"
       を追加
  % ./train.sh

# 本ツールセットのtrain.shはデフォルトでIREX CRLの素性頻度ファイルから
# IOB2タグ推定モデルを学習します。
# また、-featで./feat/recipe416.featを指定することで
# レシピ用語の推定モデルを学習することも可能です。

#########################################################################

################# 利用方法 (異なるNEタグセットを使う) ###################
0. 必要なもの
   - NEタグセット (NE.list)
   - 学習コーパス (Train.iob2)
   - 正解, テストコーパス  (Test.iob2, Test.word)
   - NE辞書 (optional, 5.1参照)

1. NEタグセットを定義、作成する (NE.list)
2. IOB2形式の学習コーパスを作成する (Train.iob2)
3. IOB2形式の正解コーパス(Test.iob2)、
   単語分割済みのテストコーパス(Test.word)を作成する
4. 1-3で作成したファイルをディレクトリ
   (以下、new-sampleとする)に入れる
5. 本NERツールセット用のタグ付与モデルを学習する
   - train.shを編集 (MODEL="new.knm", RSRC="new-sample")
   % ./train.sh

-------------- optional
5.1 単語・単語列辞書を追加して学習する場合

  5.1.1 単語・単語列辞書をIOB2形式に変換 (1タグにつき1ファイル)
   - NEタグ"NE"の場合
   % perl ./bin/ws2iob2 NE < Dict.word > Dict.iob2
  5.1.2 
   - train.shを編集 
     - TRAIN_KYTEA_OPTに
       "-full Dict.iob2"
       を追加
     - 複数のNE辞書がある場合、全てのファイルを"-full"で指定
       ex. "-full Train.iob2 -full dict1.iob2 -full dict2.iob2 ..."

   % ./train.sh
--------------- 

6. 作成したモデルを使ってNERを行う
   - ner.shを編集 (MODEL="new.knm", RSRC="new-sample")
   % ./ner.sh

#########################################################################


# 以下、IREX CRL NER用readme
# モデル・テストファイル
crl.knm: IOB2タグ確率推定用KyTeaモデル (UTF-8用, train-kytea ver 0.4.7で作成)
Test.word: テスト用入力データ (単語分割済み)
Test.iob2: テスト用正解データ (単語分割・IOB2タグ付与済み)

# bin/: 各種処理用のスクリプト

NESearch.pl:
kyteaの-out confで出力されるファイルにIOB2制約を適用して最適経路(1-best)を出力

WordAccu.pl:
IOB2タグ精度(O含)を計算

NEAccu.pl:
NEタグ精度(O, OPTIONAL除)を計算
# IREXコンテストではOPTIONALタグを評価から除く

- 参考文献

http://plata.ar.media.kyoto-u.ac.jp/sasada/research/public/sasada-PACLING15.pdf

-------------------------------------------
- おまけ: 単語分割・言語資源管理用スクリプト

wordtags2partial.pl:
IOB2タグ付与コーパスからtrain-kytea用の部分的単語分割コーパスを作成

mktree.pl:
IOB2タグ付与コーパスからPNAT用のtreeファイルを作成

tree2wordtags.pl:
treeファイルのタグフィールドを指定してスペース区切りのタグ付きコーパスを作成
