2017-02-09 10 views
0

私はnltkライブラリで新しく、分類器に自分のコーパスを使っていくつかのラベルを教えようとしています。NLTKネガティブケースのMaxentClassifier列

How O 
do B-MYTag 
you I-MYTag 
know O 
, O 
where B-MYTag 
to O 
park O 
? O 

(PSこれでのみ構成されたサンプル...)

私はこれを行う

self.classifier = nltk.MaxentClassifier.train(train_set, algorithm='megam', trace=0) 
によって:このため

私はこのようなIOBタグを使用してファイルを持っています

と動作します。

私の質問は、負のケースで私のclassifierを訓練する方法です。 だから私はIOBタグと同様のファイルを持っていて、私はこのファイルが間違って設定されていると指定します。 (負の重み)

どうすればよいですか?


EDIT:負の場合の

例は次のようになります。その後

How B-MYTag 
do O 
you O 
know O 
, O 
where B-MYTag 
to O 
park O 
? O 

を、私はどのように、おそらくこの理由はmytagという... ではないことを覚えていることを期待します、より速く学ぶ分類子。 文を入力するだけでプログラムが処理し、最後に結果に満足しているかどうかを尋ねます。私の場合、このテキストはtrain_setに追加されますが、そうでなければnegative_train_setに追加されます。このようにして、クラシファイアに適切なものを教えることは、より簡単で迅速になります。

+1

ネガティブケースの例はありますか?私はこれがシーケンスタギングで(概念的に)うまくいくとは思わない。つまり、間違ったアノテーションから何を学ぶと思いますか?正(B/I)クラスと負(O)クラスは、指定された注釈ですでに表現されています。 – lenz

+0

あなたの編集内容は、アクティブ学習のワークフローのようです。もちろん、手動で行うこともできます。分類器に何かを予測させ、ラベルを手動で修正し、トレーニングセットに追加して再トレーニングします。あなたは訂正について具体的に言わなければなりません:「この文章のラベルは間違っています」としか言わない場合、最初の3つのタグが悪いことをどのように分類するべきですか?四番目(「知っている」の「O」)は正しいですか? – lenz

+0

大規模なトレーニングを開始し、手動で修正したいくつかのサンプルを手作業で追加した場合、その影響はごくわずかです。 – lenz

答えて

1

私は、分類器を試して、結果にいくつかのエラーがあり、追加のトレーニング入力として間違った出力をフィードバックしたいと思います。答えが間違っているか正しいか(神経網、Brill規則)に基づいて最適化する学習アルゴリズムがありますが、MaxEnt分類器はそれらの1つではありません。このように機能するクラシファイアは、すべての作業を内部的に行います。トレーニングデータにタグを付け、結果をゴールドスタンダードと比較し、重みまたはルールを調整し、繰り返します。

要約:誤った出力をトレーニングデータセットとして使用することはできません。訓練データは仮定によって正しいので、誤った入力が確率ゼロを有するので、この考えは機械学習モデルに適合しない。優れた機能、より多くのデータ、または異なるエンジンを使用してクラシファイアを改善することに重点を置いてください。

+0

ありがとうございます。いくつかの考えの後、「間違った」データからエントロピーを計算することができないので、MaxEntは間違ったデータセットで実際には動作しないことがわかります。あなたの答えをありがとう。今、私はすべての新しい "文"をIOBタグでファイルに保存し、手で修正してそれを訓練コーパスに挿入します。あなたは神経網について何か書きます。これはnltkで使えますか?私はそれらについて知識がありません。あなたはそれらをチェックする良いリンクがありますか? –

+0

nltkのdefalt POSタグャーはPerceptronTagger()です。 [here](https://explosion.ai/blog/part-of-speech-pos-tagger-in-python)を参照してください。 – alexis