НЛП | Чанкинг на основе классификатора | Комплект 2

Опубликовано: 24 Июля, 2021

Используя данные из корпуса treebank_chunk, давайте оценим чанки (подготовленные в предыдущей статье).

Код №1:




# loading libraries
from chunkers import ClassifierChunker
from nltk.corpus import treebank_chunk
train_data = treebank_chunk.chunked_sents()[: 3000 ]
test_data = treebank_chunk.chunked_sents()[ 3000 :]
# initializing
chunker = ClassifierChunker(train_data)
# evaluation
score = chunker.evaluate(test_data)
a = score.accuracy()
p = score.precision()
r = recall
print ( "Accuracy of ClassifierChunker : " , a)
print ( " Precision of ClassifierChunker : " , p)
print ( " Recall of ClassifierChunker : " , r)

Выход :

Точность ClassifierChunker: 0,9721733155838022

Точность ClassifierChunker: 0,9258838793383068

Отзыв ClassifierChunker: 0.9359016393442623


Код # 2: Давайте сравним производительность 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 ( " Precision of ClassifierChunker : " , p)
print ( " Recall of ClassifierChunker : " , r)

Выход :

Точность ClassifierChunker: 0,9264622074002153

Точность классификатора Chunker: 0.8737924310910219

Отзыв ClassifierChunker: 0.9007354620620346

слово может быть передано через теггер в нашу функцию детектора признаков, создав вложенные 2-кортежи вида ((word, pos), iob). Метод chunk_trees2train_chunks () создает эти вложенные 2-кортежи.
Извлечены следующие особенности:

  • Текущее слово и тег части речи
  • Предыдущее слово и тег IOB, тег части речи
  • Следующее слово и тег части речи

Класс ClassifierChunker использует внутренний ClassifierBasedTagger и prev_next_pos_iob () в качестве объекта feature_detector по умолчанию. Результаты теггера, которые находятся в той же форме вложенных двух кортежей, затем преобразовываются в трехкортежные, чтобы вернуть окончательное дерево с помощью conlltags2tree ().

Код # 3: другой конструктор классификаторов




# loading libraries
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 ( " Precision of ClassifierChunker : " , p)
print ( " Recall of ClassifierChunker : " , r)

Выход :

Точность ClassifierChunker: 0,9743204362949285

Точность классификатора Chunker: 0,9334423548650859

Отзыв ClassifierChunker: 0.9357377049180328

Класс ClassifierBasedTagger по умолчанию использует NaiveBayesClassifier.train в качестве classifier_builder. Но можно использовать любой классификатор, переопределив аргумент ключевого слова classifier_builder.

Внимание компьютерщик! Укрепите свои основы с помощью базового курса программирования Python и изучите основы.

Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.