Skip to content
LennMars edited this page Feb 18, 2013 · 9 revisions

はじめに

MedNLP_Baselineは医療文書から重要な情報を抽出するためのスクリプト集です。

主要部分にはCRF(Conditional Random Field)を利用しており、模擬カルテで学習済みのモデルファイルを提供しています。

このスクリプト集はNTCIR-10 医療言語処理(MedNLP)パイロットタスクに伴い作成されました。


インストール

インストールは必要なく、次のものが用意されていればすぐに使うことが出来ます。

必要なもの

  • MedNLP_Baseline (git clone or download zip)
  • Perl >= 5.10.1
  • CRF++
  • 学習済みモデルファイル(Here. 訓練データを独自に用意しない場合)

サンプル

sample ディレクトリにlearn(学習)とtest(テスト)の2種類のサンプルが用意してあります。

それぞれ小さいコーパスと短いスクリプトからなり、各種スクリプトの使用方法を把握することが出来ます。

中間結果を読みシステムの改善に役立てるためにはIOBフォーマットの知識が必要です。CoNLL 2000などをご覧ください。

なお、あるコーパスでの性能は精度67.02、再現率61.8、F値64.3でした。

test

(learn_test.shを実行することで以下の作業を全て行います。)

生のテキストにタグ付けを行います。

対象となるsample.txtはlearnディレクトリ中のsample.xmlから全てのタグを除いたものです。つまり今解こうとしている問題は正解が分かっているので、出力結果がどこを間違えたかも表示します。

実行にはCRF++のモデルファイルが必要です。独自に用意しない場合は次のようにモデルファイルをダウンロードしてmodelディレクトリに置きます:

$ mkdir models
$ cd models
$ wget http://mednlp.jp/NTCIR10/mednlp.model

実行は次のようにします。

$ cd sample/test
$ mkdir test_sample
$ ../../crf_data_gen/get_feature.pl -d ../../corpus/dictionaries/SYN ./sample.txt > test_sample/feature.txt
$ crf_test -m ../../models/mednlp.model test_sample/feature.txt > test_sample/crfout.txt
$ ../../evaluate/crfout_to_xml.pl < test_sample/crfout.txt > test_sample/crfout.xml
$ ../../evaluate/xml_to_charwise_iob.pl -mod -h ../../sample/learn/sample.xml test_sample/crfout.xml > test_sample/cmp.txt

各ステップで出力されるのは次のようなファイルです。

  • feature.txt: CRF++形式のテストデータ。正解タグがない以外はdata.txtと同形式
  • crfout.txt: CRF++の出力結果。
  • crfout.xml: crfout.txtをXML形式に直したもの。
  • cmp.txt: 正解との比較。形式は 文字、正解ファイル中での行数、正解タグ、推定タグ、誤判定フラグ のタブ区切り

learn

(learn_sample.shを実行することで以下の作業を全て行います。)

testの項で使用したmednlp.modelの作成方法を再現したサンプルです。

XML形式でタグ付けされたコーパスからCRF++形式の訓練データを生成し、CRF++を使用して学習を行います。

このサンプルでは訓練データが小さいので貧弱なモデルしか出来ませんが、それ以外の条件(素性、辞書等)はmednlp.modelと同じです。

辞書はリポジトリに含まれるcorpus/dictionaries/SYNを使用していますがこれを差し替えることはもちろん複数指定することも可能です。当然これはテスト時の辞書設定と揃える必要があります。具体的にはparse.plとget_feature.plに渡す-dオプションは順番を含め同じでなければなりません。

$ cd sample/learn
$ ../../crf_data_gen/parse.pl -attr -d ../../corpus/dictionaries/SYN sample.xml > data.txt
$ crf_learn ../../templates/default data.txt model_sample

次の2つのファイルが生成されます。

  • data.txt: 訓練データ。形式は トークン、品詞、品詞細分類、読み、辞書マッチ、正解タグ(BIO形式) のタブ区切り
  • model_sample: data.txtを使って訓練されたモデルファイル

各スクリプトの説明

スクリプトは大きく次の3種類に分類されています。それぞれのディレクトリに置かれたREADMEを参照してください。

  • crf_data_gen: 訓練データの生成に関わるもの
  • evaluate: テストの実行と出力結果の評価に関わるもの
  • normalizer: 抽出された情報の正規化を行う(undocumented)

お問い合わせ

MedNLPタスクオーガナイザー http://mednlp.jp/medistj-ja/