2016-09-08 3 views
0

Ich versuche, POS-Tagging mit ClassifierBasedPOSTagger mit classifier_builder=MaxentClassifier.train durchzuführen. Hier ist das Stück Code:Wie ändere ich die Anzahl der Iterationen im maximalen Klassifikator für das POS-Tagging in NLTK?

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

Aber nach einer Stunde den Code ausgeführt wird, sehe ich, dass es immer noch die ClassifierBasedPOSTagger(train=train_sents, classifier_builder=MaxentClassifier.train) initialisiert. In der Ausgabe, kann ich das folgende Stück Code Lauf sehen:

==> Training (100 iterations) 

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

denke ich, die Iterationen 100 sein werden, bevor der Klassifikator bereit ist, Teile der Sprache zu jedem Eingang zu markieren. Das würde den ganzen Tag dauern. Warum braucht es so viel Zeit? Und wird das Verringern der Iterationen diesen Code ein bisschen praktischer machen (was bedeutet, dass die Zeit reduziert wird und immer noch nützlich genug ist), und wenn ja, wie wird dann diese Iterationen verringert?

EDIT

Nach 1,5 Stunden, erhalte ich die folgende Ausgabe:

==> 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 

War der Algorithmus sollte 100 iterations erhalten, wie in der ersten Zeile des Ausgangs und aufgrund des Fehlers angegeben hat es nicht? Und gibt es eine Möglichkeit, die Zeit für das Training zu reduzieren?

Antwort

2

Sie können den Parameterwert max_iter auf die gewünschte Anzahl einstellen.

Code:

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

Ausgang:

('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 

Für bearbeiten:

Diese Meldungen sind RuntimeWarnings und keine Fehler.

Wie nach der vierten Iteration wurde Log Likelihood = nan gefunden, so dass die Verarbeitung weiter gestoppt wurde. So wurde es letzte Wiederholung.

+0

Können Sie mir sagen, wie viel Zeit benötigt dieser Code für die Ausführung auf Ihrem Computer? –

+0

Wegen 'size = int (len (brown_tagged_sents) * 0.05)' dauerte es ungefähr 4-5 Minuten in meinem System. – RAVI

+0

Es dauert ungefähr 1 Stunde in meinem System. Was kann das mögliche Problem sein? Ich habe später scipy installiert, als ich erfahren habe, dass Scipy und Numpy es schneller laufen lassen. Muss ich nach der Installation von scipy neu starten? –

Verwandte Themen