NLP | Klassifikatorbasiertes Chunking | Set 2
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
(
"Accuracy of ClassifierChunker : "
, a)
(
"\nPrecision of ClassifierChunker : "
, p)
(
"\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()
(
"Accuracy of ClassifierChunker : "
, a)
(
"\nPrecision of ClassifierChunker : "
, p)
(
"\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()
(
"Accuracy of ClassifierChunker : "
, a)
(
"\nPrecision of ClassifierChunker : "
, p)
(
"\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.