Nozioni di base sull'etichettatura di parti del discorso (POS)

Cos'è il tagging POS?

Il tagging, una sorta di classificazione, è l'assegnazione automatica della descrizione dei token. Chiamiamo il descrittore s 'tag', che rappresenta una delle parti del discorso (nomi, verbi, avverbi, aggettivi, pronomi, congiunzione e loro sottocategorie), informazioni semantiche e così via.

D'altra parte, se parliamo di tagging Part-of-Speech (POS), può essere definito come il processo di conversione di una frase sotto forma di un elenco di parole, in un elenco di tuple. Qui, le tuple hanno la forma di (word, tag). Possiamo anche chiamare il tagging POS un processo di assegnazione di una delle parti del discorso alla parola data.

La tabella seguente rappresenta la notifica POS più frequente utilizzata nel corpus Penn Treebank -

Suor n Etichetta Descrizione
1 NNP Nome proprio, singolare
2 NNPS Nome proprio, plurale
3 PDT Pre determinante
4 POS Fine possessivo
5 PRP Pronome personale
6 PRP $ Pronome possessivo
7 RB Avverbio
8 RBR Avverbio, comparativo
9 RBS Avverbio, superlativo
10 RP Particella
11 SYM Simbolo (matematico o scientifico)
12 PER per
13 UH Interiezione
14 VB Verbo, forma base
15 VBD Verbo, passato
16 VBG Verbo, gerundio / participio presente
17 VBN Verbo, passato
18 WP Wh-pronome
19 WP $ Possessivo pronome wh
20 WRB Wh-avverbio
21 # Cancelletto
22 $ Simbolo del dollaro
23 . Punteggiatura finale della frase
24 , Virgola
25 : Due punti, punto e virgola
26 ( Carattere parentesi quadra sinistra
27 ) Carattere parentesi quadra destra
28 " Virgolette doppie diritte
29 ' Virgoletta singola aperta
30 " Virgolette doppie aperte a sinistra
31 ' Virgoletta singola chiusa a destra
32 " Virgolette doppie aperte a destra

Esempio

Facci capire con un esperimento Python -

import nltk
from nltk import word_tokenize
sentence = "I am going to school"
print (nltk.pos_tag(word_tokenize(sentence)))

Produzione

[('I', 'PRP'), ('am', 'VBP'), ('going', 'VBG'), ('to', 'TO'), ('school', 'NN')]

Perché tagging POS?

La codifica POS è una parte importante della PNL perché funziona come prerequisito per ulteriori analisi della PNL come segue:

  • Chunking
  • Sintassi Parsing
  • Estrazione delle informazioni
  • Traduzione automatica
  • Sentiment Analysis
  • Analisi grammaticale e disambiguazione del senso delle parole

TaggerI - Classe base

Tutti i tagger risiedono nel pacchetto nltk.tag di NLTK. La classe base di questi tagger èTaggerI, significa che tutti i tagger ereditano da questa classe.

Methods - La classe TaggerI ha i seguenti due metodi che devono essere implementati da tutte le sue sottoclassi -

  • tag() method - Come suggerisce il nome, questo metodo accetta un elenco di parole come input e restituisce un elenco di parole contrassegnate come output.

  • evaluate() method - Con l'aiuto di questo metodo, possiamo valutare l'accuratezza del tagger.

La base del tagging POS

La linea di base o il passaggio di base del tagging POS è Default Tagging, che può essere eseguito utilizzando la classe DefaultTagger di NLTK. La codifica predefinita assegna semplicemente lo stesso tag POS a ogni token. La codifica predefinita fornisce anche una linea di base per misurare i miglioramenti della precisione.

DefaultTagger classe

La codifica predefinita viene eseguita utilizzando DefaultTagging class, che accetta il singolo argomento, cioè il tag che vogliamo applicare.

Come funziona?

Come detto in precedenza, tutti i tagger vengono ereditati da TaggerIclasse. IlDefaultTagger è ereditato da SequentialBackoffTagger che è una sottoclasse di TaggerI class. Cerchiamo di capirlo con il seguente diagramma:

Come parte di SeuentialBackoffTagger, il DefaultTagger deve implementare il metodo choose_tag () che accetta i seguenti tre argomenti.

  • Elenco dei token
  • Indice del token corrente
  • Elenco dei token precedenti, ovvero la cronologia

Esempio

import nltk
from nltk.tag import DefaultTagger
exptagger = DefaultTagger('NN')
exptagger.tag(['Tutorials','Point'])

Produzione

[('Tutorials', 'NN'), ('Point', 'NN')]

In questo esempio, abbiamo scelto un tag sostantivo perché sono i tipi di parole più comuni. Inoltre,DefaultTagger è anche molto utile quando scegliamo il tag POS più comune.

Valutazione dell'accuratezza

Il DefaultTaggerè anche la base per la valutazione dell'accuratezza dei tagger. Questo è il motivo per cui possiamo usarlo insiemeevaluate()metodo per misurare l'accuratezza. Ilevaluate() Il metodo prende un elenco di token con tag come gold standard per valutare il tagger.

Di seguito è riportato un esempio in cui abbiamo utilizzato il nostro tagger predefinito, named exptagger, creato sopra, per valutare l'accuratezza di un sottoinsieme di treebank frasi con tag corpus -

Esempio

import nltk
from nltk.tag import DefaultTagger
exptagger = DefaultTagger('NN')
from nltk.corpus import treebank
testsentences = treebank.tagged_sents() [1000:]
exptagger.evaluate (testsentences)

Produzione

0.13198749536374715

L'output sopra mostra che scegliendo NN per ogni tag, possiamo ottenere circa il 13% di test di accuratezza su 1000 voci di treebank corpus.

Contrassegnare un elenco di frasi

Piuttosto che contrassegnare una singola frase, il NLTK TaggerI class ci fornisce anche un file tag_sents()metodo con l'aiuto del quale possiamo taggare un elenco di frasi. Di seguito è riportato l'esempio in cui abbiamo contrassegnato due semplici frasi

Esempio

import nltk
from nltk.tag import DefaultTagger
exptagger = DefaultTagger('NN')
exptagger.tag_sents([['Hi', ','], ['How', 'are', 'you', '?']])

Produzione

[
   [
      ('Hi', 'NN'), 
      (',', 'NN')
   ], 
   [
      ('How', 'NN'), 
      ('are', 'NN'),
      ('you', 'NN'), 
      ('?', 'NN')
   ]
]

Nell'esempio precedente, abbiamo utilizzato il nostro tagger predefinito creato in precedenza denominato exptagger.

Annullare il contrassegno di una frase

Possiamo anche rimuovere il tag di una frase. NLTK fornisce il metodo nltk.tag.untag () per questo scopo. Richiederà una frase con tag come input e fornisce un elenco di parole senza tag. Vediamo un esempio:

Esempio

import nltk
from nltk.tag import untag
untag([('Tutorials', 'NN'), ('Point', 'NN')])

Produzione

['Tutorials', 'Point']