2016-09-08 5 views
0

ClassifierBasedPOSTaggerclassifier_builder=MaxentClassifier.trainを使用してPOSタギングを実行しようとしています。ここではコードの一部は次のとおりです。NLTKのPOSタギングのための最大分類子の反復回数を変更するにはどうすればよいですか?

from nltk.tag.sequential import ClassifierBasedPOSTagger 
from nltk.classify import MaxentClassifier 
from nltk.corpus import brown 

brown_tagged_sents = brown.tagged_sents(categories='news') 
size = int(len(brown_tagged_sents) * 0.9) 

train_sents = brown_tagged_sents[:size] 
test_sents = brown_tagged_sents[size:] 

me_tagger = ClassifierBasedPOSTagger(train=train_sents, classifier_builder=MaxentClassifier.train) 
print(me_tagger.evaluate(test_sents)) 

しかし、コードを実行する時間後、私はそれはまだClassifierBasedPOSTagger(train=train_sents, classifier_builder=MaxentClassifier.train)を初期化していることを参照してください。出力では、私は、コード実行の以下の部分を見ることができます:

==> Training (100 iterations) 

    Iteration Log Likelihood Accuracy 
    --------------------------------------- 
     1   -5.35659  0.007 
     2   -0.85922  0.953 
     3   -0.56125  0.986 

私は繰り返しは分類器は、任意の入力に品詞タグ付けをする準備ができている前に、100であることを行っていると思います。それは私が一日かかるだろうと思う。どうしてそんなに時間がかかるの?そして、反復を減らすことは、このコードを少し実用的にする(時間を短縮し、十分に役立つことを意味する)。そうなら、それらの反復を減らす方法は?

EDIT

1.5時間後、私は次のような出力が得られます。

==> Training (100 iterations) 

    Iteration Log Likelihood Accuracy 
    --------------------------------------- 
     1   -5.35659  0.007 
     2   -0.85922  0.953 
     3   -0.56125  0.986 
E:\Analytics Practice\Social Media Analytics\analyticsPlatform\lib\site-packages\nltk\classify\maxent.py:1310: RuntimeWarning: overflow encountered in power 
    exp_nf_delta = 2 ** nf_delta 
E:\Analytics Practice\Social Media Analytics\analyticsPlatform\lib\site-packages\nltk\classify\maxent.py:1312: RuntimeWarning: invalid value encountered in multiply 
    sum1 = numpy.sum(exp_nf_delta * A, axis=0) 
E:\Analytics Practice\Social Media Analytics\analyticsPlatform\lib\site-packages\nltk\classify\maxent.py:1313: RuntimeWarning: invalid value encountered in multiply 
    sum2 = numpy.sum(nf_exp_nf_delta * A, axis=0) 
     Final    nan  0.991 
0.892155885577594 

は、アルゴリズムは、出力の最初の行で指定され、エラーのためとして100 iterationsに着くことになっていましたそれはしませんでしたか?トレーニングにかかる​​時間を短縮する方法はありますか?

答えて

2

パラメータ値をmax_iterに設定することができます。

コード:

from nltk.tag.sequential import ClassifierBasedPOSTagger 
from nltk.classify import MaxentClassifier 
from nltk.corpus import brown 

brown_tagged_sents = brown.tagged_sents(categories='news') 
# Change size based on your requirement 
size = int(len(brown_tagged_sents) * 0.05) 
print("size:",size) 

train_sents = brown_tagged_sents[:size] 
test_sents = brown_tagged_sents[size:] 

#me_tagger = ClassifierBasedPOSTagger(train=train_sents, classifier_builder=MaxentClassifier.train) 
me_tagger = ClassifierBasedPOSTagger(train=train_sents, classifier_builder=lambda train_feats: MaxentClassifier.train(train_feats, max_iter=15)) 
print(me_tagger.evaluate(test_sents)) 

出力:編集については

('size:', 231) 
    ==> Training (15 iterations) 

    Iteration Log Likelihood Accuracy 
    --------------------------------------- 
     1   -4.67283  0.013 
     2   -0.89282  0.964 
     3   -0.56137  0.998 
     4   -0.40573  0.999 
     5   -0.31761  0.999 
     6   -0.26107  0.999 
     7   -0.22175  0.999 
     8   -0.19284  0.999 
     9   -0.17067  0.999 
     10   -0.15315  0.999 
     11   -0.13894  0.999 
     12   -0.12719  0.999 
     13   -0.11730  0.999 
     14   -0.10887  0.999 
    Final   -0.10159  0.999 
0.787489765499 

これらのメッセージはRuntimeWarningsないエラーです。

4回目の反復後にはLog Likelihood = nanとなり、さらに処理が停止しました。だから、それは最終的な反復になりました。

+0

このコードをコンピュータで実行するのにどれくらい時間がかかりますか? –

+0

'size = int(len(brown_tagged_sents)* 0.05)'のために、私のシステムでは約4-5分かかりました。 – RAVI

+0

私のシステムでは約1時間かかります。考えられる問題は何か?私はscipyをインストールした後、scipyとnumpyが速く動くようになることを知りました。 scipyのインストール後に再起動する必要がありますか? –

関連する問題