Lassen Sie uns anhand der Daten aus dem Korpus treebank_chunk die Chunker auswerten (im vorherigen Artikel vorbereitet).

Code # 1:

from chunkers import ClassifierChunker 
from nltk.corpus import treebank_chunk 
  
train_data = treebank_chunk.chunked_sents()[:3000] 
test_data = treebank_chunk.chunked_sents()[3000:] 
  
chunker = ClassifierChunker(train_data) 
  
score = chunker.evaluate(test_data) 
  
a = score.accuracy() 
p = score.precision() 
r = recall 
    
print ("Accuracy of ClassifierChunker : ", a) 
print ("\nPrecision of ClassifierChunker : ", p) 
print ("\nRecall of ClassifierChunker : ", r) 

Ausgabe :

Genauigkeit von ClassifierChunker: 0.9721733155838022
Präzision von ClassifierChunker: 0.9258838793383068
Rückruf von ClassifierChunker: 0.9359016393442623

 
Code 2: Vergleichen wir die Leistung von conll_train

chunker = ClassifierChunker(conll_train) 
score = chunker.evaluate(conll_test) 
  
a = score.accuracy() 
p = score.precision() 
r = score.recall() 
    
print ("Accuracy of ClassifierChunker : ", a) 
print ("\nPrecision of ClassifierChunker : ", p) 
print ("\nRecall of ClassifierChunker : ", r) 

Ausgabe :



Genauigkeit von ClassifierChunker: 0.9264622074002153
Präzision von ClassifierChunker: 0.8737924310910219
Rückruf von ClassifierChunker: 0.9007354620620346

Das Wort kann durch den Tagger in unsere Feature-Detektor-Funktion übergeben werden, indem verschachtelte 2-Tupel der Form ((word, pos), iob) erstellt werden. Die Methode chunk_trees2train_chunks() erzeugt diese verschachtelten 2-Tupel.
Die folgenden Funktionen werden extrahiert:

  • Das aktuelle Tag für Wort und Wortart
  • Das vorherige Wort und das IOB-Tag, ein Teil des Sprach-Tags
  • Das nächste Wort- und Wortart-Tag

Die ClassifierChunker-Klasse verwendet einen internen ClassifierBasedTagger und prev_next_pos_iob() als Standard-Feature-Detektor. Die Ergebnisse des Taggers, die in derselben verschachtelten 2-Tupel-Form vorliegen, werden dann in 3-Tupel umformuliert, um mithilfe von conlltags2tree() einen endgültigen Baum zurückzugeben.
 

Code # 3: anderer Klassifikator-Builder

from chunkers import ClassifierChunker 
from nltk.corpus import treebank_chunk 
from nltk.classify import MaxentClassifier 
  
train_data = treebank_chunk.chunked_sents()[:3000] 
test_data = treebank_chunk.chunked_sents()[3000:] 
  
  
builder = lambda toks: MaxentClassifier.train( 
            toks, trace = 0, max_iter = 10, min_lldelta = 0.01) 
  
chunker = ClassifierChunker( 
        train_data, classifier_builder = builder) 
  
score = chunker.evaluate(test_data) 
    
a = score.accuracy() 
p = score.precision() 
r = score.recall() 
  
print ("Accuracy of ClassifierChunker : ", a) 
print ("\nPrecision of ClassifierChunker : ", p) 
print ("\nRecall of ClassifierChunker : ", r) 

Ausgabe :

Genauigkeit von ClassifierChunker: 0.9743204362949285
Präzision von ClassifierChunker: 0.9334423548650859
Rückruf von ClassifierChunker: 0.9357377049180328

Die ClassifierBasedTagger-Klasse verwendet standardmäßig NaiveBayesClassifier.train als classifier_builder. Jeder Klassifizierer kann jedoch verwendet werden, indem das Schlüsselwortargument classifier_builder überschrieben wird.

machine learning