CaPSL (CRF and Pointwise-based Sequential Labeling tool) は,以下の特徴を持った系列ラベル推定器です.
時間表現認識モデル
空間表現認識モデル
時空間同時認識モデル
毎日新聞コーパスへのアノテーション
時間表現認識モデル (under construction)
空間表現認識モデル
同時認識モデル (under construction)
AFPへのアノテーション
(under construction)
ルールベース手法
(under construction)
緯度と経度を推定
辞書引きと曖昧性解消
オプション
実行モード
--train 学習モード
--inference 推論モード
モデルのディレクトリの指定
--model_dir モデルのディレクトリ (学習時: 保存ディレクトリ / 推論時: 使用するモデル)
学習時のハイパーパラメータ
--num_epoch 学習エポック数 (デフォルト: 20)
--lr 学習率 (デフォルト: 2e-6)
--encoder テキストのエンコードに使うモデル (bert/lstm, デフォルト: bert)
--use_dict 辞書を使用する
--batch_size 学習時のバッチサイズ (デフォルト: 32)
--use_scheduler 学習率のwarmupを行う (学習の学習ループの1/10時点をピークとした線形のスケジューリング)
--bert_dir 用いるBERTモデル (デフォルト: bert-base-uncased)
--lambda_pointwise 学習に用いる損失のうちPointwise損失の割合 (デフォルト: 0.5)
--do_pre 最初にエンコーダのパラメータを固定して学習を行う
--do_crfonly 最後にCRF損失のみを用いた学習を行う
--target_tag n個目のタグを学習に用いる (指定しない場合,全てのタグを学習に用いる)
--quiet_train 学習時に学習データの損失を出力しない
--quiet_valid 学習時に開発データの評価結果を出力しない (開発データを与えている場合は,early stoppingのため開発データでの評価自体は行う)
--quiet_test 学習完了時にテストデータの評価結果を出力しない
推論時のハイパーパラメータ
--eval_batch_size 推論時および学習中の評価時のバッチサイズ (デフォルト: 64)
学習データの指定
--file_format タグ付きデータのフォーマット (spl/conll, デフォルト: spl)
--trainfile 学習データ
--dictfile 学習に用いる辞書データ
--validfile 開発データ
--testfile テストデータ
推論対象データの指定
--target 推論対象の単語分割済みデータ
初期シードの指定
--seed 初期シード (デフォルト: 42)
学習サンプル (学習データサイズが小さいのでnum_epochに大きな値を指定しています.)
python main.py --train --trainfile sample/train.iob2 --num_epoch 200 --model_dir /tmp/ner
推論サンプル
python main.py --inference --target sample/target.raw --model_dir /tmp/ner
# import function 'load_crf_model' from crf.py import sys sys.path.append() from crf import load_crf_model # load trained model model = load_crf_model( ) # list of target sentences (split into words with space) texts = ['10 日 午後 、 京都 大学 に 怪獣 が 出現 し た 。'] labels = model.predict(texts) for text, label in zip(texts, labels): print(' '.join(['{}/{}'.format(t, l) for t, l in zip(text.split(' '), label)]))
1行1文で記述します.
各単語は半角スペースで区切られ,単語に続いてタグを"/"(半角スラッシュ) 区切りで記述します.
10/T-B/O 日/T-I/O 午後/T-I/O 、/O/O 京都/O/L-B 大学/O/L-I に/O/O 怪獣/O/O が/O/O 出現/O/O し/O/O た/O/O 。/O/O
部分アノテーションを行っている空文字の場合,そのタグは付与されていないものとして扱います.またn番目以降のタグ全てが付与されていない場合,"/"を省略できます.10/T-B 日/T-I 午後/T-I 、 京都//L-B 大学//L-I に 怪獣 が 出現 し た 。
1行1単語で記述します.
単語に続いてタグを" "(半角スペース) 区切りで記述します.
10 T-B O
日 T-I O
午後 T-I O
、 O O
京都 O L-B
大学 O L-I
に O O
怪獣 O O
が O O
出現 O O
し O O
た O O
。 O O
部分アノテーションを行っている空文字の場合,そのタグは付与されていないものとして扱います.(以下は可視化のため半角スペースの場所に"␣"(空白記号)を表示しています.)10␣T-B
日␣T-I
午後␣T-I
、
京都␣␣L-B
大学␣␣L-I
に
怪獣
が
出現
し
た
。
1行1エントリで記述します.
タグと表現をタブ区切りで記述し,タグはタグ種類ごとに"/"で区切ります.(以下は可視化のためタブ文字の場所に"\t"を表示しています.)
表現は半角スペース区切りの単語列です.
L/\t京都 府
/T\t先月
各タグはIOB2形式で記述します.
BタグやIタグはprefixでもsuffixでも可.