НЛП | Объединение тегов NGram

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

NgramTagger имеет 3 подкласса

  • UnigramTagger
  • BigramTagger
  • TrigramTagger

Подкласс BigramTagger использует предыдущий тег как часть своего контекста.
Подкласс TrigramTagger использует два предыдущих тега как часть своего контекста.

ngram - это подпоследовательность из n элементов.
Идея подклассов NgramTagger:

  • Глядя на предыдущие слова и теги POS, можно угадать тег части речи для текущего слова.
  • Каждый теггер поддерживает словарь контекста (для его реализации используется родительский класс ContextTagger).
  • Этот словарь используется для угадывания этого тега на основе контекста.
  • Контекст - это некоторое количество предыдущих помеченных слов в случае подклассов NgramTagger.

Код # 1: Работа теггера Bigram




# Loading Libraries
from nltk.tag import DefaultTagger
from nltk.tag import BigramTagger
from nltk.corpus import treebank
# initializing training and testing set
train_data = treebank.tagged_sents()[: 3000 ]
test_data = treebank.tagged_sents()[ 3000 :]
# Tagging
tag1 = BigramTagger(train_data)
# Evaluation
tag1.evaluate(test_data)

Выход :

0,11318799913662854


Код # 2: Работа теггера триграммы




# Loading Libraries
from nltk.tag import DefaultTagger
from nltk.tag import TrigramTagger
from nltk.corpus import treebank
# initializing training and testing set
train_data = treebank.tagged_sents()[: 3000 ]
test_data = treebank.tagged_sents()[ 3000 :]
# Tagging
tag1 = TrigramTagger(train_data)
# Evaluation
tag1.evaluate(test_data)

Выход :

0,06876753723289446


Код № 3: Совместное использование тегов Unigram, Bigram и Trigram.




# Loading Libraries
from nltk.tag import TrigramTagger
from tag_util import backoff_tagger
from nltk.corpus import treebank
# initializing training and testing set
train_data = treebank.tagged_sents()[: 3000 ]
test_data = treebank.tagged_sents()[ 3000 :]
backoff = DefaultTagger( 'NN' )
tag = backoff_tagger(train_sents,
[UnigramTagger, BigramTagger, TrigramTagger],
backoff = backoff)
tag.evaluate(test_sents)

Выход :

0,8806820634578028

Как это работает ?

  • Функция backoff_tagger создает экземпляр каждого класса tagger.
  • Он дает предыдущий tagger и train_sents в качестве отката.
  • Порядок классов тегов важен: в приведенном выше коде первым классом является UnigramTagger, и, следовательно, он будет обучен первым и получит начальное теггер отсрочки (DefaultTagger).
  • Затем этот теггер становится теггером отсрочки для следующего класса теггера.
  • Последний возвращенный теггер будет экземпляром последнего класса теггера - TrigramTagger.

Код # 4: Доказательство




print (tagger._taggers[ - 1 ] = = backoff)
print ( " " , isinstance (tagger._taggers[ 0 ], TrigramTagger))
print ( " " , isinstance (tagger._taggers[ 1 ], BigramTagger))

Выход :

Правда

Правда

Правда

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

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