НЛП | Чанкер на основе обучающих тегов | Комплект 2

Опубликовано: 24 Июля, 2021
    Корпус 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. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.