НЛП | Чанкер на основе обучающих тегов | Комплект 2
- Корпус Conll2000 определяет чанки с помощью тегов IOB.
- Он указывает, где начинается и заканчивается фрагмент, а также его типы.
- Тегер части речи может быть обучен на этих тегах IOB для дальнейшего включения подкласса ChunkerI.
- Сначала с помощью
chunked_sents()
os corpus получается дерево, которое затем преобразуется в формат, пригодный для использования тегом части речи. -
conll_tag_chunks()
используетtree2conlltags()
для преобразования предложения Tree в список из трех кортежей формы (word, pos, iob).- pos: тег части речи
- iob: тег IOB, например - B_NP, I_NP, чтобы указать, что работа находится в начале и внутри именной фразы соответственно.
-
conlltags2tree()
- это обращениеtree2conlltags()
- Затем 3-кортежи преобразуются в 2-кортежи, которые может распознать теггер.
- Класс RegexpParser использует теги части речи для шаблонов фрагментов, поэтому теги части речи используются, как если бы они были словами для тегирования.
-
conll_tag_chunks()
принимает кортежи из трех (word, pos, iob) и возвращает список из двух кортежей в форме (pos, iob)
Код # 1: давайте разберемся
from nltk.chunk.util import tree2conlltags, conlltags2tree from nltk.tree import Tree t = Tree( 'S' , [Tree( 'NP' , [( 'the' , 'DT' ), ( 'book' , 'NN' )])]) print ( "Tree2conlltags :
" , tree2conlltags(t)) c = conlltags2tree([( 'the' , 'DT' , 'B-NP' ), ( 'book' , 'NN' , 'I-NP' )]) print ( "
conlltags2tree :
" , c) # Converting 3 tuples to 2 tuples. print ( "
conll_tag_chunnks for tree :
" , conll_tag_chunks([t])) |
Выход :
Tree2conlltags: [('the', 'DT', 'B-NP'), ('book', 'NN', 'I-NP')] conlltags2tree: Дерево ('S', [Tree ('NP', [('the', 'DT'), ('book', 'NN')])]) conll_tag_chunnks для дерева: [[('DT', 'B-NP'), ('NN', 'I-NP')]]
Код # 2: класс TagChunker с использованием корпуса conll2000
from chunkers import TagChunker from nltk.corpus import conll2000 # data conll_train = conll2000.chunked_sents( 'train.txt' ) conll_test = conll2000.chunked_sents( 'test.txt' ) # intializing the chunker chunker = TagChunker(conll_train) # testing score = chunker.evaluate(conll_test) a = score.accuracy() p = score.precision() r = recall print ( "Accuracy of TagChunker : " , a) print ( "
Precision of TagChunker : " , p) print ( "
Recall of TagChunker : " , r) |
Выход :
Точность TagChunker: 0.8950545623403762 Точность TagChunker: 0.8114841974355675 Отзыв TagChunker: 0.8644191676944863
Примечание: производительность conll2000 не так хороша, как treebank_chunk, но conll2000 представляет собой гораздо больший корпус.
Код # 3: TagChunker с использованием класса UnigramTagger
# loading libraries from chunkers import TagChunker from nltk.tag import UnigramTagger uni_chunker = TagChunker(train_chunks, tagger_classes = [UnigramTagger]) score = uni_chunker.evaluate(test_chunks) a = score.accuracy() print ( "Accuracy of TagChunker : " , a) |
Выход :
Точность TagChunker: 0,9674925924335466
tagger_classes
передается непосредственно в функцию backoff_tagger (), поэтому это означает, что они должны быть подклассами SequentialBackoffTagger. При тестировании значение по умолчанию tagger_classes = [UnigramTagger, BigramTagger] обычно дает лучшие результаты, но оно может варьироваться в зависимости от корпуса.
Внимание компьютерщик! Укрепите свои основы с помощью базового курса программирования Python и изучите основы.
Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.