京都大学学術情報メディアセンター 大規模テキストアーカイブ研究分野

系列ラベル推定器 CaPSLEnglish

CaPSL (CRF and Pointwise-based Sequential Labeling tool) は,以下の特徴を持った系列ラベル推定器です.

特徴

ダウンロード

ソースコード

download

学習済みモデル

応用

使い方

必要環境

以下は我々の環境におけるバージョンです.

実行スクリプトとして

オプション

実行モード
	  --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

Pythonモジュールとして

# 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)]))

データフォーマット

spl (sentence per line) フォーマット

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 に 怪獣 が 出現 し た 。

conll フォーマット

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形式

各タグはIOB2形式で記述します.
BタグやIタグはprefixでもsuffixでも可.