Основы тегирования части речи (POS)
Что такое POS-теги?
Маркировка, своего рода классификация, представляет собой автоматическое присвоение описания токенам. Мы называем дескриптор тегом, который представляет одну из частей речи (существительные, глагол, наречия, прилагательные, местоимения, союз и их подкатегории), семантическую информацию и так далее.
С другой стороны, если мы говорим о тегировании части речи (POS), его можно определить как процесс преобразования предложения в форме списка слов в список кортежей. Здесь кортежи имеют форму (слово, тег). Мы также можем назвать POS-тегами процесс присвоения одной из частей речи данному слову.
В следующей таблице представлены наиболее частые POS-уведомления, используемые в корпусе Penn Treebank.
Старший Нет | Тег | Описание |
---|---|---|
1 | NNP | Имя собственное, единственное число |
2 | NNPS | Имя собственное, множественное число |
3 | Тихоокеанское летнее время | Предопределитель |
4 | POS | Притяжательная концовка |
5 | PRP | Личное местоимение |
6 | PRP $ | Притяжательное местоимение |
7 | РБ | Наречие |
8 | RBR | Наречие, сравнительное |
9 | RBS | Наречие, превосходная степень |
10 | RP | Частицы |
11 | SYM | Символ (математический или научный) |
12 | К | к |
13 | UH | Междометие |
14 | VB | Глагол, основная форма |
15 | VBD | Глагол, прошедшее время |
16 | VBG | Глагол, герундий / причастие настоящего |
17 | VBN | Глагол, прошедшее |
18 | WP | Wh-местоимение |
19 | WP $ | Притяжательное местоимение wh |
20 | WRB | Wh-наречие |
21 год | # | Знак фунта стерлингов |
22 | $ | Знак доллара |
23 | . | Окончательная пунктуация предложения |
24 | , | Запятая |
25 | : | Двоеточие, точка с запятой |
26 | ( | Символ левой скобки |
27 | ) | Правая скобка |
28 | " | Прямая двойная кавычка |
29 | ' | Левая открытая одинарная кавычка |
30 | " | Левая открытая двойная кавычка |
31 год | ' | Одинарная кавычка справа, закрывающая |
32 | " | Правая открытая двойная кавычка |
пример
Давайте разберемся с этим с помощью эксперимента Python -
import nltk
from nltk import word_tokenize
sentence = "I am going to school"
print (nltk.pos_tag(word_tokenize(sentence)))
Вывод
[('I', 'PRP'), ('am', 'VBP'), ('going', 'VBG'), ('to', 'TO'), ('school', 'NN')]
Почему POS-теги?
Маркировка POS является важной частью НЛП, потому что она работает как предварительное условие для дальнейшего анализа НЛП следующим образом:
- Chunking
- Синтаксический анализ
- Извлечение информации
- Машинный перевод
- Анализ настроений
- Анализ грамматики и устранение многозначности слов
TaggerI - Базовый класс
Все тегеры находятся в пакете NLTK nltk.tag. Базовый класс этих тегеров -TaggerI, означает, что все тегеры наследуются от этого класса.
Methods - Класс TaggerI имеет следующие два метода, которые должны быть реализованы всеми его подклассами -
tag() method - Как следует из названия, этот метод принимает список слов на входе и возвращает список помеченных слов на выходе.
evaluate() method - С помощью этого метода мы можем оценить точность теггера.
Базовый уровень POS-тегов
Базовый или основной шаг маркировки торговой точки: Default Tagging, который может быть выполнен с использованием класса DefaultTagger NLTK. Тегирование по умолчанию просто назначает один и тот же тег POS каждому токену. Пометка по умолчанию также обеспечивает основу для измерения повышения точности.
DefaultTagger класс
Пометка по умолчанию выполняется с помощью DefaultTagging class, который принимает единственный аргумент, т. е. тег, который мы хотим применить.
Как это работает?
Как было сказано ранее, все теггеры унаследованы от TaggerIкласс. ВDefaultTagger унаследовано от SequentialBackoffTagger который является подклассом TaggerI class. Давайте разберемся со следующей схемой -
Как часть SeuentialBackoffTagger, то DefaultTagger должен реализовать метод choose_tag (), который принимает следующие три аргумента.
- Список токенов
- Индекс текущего токена
- Список предыдущих токенов, т.е. история
пример
import nltk
from nltk.tag import DefaultTagger
exptagger = DefaultTagger('NN')
exptagger.tag(['Tutorials','Point'])
Вывод
[('Tutorials', 'NN'), ('Point', 'NN')]
В этом примере мы выбрали тег существительного, потому что это наиболее распространенные типы слов. Более того,DefaultTagger также наиболее полезен, когда мы выбираем наиболее распространенный тег POS.
Оценка точности
В DefaultTaggerтакже является базовым показателем для оценки точности тегеров. Вот почему мы можем использовать его вместе сevaluate()метод измерения точности. Вevaluate() Метод использует список помеченных токенов как золотой стандарт для оценки теггера.
Ниже приведен пример, в котором мы использовали наш теггер по умолчанию с именем exptagger, созданный выше, для оценки точности подмножества treebank корпус помеченных предложений -
пример
import nltk
from nltk.tag import DefaultTagger
exptagger = DefaultTagger('NN')
from nltk.corpus import treebank
testsentences = treebank.tagged_sents() [1000:]
exptagger.evaluate (testsentences)
Вывод
0.13198749536374715
Вывод выше показывает, что, выбрав NN для каждого тега мы можем достичь около 13% точности тестирования на 1000 записей treebank корпус.
Добавление тегов к списку предложений
Вместо того, чтобы пометить одно предложение, NLTK TaggerI класс также предоставляет нам tag_sents()метод, с помощью которого мы можем пометить список предложений. Ниже приведен пример, в котором мы пометили два простых предложения
пример
import nltk
from nltk.tag import DefaultTagger
exptagger = DefaultTagger('NN')
exptagger.tag_sents([['Hi', ','], ['How', 'are', 'you', '?']])
Вывод
[
[
('Hi', 'NN'),
(',', 'NN')
],
[
('How', 'NN'),
('are', 'NN'),
('you', 'NN'),
('?', 'NN')
]
]
В приведенном выше примере мы использовали наш ранее созданный теггер по умолчанию с именем exptagger.
Снятие отметки с предложения
Мы также можем отменить пометку предложения. NLTK предоставляет для этой цели метод nltk.tag.untag (). Он принимает предложение с тегами в качестве входных данных и предоставляет список слов без тегов. Давайте посмотрим на пример -
пример
import nltk
from nltk.tag import untag
untag([('Tutorials', 'NN'), ('Point', 'NN')])
Вывод
['Tutorials', 'Point']