Dasar-dasar Pemberian Tag Part-of-Speech (POS)
Apa itu penandaan POS?
Pemberian tag, sejenis klasifikasi, adalah penetapan otomatis dari deskripsi token. Kami menyebutnya 'tag' deskriptor, yang mewakili salah satu bagian ucapan (kata benda, kata kerja, kata keterangan, kata sifat, kata ganti, kata sambung dan subkategorinya), informasi semantik, dan sebagainya.
Di sisi lain, jika kita berbicara tentang penandaan Part-of-Speech (POS), itu dapat didefinisikan sebagai proses mengubah kalimat dalam bentuk daftar kata, menjadi daftar tupel. Di sini tupelnya berbentuk (word, tag). Kita juga dapat menyebut penandaan POS sebagai proses penugasan salah satu bagian ucapan ke kata tertentu.
Tabel berikut mewakili notifikasi POS yang paling sering digunakan dalam Penn Treebank corpus -
Sr Tidak | Menandai | Deskripsi |
---|---|---|
1 | NNP | Kata benda yang tepat, tunggal |
2 | NNPS | Kata benda yang tepat, jamak |
3 | PDT | Penentu pra |
4 | POS | Akhir yang posesif |
5 | PRP | Kata ganti pribadi |
6 | PRP $ | Kata ganti posesif |
7 | RB | Kata keterangan |
8 | RBR | Kata keterangan, komparatif |
9 | RBS | Kata keterangan, superlatif |
10 | RP | Partikel |
11 | SYM | Simbol (matematika atau ilmiah) |
12 | UNTUK | untuk |
13 | UH | Kata seru |
14 | VB | Kata kerja, bentuk dasar |
15 | VBD | Kata kerja, bentuk lampau |
16 | VBG | Kata kerja, gerund / present participle |
17 | VBN | Kata kerja, masa lalu |
18 | WP | A-kata ganti |
19 | WP $ | Kata ganti wh posesif |
20 | WRB | Adverb |
21 | # | Tanda pound |
22 | $ | Tanda dollar |
23 | . | Tanda baca akhir kalimat |
24 | , | Koma |
25 | : | Usus besar, titik koma |
26 | ( | Karakter tanda kurung kiri |
27 | ) | Karakter kurung siku |
28 | " | Kutipan ganda lurus |
29 | ' | Kutipan tunggal terbuka kiri |
30 | " | Kutipan ganda terbuka kiri |
31 | ' | Kutipan tunggal dekat kanan |
32 | " | Kutip ganda buka kanan |
Contoh
Mari kita pahami dengan eksperimen Python -
import nltk
from nltk import word_tokenize
sentence = "I am going to school"
print (nltk.pos_tag(word_tokenize(sentence)))
Keluaran
[('I', 'PRP'), ('am', 'VBP'), ('going', 'VBG'), ('to', 'TO'), ('school', 'NN')]
Mengapa penandaan POS?
Penandaan POS adalah bagian penting dari NLP karena berfungsi sebagai prasyarat untuk analisis NLP lebih lanjut sebagai berikut -
- Chunking
- Penguraian Sintaks
- Ekstraksi informasi
- Mesin penerjemah
- Analisis Sentimen
- Analisis tata bahasa & disambiguasi arti kata
TaggerI - Kelas dasar
Semua pemberi tag berada dalam paket nltk.tag NLTK. Kelas dasar dari pemberi tag ini adalahTaggerI, berarti semua pemberi tag diwarisi dari kelas ini.
Methods - Kelas TaggerI memiliki dua metode berikut yang harus diimplementasikan oleh semua subkelasnya -
tag() method - Sesuai dengan namanya, metode ini mengambil daftar kata sebagai masukan dan mengembalikan daftar kata yang diberi tag sebagai keluaran.
evaluate() method - Dengan bantuan metode ini, kami dapat mengevaluasi keakuratan tagger.
Dasar dari Pemberian Tag POS
Baseline atau langkah dasar penandaan POS adalah Default Tagging, yang dapat dilakukan dengan menggunakan kelas DefaultTagger dari NLTK. Penandaan default hanya menetapkan tag POS yang sama untuk setiap token. Pemberian tag default juga memberikan dasar untuk mengukur peningkatan akurasi.
Kelas DefaultTagger
Penandaan default dilakukan dengan menggunakan DefaultTagging class, yang mengambil argumen tunggal, yaitu tag yang ingin kita terapkan.
Bagaimana cara kerjanya?
Seperti yang diceritakan sebelumnya, semua tagger diwarisi dari TaggerIkelas. ItuDefaultTagger diwarisi dari SequentialBackoffTagger yang merupakan subclass dari TaggerI class. Mari kita pahami dengan diagram berikut -
Sebagai bagian dari SeuentialBackoffTagger, itu DefaultTagger harus mengimplementasikan metode select_tag () yang mengambil tiga argumen berikut.
- Daftar Token
- Indeks token saat ini
- Daftar token sebelumnya, yaitu sejarah
Contoh
import nltk
from nltk.tag import DefaultTagger
exptagger = DefaultTagger('NN')
exptagger.tag(['Tutorials','Point'])
Keluaran
[('Tutorials', 'NN'), ('Point', 'NN')]
Dalam contoh ini, kami memilih tag kata benda karena ini adalah jenis kata yang paling umum. Bahkan,DefaultTagger juga paling berguna saat kita memilih tag POS yang paling umum.
Evaluasi akurasi
Itu DefaultTaggerjuga merupakan dasar untuk mengevaluasi keakuratan pemberi tag. Itulah alasan kita bisa menggunakannya bersamaevaluate()metode untuk mengukur akurasi. Ituevaluate() Metode mengambil daftar token yang diberi tag sebagai standar emas untuk mengevaluasi pemberi tag.
Berikut adalah contoh di mana kami menggunakan tagger default kami, bernama exptagger, dibuat di atas, untuk mengevaluasi keakuratan subset dari treebank corpus tagged kalimat -
Contoh
import nltk
from nltk.tag import DefaultTagger
exptagger = DefaultTagger('NN')
from nltk.corpus import treebank
testsentences = treebank.tagged_sents() [1000:]
exptagger.evaluate (testsentences)
Keluaran
0.13198749536374715
Output di atas menunjukkan itu dengan memilih NN untuk setiap tag, kami dapat mencapai sekitar 13% pengujian akurasi pada 1000 entri file treebank korpus.
Memberi tag pada daftar kalimat
Daripada menandai satu kalimat, NLTK's TaggerI kelas juga memberi kita a tag_sents()metode dengan bantuan yang kita dapat menandai daftar kalimat. Berikut adalah contoh di mana kami menandai dua kalimat sederhana
Contoh
import nltk
from nltk.tag import DefaultTagger
exptagger = DefaultTagger('NN')
exptagger.tag_sents([['Hi', ','], ['How', 'are', 'you', '?']])
Keluaran
[
[
('Hi', 'NN'),
(',', 'NN')
],
[
('How', 'NN'),
('are', 'NN'),
('you', 'NN'),
('?', 'NN')
]
]
Dalam contoh di atas, kami menggunakan tagger default yang kami buat sebelumnya bernama exptagger.
Menghapus tag pada kalimat
Kami juga dapat menghapus tag pada kalimat. NLTK menyediakan metode nltk.tag.untag () untuk tujuan ini. Ini akan mengambil kalimat yang diberi tag sebagai masukan dan memberikan daftar kata tanpa tanda. Mari kita lihat contohnya -
Contoh
import nltk
from nltk.tag import untag
untag([('Tutorials', 'NN'), ('Point', 'NN')])
Keluaran
['Tutorials', 'Point']