Topik ini membahas pelabelan kelas kata (part-of-speech tagging), yaitu pemberian label gramatikal pada setiap token dalam teks. Setelah membacanya, perbedaan label umum pada token.pos_ dan label granular pada token.tag_ dapat dijelaskan, dan cara tagger modern menentukan labelnya dapat diuraikan secara ringkas.
Apa yang dilabeli tagger ?#
Tag kelas kata (part-of-speech tag) adalah label yang menandai peran gramatikal sebuah token, misalnya kata benda, kata kerja, atau kata sifat. Label ini menjadi fondasi bagi analisis sesudahnya. Lemmatisasi memilih aturan berdasarkan kelas kata, pengurai dependensi menyusun pohon dari kombinasi label, dan penyaringan frasa menggunakan label untuk membuang kandidat yang tidak relevan.
spaCy menuliskan label pada dua atribut sekaligus. Atribut token.pos_ mengikuti skema universal part-of-speech tags (UPOS), yaitu sekumpulan label umum yang dirancang lintas bahasa, sedangkan token.tag_ mengikuti tagset yang lebih granular untuk bahasa Inggris, yakni tagset Penn Treebank (PTB). Label UPOS yang paling sering ditemui dirangkum pada tabel berikut.
| Label | Kelas kata | Contoh |
|---|---|---|
| NOUN | Kata benda umum | table, book |
| PROPN | Nama diri | Dewi, Semarang |
| VERB | Kata kerja | read, preserve |
| ADJ | Kata sifat | old, small |
Label lain seperti DET, ADP, PRON, dan PUNCT melengkapi himpunan tersebut. Tag granular pada tag_ membagi kelas yang sama lebih rinci, misalnya membedakan kata benda tunggal dari kata benda jamak, sehingga informasi yang tersimpan lebih kaya daripada label umumnya. Kedua tingkat label ini dibaca berdampingan pada bagian berikut. Akurasi tagger pada teks bahasa Inggris umumnya tinggi karena modelnya dilatih pada korpus besar, tetapi tingkat akurasi itu tidak otomatis berpindah ke bahasa lain, sehingga pilihan model perlu mengikuti bahasa teks.
Dua tingkat label: pos_ dan tag_#
Atribut pos_ dan tag_ saling melengkapi, bukan saling menggantikan. Atribut pos_ menjawab kelas kata secara umum, sedangkan tag_ menyimpan informasi tambahan seperti bentuk lampau, bentuk jamak, atau bentuk kata bantu. Komponen lain dalam pipeline spaCy lebih banyak menggunakan tag granular ini, misalnya lemmatisator yang memilih aturannya berdasarkan tag token.
Contoh berikut menampilkan kedua atribut pada satu kalimat sederhana.
import spacy
nlp = spacy.load("en_core_web_sm")
doc = nlp("Small libraries preserve old manuscripts.")
for token in doc:
print(f"{token.text:<12}{token.pos_:<8}{token.tag_}")Small ADJ JJ
libraries NOUN NNS
preserve VERB VBP
old ADJ JJ
manuscripts NOUN NNS
. PUNCT .Pada keluaran tersebut, libraries berlabel NOUN pada pos_ dan NNS pada tag_, sedangkan preserve berlabel VERB dengan tag VBP. Kedua kolom konsisten satu sama lain, tetapi kolom tag_ membawa lebih banyak detail. Untuk membaca detail itu, spaCy menyediakan fungsi spacy.explain yang menerjemahkan tag granular menjadi deskripsi singkat, dan deskripsinya diambil dari dokumentasi tagset itu sendiri.
import spacy
for tag in ("NN", "NNS", "VB", "VBD"):
print(f"{tag} = {spacy.explain(tag)}")NN = noun, singular or mass
NNS = noun, plural
VB = verb, base form
VBD = verb, past tenseDeskripsi pada keluaran memperlihatkan perbedaan yang tidak tampak pada pos_. Kata benda tunggal dan jamak sama-sama NOUN, tetapi tag-nya berbeda, yaitu NN untuk tunggal dan NNS untuk jamak. Detail semacam inilah yang membuat tag granular lebih informatif sekaligus lebih variatif.
Cara tagger menentukan label#
Tagger modern tidak membaca kamus statis yang memetakan setiap kata ke satu label. Tagger adalah model statistik yang dilatih pada korpus beranotasi, dan keputusannya menimbang dua sumber bukti sekaligus, yaitu bentuk kata itu sendiri dan konteks di sekitarnya. Bentuk kata berkontribusi melalui akhiran serta kapitalisasi, sedangkan konteks berkontribusi melalui kata sebelum dan sesudahnya beserta label yang mungkin pada kata-kata itu.
Konteks menjadi penentu utama pada kata ambigu. Kata book dalam bahasa Inggris dapat menjadi kata benda maupun kata kerja, dan tidak ada sumber lain yang mampu membedakannya selain konteks kalimat. Berkas berikut memproses kalimat yang memuat kedua penggunaan tersebut.
import spacy
nlp = spacy.load("en_core_web_sm")
doc = nlp("Dewi will book a table and read her favourite book.")
for token in doc:
print(f"{token.i:>2} {token.text:<12}{token.pos_:<8}{token.tag_}") 0 Dewi PROPN NNP
1 will AUX MD
2 book VERB VB
3 a DET DT
4 table NOUN NN
5 and CCONJ CC
6 read VERB VB
7 her PRON PRP$
8 favourite ADJ JJ
9 book NOUN NN
10 . PUNCT .Pada keluaran tersebut, book setelah kata bantu will berlabel VERB dengan tag VB, sedangkan book setelah favourite berlabel NOUN dengan tag NN. Labelnya berbeda padahal bentuk katunya persis sama, karena model menilai konteks kedua kemunculan itu berbeda. Perhatikan pula Dewi yang berlabel PROPN bukan karena maknanya dikenal, melainkan karena pola kapitalisasi di awal kalimat mendukung tebakan nama diri.
Kesalahan umum#
Kesalahan berikut lazim terjadi saat keluaran tagger digunakan untuk pertama kalinya. Masing-masing disertai penyebab dan perbaikannya.
- Menyamakan
pos_dantag_sebagai dua nama untuk hal yang sama. Keduanya adalah skema yang berbeda dengan cakupan yang berbeda, sehingga kode yang membandingkanpos_dengan string tag seperti NNS selalu gagal. Pastikan string pembandingnya cocok dengan atribut yang dibaca. - Mengharapkan label yang andal pada teks berbahasa Indonesia. Model en_core_web_sm dilatih pada bahasa Inggris, sehingga label pada teks Indonesia merupakan tebakan berdasarkan bentuk permukaan. Gunakan model yang sesuai bahasa apabila teksnya bukan bahasa Inggris.
- Menilai tagger dari satu kata ambigu. Satu kasus tidak mewakili akurasi keseluruhan model pada teks bahasa Inggris yang umumnya tinggi. Ukur kualitasnya pada sampel beranotasi apabila keputusan sistem bergantung pada label.
Ringkasan#
- Tag kelas kata menandai peran gramatikal setiap token, dengan
token.pos_menggunakan skema UPOS dantoken.tag_menggunakan tagset granular Penn Treebank. - Tagger modern adalah model statistik yang menimbang bentuk kata dan konteksnya, sehingga book yang sama dapat berlabel VERB atau NOUN sesuai kalimatnya.
- Fungsi
spacy.explainmenerjemahkan tag granular menjadi deskripsi singkat dan membantu pembacaan saat tagset belum dikuasai.
Referensi#
- spaCy Usage Documentation — Explosion
— Bagian Part-of-speech tagging menjabarkan
token.pos_,token.tag_, dan fungsispacy.explain. - Natural Language Processing with Python — Bird, Klein & Loper, O’Reilly/NLTK — Bab penandaan membahas tagset, kata ambigu, dan peran konteks secara bertahap.