НЛП | Чанкинг на основе классификатора | Комплект 2
Используя данные из корпуса 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. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.