Podstawy znakowania części mowy (POS)
Co to jest tagowanie POS?
Tagowanie, rodzaj klasyfikacji, to automatyczne przypisywanie opisu tokenów. Nazywamy deskryptor „znacznikiem”, który reprezentuje jedną z części mowy (rzeczowniki, czasownik, przysłówki, przymiotniki, zaimki, spójnik i ich podkategorie), informacje semantyczne i tak dalej.
Z drugiej strony, jeśli mówimy o tagowaniu części mowy (POS), można to zdefiniować jako proces konwersji zdania w postaci listy słów na listę krotek. Tutaj krotki mają postać (słowo, tag). Możemy też nazwać POS tagowanie procesem przypisywania jednej z części mowy do danego słowa.
Poniższa tabela przedstawia najczęściej używane powiadomienia POS używane w korpusie Penn Treebank -
Sr.No | Etykietka | Opis |
---|---|---|
1 | NNP | Rzeczownik w liczbie pojedynczej |
2 | NNPS | Rzeczownik w liczbie mnogiej |
3 | PDT | Określenie wstępne |
4 | POS | Zaborcze zakończenie |
5 | PRP | Zaimek osobowy |
6 | PRP $ | Zaimek dzierżawczy |
7 | RB | Przysłówek |
8 | RBR | Przysłówek porównawczy |
9 | RBS | Przysłówek, stopień najwyższy |
10 | RP | Cząstka |
11 | SYM | Symbol (matematyczny lub naukowy) |
12 | DO | do |
13 | UH | Wykrzyknik |
14 | VB | Czasownik, forma podstawowa |
15 | VBD | Czasownik, czas przeszły |
16 | VBG | Czasownik odczasownikowy / imiesłów teraźniejszy |
17 | VBN | Czasownik przeszły |
18 | WP | Zaimek Wh |
19 | WP $ | Zaimek dzierżawczy Wh |
20 | WRB | Wh-przysłówek |
21 | # | Znak funta |
22 | $ | Znak dolara |
23 | . | Końcowa interpunkcja w zdaniu |
24 | , | Przecinek |
25 | : | Okrężnica, średnik |
26 | ( | Znak lewego nawiasu |
27 | ) | Znak prawego nawiasu |
28 | " | Prosty podwójny cudzysłów |
29 | ' | Zostawił otwarty pojedynczy cudzysłów |
30 | " | Zostawił otwarty podwójny cudzysłów |
31 | ' | Pojedynczy cudzysłów po prawej stronie |
32 | " | Podwójny cudzysłów otwarty z prawej strony |
Przykład
Zrozummy to za pomocą eksperymentu w Pythonie -
import nltk
from nltk import word_tokenize
sentence = "I am going to school"
print (nltk.pos_tag(word_tokenize(sentence)))
Wynik
[('I', 'PRP'), ('am', 'VBP'), ('going', 'VBG'), ('to', 'TO'), ('school', 'NN')]
Dlaczego tagowanie POS?
Tagowanie POS jest ważną częścią NLP, ponieważ działa jako warunek wstępny do dalszej analizy NLP w następujący sposób -
- Chunking
- Analiza składni
- Ekstrakcja informacji
- Tłumaczenie maszynowe
- Analiza nastrojów
- Analiza gramatyczna i ujednoznacznienie znaczenia słów
TaggerI - klasa bazowa
Wszystkie znaczniki znajdują się w pakiecie NLTK nltk.tag. Podstawową klasą tych taggerów jestTaggerI, oznacza, że wszystkie znaczniki dziedziczą z tej klasy.
Methods - Klasa TaggerI ma następujące dwie metody, które muszą być implementowane przez wszystkie jej podklasy -
tag() method - Jak wskazuje nazwa, ta metoda przyjmuje listę słów jako dane wejściowe i zwraca listę oznaczonych słów jako dane wyjściowe.
evaluate() method - Przy pomocy tej metody możemy ocenić dokładność taggera.
Podstawa tagowania POS
Podstawą lub podstawowym krokiem tagowania POS jest Default Tagging, co można wykonać za pomocą klasy DefaultTagger NLTK. Domyślne tagowanie po prostu przypisuje ten sam tag POS do każdego tokena. Etykietowanie domyślne zapewnia również podstawę do pomiaru poprawy dokładności.
Klasa DefaultTagger
Tagowanie domyślne jest wykonywane przy użyciu DefaultTagging class, która przyjmuje pojedynczy argument, tj. znacznik, który chcemy zastosować.
Jak to działa?
Jak powiedziano wcześniej, wszystkie znaczniki są dziedziczone z TaggerIklasa. PlikDefaultTagger jest dziedziczona z SequentialBackoffTagger który jest podklasą klasy TaggerI class. Zrozummy to na poniższym schemacie -
Jako część SeuentialBackoffTagger, the DefaultTagger musi zaimplementować metodę choose_tag (), która przyjmuje następujące trzy argumenty.
- Lista tokenów
- Aktualny indeks tokena
- Lista poprzednich tokenów, czyli historia
Przykład
import nltk
from nltk.tag import DefaultTagger
exptagger = DefaultTagger('NN')
exptagger.tag(['Tutorials','Point'])
Wynik
[('Tutorials', 'NN'), ('Point', 'NN')]
W tym przykładzie wybraliśmy tag rzeczownikowy, ponieważ jest to najpowszechniejszy typ słów. Ponadto,DefaultTagger jest również najbardziej przydatny, gdy wybieramy najpopularniejszy tag POS.
Ocena dokładności
Plik DefaultTaggerjest również podstawą oceny dokładności taggerów. To jest powód, dla którego możemy go używać razem zevaluate()metoda pomiaru dokładności. Plikevaluate() Metoda przyjmuje listę oznaczonych tokenów jako złoty standard do oceny taggera.
Poniżej znajduje się przykład, w którym użyliśmy naszego domyślnego taggera o nazwie exptaggerutworzony powyżej, aby ocenić dokładność podzbioru treebank zdania z tagiem korpusu -
Przykład
import nltk
from nltk.tag import DefaultTagger
exptagger = DefaultTagger('NN')
from nltk.corpus import treebank
testsentences = treebank.tagged_sents() [1000:]
exptagger.evaluate (testsentences)
Wynik
0.13198749536374715
Powyższe dane wyjściowe pokazują to, wybierając NN dla każdego tagu możemy osiągnąć około 13% dokładności testów na 1000 wpisów pliku treebank ciało.
Oznaczanie listy zdań
Zamiast oznaczać pojedyncze zdanie, NLTK TaggerI class zapewnia nam również plik tag_sents()metoda, za pomocą której możemy otagować listę zdań. Poniżej znajduje się przykład, w którym oznaczyliśmy dwa proste zdania
Przykład
import nltk
from nltk.tag import DefaultTagger
exptagger = DefaultTagger('NN')
exptagger.tag_sents([['Hi', ','], ['How', 'are', 'you', '?']])
Wynik
[
[
('Hi', 'NN'),
(',', 'NN')
],
[
('How', 'NN'),
('are', 'NN'),
('you', 'NN'),
('?', 'NN')
]
]
W powyższym przykładzie użyliśmy naszego wcześniej utworzonego domyślnego taggera o nazwie exptagger.
Usuwanie tagów z zdania
Możemy również odtagować zdanie. W tym celu NLTK udostępnia metodę nltk.tag.untag (). Przyjmuje tagowane zdanie jako dane wejściowe i dostarcza listę słów bez tagów. Zobaczmy przykład -
Przykład
import nltk
from nltk.tag import untag
untag([('Tutorials', 'NN'), ('Point', 'NN')])
Wynik
['Tutorials', 'Point']