Noções básicas de marcação de parte da fala (POS)
O que é marcação de PDV?
A marcação, um tipo de classificação, é a atribuição automática da descrição dos tokens. Chamamos o descritor de 'tag', que representa uma das classes gramaticais (substantivos, verbo, advérbios, adjetivos, pronomes, conjunção e suas subcategorias), informação semântica e assim por diante.
Por outro lado, se falamos de tagging Part-of-Speech (POS), pode ser definido como o processo de conversão de uma frase na forma de uma lista de palavras, em uma lista de tuplas. Aqui, as tuplas estão na forma de (palavra, tag). Também podemos chamar de marcação POS um processo de atribuição de uma das classes gramaticais à palavra dada.
A tabela a seguir representa a notificação de PDV mais frequente usada no Penn Treebank corpus -
Sr. Não | Tag | Descrição |
---|---|---|
1 | NNP | Nome próprio, singular |
2 | NNPS | Substantivo próprio, plural |
3 | PDT | Pré determinante |
4 | POS | Final possessivo |
5 | PRP | Pronome pessoal |
6 | PRP $ | Pronome possessivo |
7 | RB | Advérbio |
8 | RBR | Advérbio, comparativo |
9 | RBS | Advérbio, superlativo |
10 | RP | Partícula |
11 | SYM | Símbolo (matemático ou científico) |
12 | PARA | para |
13 | UH | Interjeição |
14 | VB | Verbo, forma básica |
15 | VBD | Verbo, pretérito |
16 | VBG | Verbo, gerúndio / particípio presente |
17 | VBN | Verbo, passado |
18 | WP | Pronome Wh |
19 | WP $ | Pronome wh possessivo |
20 | WRB | Wh-advérbio |
21 | # | Sinal de libra |
22 | $ | Cifrão |
23 | . | Pontuação final de frase |
24 | , | Vírgula |
25 | : | Cólon, ponto e vírgula |
26 | ( | Parêntese esquerdo |
27 | ) | Caráter de colchete direito |
28 | " | Aspas duplas diretas |
29 | ' | Aspas simples abertas |
30 | " | Aspas duplas à esquerda |
31 | ' | Aspas simples fechadas à direita |
32 | " | Aspas duplas abertas à direita |
Exemplo
Vamos entender isso com um experimento Python -
import nltk
from nltk import word_tokenize
sentence = "I am going to school"
print (nltk.pos_tag(word_tokenize(sentence)))
Resultado
[('I', 'PRP'), ('am', 'VBP'), ('going', 'VBG'), ('to', 'TO'), ('school', 'NN')]
Por que marcação de PDV?
A marcação de POS é uma parte importante da PNL porque funciona como um pré-requisito para análises adicionais da PNL da seguinte maneira -
- Chunking
- Análise sintática
- Extração de informação
- Maquina de tradução
- Análise de sentimentos
- Análise gramatical e desambiguação do sentido das palavras
TaggerI - classe base
Todos os taggers residem no pacote nltk.tag da NLTK. A classe base desses taggers éTaggerI, significa que todos os marcadores herdam desta classe.
Methods - A classe TaggerI tem os dois métodos a seguir que devem ser implementados por todas as suas subclasses -
tag() method - Como o nome indica, este método pega uma lista de palavras como entrada e retorna uma lista de palavras marcadas como saída.
evaluate() method - Com a ajuda deste método, podemos avaliar a precisão do tagger.
A linha de base da marcação de PDV
A linha de base ou a etapa básica da marcação de POS é Default Tagging, que pode ser executado usando a classe DefaultTagger do NLTK. A marcação padrão simplesmente atribui a mesma tag POS a cada token. A marcação padrão também fornece uma linha de base para medir as melhorias de precisão.
Classe DefaultTagger
A marcação padrão é realizada usando DefaultTagging classe, que recebe um único argumento, ou seja, a tag que queremos aplicar.
Como funciona?
Como dito anteriormente, todos os etiquetadores são herdados de TaggerIclasse. oDefaultTagger é herdado de SequentialBackoffTagger que é uma subclasse de TaggerI class. Vamos entender isso com o seguinte diagrama -
Como sendo parte de SeuentialBackoffTagger, a DefaultTagger deve implementar o método choose_tag () que leva os três argumentos a seguir.
- Lista de token
- Índice do token atual
- Lista do token anterior, ou seja, o histórico
Exemplo
import nltk
from nltk.tag import DefaultTagger
exptagger = DefaultTagger('NN')
exptagger.tag(['Tutorials','Point'])
Resultado
[('Tutorials', 'NN'), ('Point', 'NN')]
Neste exemplo, escolhemos uma tag de substantivo porque é o tipo de palavra mais comum. Além disso,DefaultTagger também é mais útil quando escolhemos a tag de PDV mais comum.
Avaliação de precisão
o DefaultTaggertambém é a linha de base para avaliar a precisão dos etiquetadores. Essa é a razão pela qual podemos usá-lo junto comevaluate()método para medir a precisão. oevaluate() O método usa uma lista de tokens marcados como padrão ouro para avaliar o marcador.
A seguir está um exemplo em que usamos nosso tagger padrão, chamado exptagger, criado acima, para avaliar a precisão de um subconjunto de treebank frases marcadas com corpus -
Exemplo
import nltk
from nltk.tag import DefaultTagger
exptagger = DefaultTagger('NN')
from nltk.corpus import treebank
testsentences = treebank.tagged_sents() [1000:]
exptagger.evaluate (testsentences)
Resultado
0.13198749536374715
A saída acima mostra que escolhendo NN para cada tag, podemos atingir cerca de 13% de teste de precisão em 1000 entradas do treebank corpus.
Marcando uma lista de frases
Em vez de marcar uma única frase, o NLTK's TaggerI classe também nos fornece um tag_sents()método com a ajuda do qual podemos marcar uma lista de frases. A seguir está o exemplo em que marcamos duas frases simples
Exemplo
import nltk
from nltk.tag import DefaultTagger
exptagger = DefaultTagger('NN')
exptagger.tag_sents([['Hi', ','], ['How', 'are', 'you', '?']])
Resultado
[
[
('Hi', 'NN'),
(',', 'NN')
],
[
('How', 'NN'),
('are', 'NN'),
('you', 'NN'),
('?', 'NN')
]
]
No exemplo acima, usamos nosso tagger padrão criado anteriormente, denominado exptagger.
Desmarcando uma frase
Também podemos desmarcar uma frase. O NLTK fornece o método nltk.tag.untag () para esse propósito. Receberá uma frase com tags como entrada e fornece uma lista de palavras sem tags. Vamos ver um exemplo -
Exemplo
import nltk
from nltk.tag import untag
untag([('Tutorials', 'NN'), ('Point', 'NN')])
Resultado
['Tutorials', 'Point']