Topik ini membahas penguraian dependensi (dependency parsing), yaitu penataan hubungan antartoken dalam kalimat sebagai pasangan head dan child. Setelah membacanya, tabel token, head, dan relasi pada keluaran spaCy dapat dibaca, pohon dependensinya dapat digambar ulang, dan pola subjek-predikat-objek dapat diambil secara terprogram.
Relasi head dan child#
Penguraian dependensi membaca struktur kalimat sebagai pohon, bukan sebagai rangkaian kata yang berdiri sendiri. Setiap token memiliki tepat satu head (induk), yaitu token yang menjadi inti hubungannya, sedangkan token yang bergantung pada head disebut child (anak). Tepat satu token menjadi akar pohon karena head-nya adalah dirinya sendiri, dan semua token lain menempel pada pohon melalui relasinya masing-masing.
Setiap relasi diberi label yang menyatakan peran child terhadap head-nya. Label nsubj pada token Dewi berarti Dewi berperan sebagai subjek dari head-nya, bukan sebaliknya, sehingga arah relasi menentukan pembacaan. Keliru membaca arah berarti menukar subjek dengan objek, dan kekeliruan semacam ini paling sering terjadi saat pohon pertama kali dibaca dari keluaran alat.
Komponen parser dalam pipeline spaCy membangun pohon ini sekaligus dengan komponen lain, sehingga objek Doc yang sama sudah membawa pohon dependensi begitu keluar dari pemanggilan nlp. Tidak ada langkah penguraian terpisah yang perlu dijalankan, dan keluarannya dapat dibaca dari atribut token tanpa konfigurasi tambahan.
Label relasi yang sering muncul#
Model bahasa Inggris spaCy menggunakan sekumpulan label dependensi yang pendek dan padat. Empat label berikut muncul pada hampir semua kalimat dan cukup untuk membaca keluaran model pada tingkat pengenalan.
| Label | Peran child | Contoh |
|---|---|---|
| nsubj | Subjek nomina dari head-nya | Dewi pada kalimat “Dewi reads” |
| dobj | Objek langsung dari head-nya | books pada “reads old books” |
| amod | Keterangan sifat pada nomina | old pada “old books” |
| punct | Tanda baca yang menempel pada head-nya | titik pada akhir kalimat |
Satu perbedaan penamaan perlu dicatat sejak awal. Skema Universal Dependencies menyebut objek langsung dengan label obj, sedangkan skema yang digunakan model bahasa Inggris spaCy menuliskannya dobj. Keduanya menyatakan relasi yang sama, tetapi kode yang menyaring label harus menyesuaikan skema model yang sedang digunakan.
Label yang pendek memudahkan penyaringan, tetapi jumlahnya jauh lebih banyak daripada empat di tabel ini, misalnya advmod untuk keterangan cara, det untuk penentu seperti artikel, dan pobj untuk objek preposisi. Untuk sebagian besar kebutuhan, empat label pada tabel sudah cukup, dan label lain dapat dicari saat muncul di keluaran. Kebiasaan yang berguna adalah membaca label bersama tag POS di sekitarnya, karena tag menyatakan kelas kata, sedangkan label menyatakan perannya terhadap head, sehingga kombinasinya memberi gambaran lengkap untuk satu token.
Membaca pohon dependensi pada spaCy#
spaCy menuliskan struktur pohon pada setiap token. Atribut token.head_ mengembalikan token induk, token.children mengembalikan iterator anak-anaknya, dan token.dep_ berisi label relasinya. Berkas berikut menguraikan satu kalimat pendek dan mencetak ketiganya dalam bentuk tabel.
import spacy
nlp = spacy.load("en_core_web_sm")
doc = nlp("Dewi reads old books.")
print(f"{'Token':<10}{'Head':<10}{'Relasi':<8}{'Anak'}")
for token in doc:
anak = ", ".join(child.text for child in token.children) or "-"
print(f"{token.text:<10}{token.head.text:<10}{token.dep_:<8}{anak}")
print()
print("Noun chunk:", [chunk.text for chunk in doc.noun_chunks])Token Head Relasi Anak
Dewi reads nsubj -
reads reads ROOT Dewi, books, .
old books amod -
books reads dobj old
. reads punct -
Noun chunk: ['Dewi', 'old books']Baris reads menyatakan bahwa head-nya adalah dirinya sendiri dengan label ROOT, sehingga reads menjadi akar pohon. Token Dewi menempel pada reads dengan relasi nsubj, sedangkan books menempel pada reads dengan relasi dobj dan membawa old sebagai anaknya dengan relasi amod. Diagram berikut menggambarkan pohon yang sama agar arah panahnya terlihat jelas.
Baris terakhir pada keluaran memperlihatkan doc.noun_chunks, yaitu frasa nomina yang dirakit parser dari pohon dependensi. Frasa old books muncul sebagai satu chunk karena books dan old terhubung langsung pada pohon. Frasa nomina hasil rakitan ini menjadi dasar ekstraksi frasa pada banyak aplikasi, misalnya pengindeksan dokumen menurut frasa kunci.
Kegunaan praktis pohon dependensi#
Pohon dependensi menjadi berguna ketika informasi strukturalnya diambil secara terprogram. Pola paling umum adalah mengambil subjek, predikat, dan objek predikat dengan menyaring token menurut label relasinya, karena ketiganya tersusun langsung pada pohon. Berikut adalah penyaringan sederhana untuk kalimat yang sama.
import spacy
nlp = spacy.load("en_core_web_sm")
doc = nlp("Dewi reads old books.")
subjek = [token.text for token in doc if token.dep_ == "nsubj"]
predikat = [token.text for token in doc if token.dep_ == "ROOT"]
objek = [token.text for token in doc if token.dep_ == "dobj"]
print("Subjek:", subjek)
print("Predikat:", predikat)
print("Objek:", objek)Subjek: ['Dewi']
Predikat: ['reads']
Objek: ['books']Keluaran tersebut menyusun ulang kalimat menjadi tiga perannya, yaitu Dewi sebagai subjek, reads sebagai predikat, dan books sebagai objek. Pola penyaringan ini digunakan pada ekstraksi informasi, sistem tanya jawab, dan pembangunan indeks, karena setiap token pada pohon dapat dilacak ke frasa lengkapnya melalui token.children dan doc.noun_chunks. Kalimat yang lebih panjang menambah cabang, tetapi cara membacanya tetap sama.
Kesalahan umum#
Kesalahan berikut muncul saat pohon dependensi dibaca atau disaring untuk pertama kalinya. Masing-masing disertai penyebab dan perbaikannya.
- Membaca arah relasi terbalik. Label mengikuti arah head ke child, sehingga nsubj pada Dewi berarti Dewi adalah subjek dari reads, bukan sebaliknya. Periksa
token.head_terlebih dahulu sebelum menyimpulkan peran sebuah token. - Menyaring label dengan string obj pada model bahasa Inggris spaCy. Skema model menuliskan objek langsung sebagai dobj, sehingga penyaringan dengan string obj menghasilkan daftar kosong. Sesuaikan string label dengan skema model yang digunakan.
- Menyamakan urutan baris dengan kedalaman pohon. Baris tabel mengikuti urutan kemunculan token dalam kalimat, bukan tingkat cabangnya. Untuk menelusuri struktur, ikuti
token.head_dantoken.childrenmulai dari akar.
Ringkasan#
- Penguraian dependensi menyusun kalimat menjadi pohon dengan tepat satu akar, dan setiap token lain memiliki tepat satu head beserta label relasinya.
- Label nsubj, dobj, amod, dan punct menutupi sebagian besar relasi pada kalimat sederhana, sedangkan
doc.noun_chunksmengeluarkan frasa nomina hasil rakitan parser. - Subjek, predikat, dan objek dapat diambil dengan menyaring token menurut
token.dep_, dan pola ini menjadi dasar ekstraksi informasi.
Referensi#
- spaCy Usage Documentation — Explosion
— Bagian Dependency parsing menjabarkan
dep_, head, children, dan noun chunk. - Speech and Language Processing, draf edisi ke-3 — Jurafsky & Martin, Stanford — Bab dependency parsing membahas notasi head, labeled dependency, dan cara membaca pohon.