Part of Speech Tagger dan Dependency Parser Bahasa Indonesia: Syntaxnet

4 March 2017 at 14:42 | Posted in bahasa indonesia, penelitian, text processing | 6 Comments

Fungsi POS Tagger adalah memberi label jenis kata (kata benda, kata kerja dst), sedangkan dependency parser berfungsi mencari struktur tata bahasa seperti subyek, obyek dan keterkaitan antar kata (parent dan child yang bergantung pada parent).  POS tagger dan dependency parser berguna untuk banyak task NLP.

POS Tagger bahasa Indonesia masih belum banyak dan kalaupun ada lisensinya masih kurang jelas. Saya hanya menemukan dua, yang pertama dari UI http://bahasa.cs.ui.ac.id/postag/tagger  dengan lisensi creative commons (agak aneh karena setahu saya creative commons bukan untuk source code) dan lainnya INANLP dari ITB tetapi tidak tersedia bebas source code-nya (cmiiw). Lisensi ini jadi penting jika kita ingin membuat software yang komersial. Untuk dependency parser Bahasa Indonesia saya belum menemukannya.

Saat saya mempelajari Tensorflow, saya melihat library Syntaxnet yang menggunakan Tensorflow untuk POS Tagger dan dependency parser, dan ternyata sudah ada parser untuk Bahasa Indonesia. Sudah ada pretrained model  sehingga tidak perlu lagi mencari data dan melakukan training lagi. Lisensinya juga Apache 2.0 yang sangat longgar. Berikut proses instalasinya.

Pertama siapkan Linux dan install Tensorflow, terutama yang penting bagian persiapan terkait software pendukung GPU-nya (posting saya tentang menginstall tensorflow). Mungkin sebenarnya setelah persiapan  GPU, bisa saja langsung install Syntaxnet karena syntaxnet mengcompile ulang source, tapi untuk amannya, install saja keseluruhan Tensorflow.  Selanjutnya  ikuti petunjuk instalasi Syntaxnet  yang ada di: https://github.com/tensorflow/models/tree/master/syntaxnet#installation

Prosesnya cukup lama (2-3 jam)untuk menginstall Syntaxnet ini dari source code, termasuk mencompile core tensorflow lagi. Padahal saya sudah menginstall tensorflow sebelumnya. Lalu ada beberapa peringatan tentang SS3, AVX dst,  yang saya tidak tahu harus diset dimana. Waktu install Tensorflow sebelumnya, warning tersebut hilang setelah saya intsall dari source bukan binary.

Untuk mencoba  apakah instalasi berhasil, masuk ke direktori /models/syntaxnet lalu jalankan:

echo 'Rudi is eating the rice.' | sudo sh syntaxnet/demo.sh
Hasilnya:
+-- Rudi NNP nsubj
 +-- is VBZ aux
 +-- rice NN dobj
 | +-- the DT det
 +-- . . punct

Berikutnya kita akan meload pretrained untuk bahasa Indonesia, penjelasannya ada di:

https://github.com/tensorflow/models/blob/master/syntaxnet/g3doc/universal.md

Download model Bahasa Indonesia di:

http://download.tensorflow.org/models/parsey_universal/Indonesian.zip

Ekstrak  zip tersebut (kalau saya ekstrak di /models)

Untuk menjalankan parser, masuk ke direktori syntaxnet, lalu masukan perintah. Pastikan tidak ada slash setelah direktori model bahasa Indonesia ( ~/models/Indonesian bukan ~/models/Indonesian/ )

echo 'Budi makan nasi enak sekali' | sudo sh syntaxnet/models/parsey_universal/parse.sh ~/models/Indonesian

Maka hasilnya

1 Budi _ PROPN _ fPOS=PROPN++ 2 nsubj _ _
2 makan _ VERB _ fPOS=VERB++ 0 ROOT _ _
3 nasi _ NOUN _ fPOS=NOUN++ 2 dobj _ _
4 enak _ ADJ _ fPOS=ADJ++ 3 amod _ _
5 sekali _ ADV _ fPOS=ADV++ 4 advmod _

PROPN adalah proper noun, ADJ adalah adjective dst.

Sedangkan hasil dependency parser dapat dibaca: “makan” adalah ROOT dengan parent 0, “Budi” adalah subyek (nsubj) dengan parent no 2 (“makan”) dst.  Jika digambarkan dependency treenya adalah sbb.

budi_makan_nasi

Stop words untuk Bahasa Indonesia

23 July 2008 at 11:27 | Posted in bahasa indonesia, penelitian, text processing | 54 Comments

Stop words adalah kata umum (common words) yang biasanya muncul dalam jumlah besar dan dianggap tidak memiliki makna.  Stop words umumnya dimanfaatkan dalam task information retrieval, termasuk oleh Google (penjelasannya di sini).  Contoh stop words untuk bahasa Inggris diantaranya “of”, “the”.  Sedangkan untuk bahasa Indonesia diantaranya “yang”, “di”, “ke”.

Saya pernah membuat daftar stop words  bahasa Indonesia untuk tugas salah satu matakuliah. Tujuannya waktu itu bukan untuk information retrieval, tapi untuk klasifikasi.  Saya gunakan stop words untuk mengurangi jumlah kata yang harus diproses.

Saya membuat daftar stop words dengan cara mengumpulkan kata paling banyak muncul pada corpus (saya menggunakan beberapa ratus berita Kompas),  setelah diurutkan kemudian diperiksa secara manual satu persatu.  Hasil lengkapnya dapat didonwload di:  http://web.archive.org/web/20100104090147/http://fpmipa.upi.edu/staff/yudi/stop_words_list.txt

Karena daftar itu dibuat secara manual dan untuk task klasifikasi, ada beberapa kata yang mungkin dapat diperdebatkan apakah stop word atau bukan, misalnya  “utara”, “senin”, “gedung” dan sebagainya.  Jadi silahkan diedit sesuai kebutuhan.  Seingat saya sih daftar tersebut sudah diurutkan dari kata yang frekuensinya paling tinggi.

Daftar stop words untuk bahasa lain (23 bahasa) dapat dilihat di: http://www.semantikoz.com/2008/04/02/free-stop-word-lists-in-23-languages/

Kelas Kata (Word Class) Bahasa Indonesia untuk POS Tagger

7 July 2008 at 18:26 | Posted in bahasa indonesia, penelitian, text processing | 21 Comments

Update Mar 2017: Saat ini sudah ada pos tagger bahasa Indonesia, walaupun kelas katanya tidak selengkap jika melihat Tata Bahasa Indonesia. Saya bahas di posting ini.

Setelah googling, ternyata sulit juga mencari informasi mengenai kelas kata bahasa Indonesia.  Apalagi corpus yang sudah diberi tag atau software Part of Speech (POS) Tagger-nya (atau saya yang salah mencarinya ya?).  Satu-satunya yang saya peroleh adalah dokumen TA seorang mahasiswa UI. Kondisi ini termasuk menyedihkan untuk bahasa yang digunakan oleh sekitar 200 juta orang dan dimengerti di beberapa negara (Malaysia, Singapura, Brunei).

Pemberian tag kelas-kata pada dokumen atau kalimat bermanfaat untuk berbagai hal: information retrieval,  language generator, information extraction, summarization dan machine translation.  Berikut adalah contoh kalimat yang telah diberi tag: “Anwar/NNP meninggalkan/VB Kedubes/NN Turki/NNP”.  Mengikuti penaamaan corpus Penn Treebank, NNP adalah proper noun, VB kata kerja, NN adalah kata benda.

Daripada hanya mengeluh , saya coba membuat ringkasan mengenai kelas kata bahasa Indonesia berdasarkan dua buku. Saya fokuskan terhadap aturan untuk setiap kelas kata karena inilah yang dibutuhkan sofware tagger untuk corpus yang sedang saya kumpulkan. Beberapa aturan yang saya perkirakan jarang muncul juga dihilangkan.

Pengembangan di tahap awal adalah pembuatan POS-tagger berdasarkan aturan (ruled-based), kemudian dilanjutkan dengan membuat POS-tagger yang menggunakan Hidden Markov Model.  Rencananya sih kedua tagger ini akan dijadikan open source.

Berikut adalah ringkasannya:

1. Kata Benda
Menurut [KER88][KOS04], kata benda dapat ditentukan dari dua hal, bentuk dan ciri. Dari bentuk, kata yang mengandung ke-an, pe-an, pe-, -an, ke-,  -at, -in, -wan, -wati, -isme, -isasi, -logi, -tas dapat dicalonkan sebagai kata benda. Misalnya “kebakaran”, “pembunuhan”, “karyawan”.  Sedangkan berdasarkan ciri, ciri utama kata benda adalah dapat diperluas dengan “yang”+ kata sifat,  misalkan “sinar yang terang”.  [KOS04] menambahkan ciri:  diawali “bukan” dan tidak diawali “tidak”, misalnya “bukan niatnya”.

2. Kata Kerja
Menurut [KER88] berdasarkan bentuk, kata yang mengandung  me-, ber-, -kan, di-, -i, ter- dapat dicalonkan sebagai kata kerja. Misalnya “berlari”, “menyayi”.  Sedangkan berdasarkan ciri, ciri utama kata kerja adalah kata yang dapat diperluas dengan “dengan”+kata sifat. Misalnya “tidur dengan nyenyak”.  [KOS04] menambahkan ciri: tidak dapat didahului kata “paling”, dapat didahului “akan”, “sedang”, “sudah” dan “tidak”. Ciri-ciri dari [KOS04] bukan ciri utama karena tidak eksklusif untuk kata kerja. Misalnya “sudah harum” dengan “harum” adalah kata sifat.

3. Kata Sifat
Menurut [KER88] kata sifat adalah segala kata yang dapat mengambil bentuk se + reduplikasi + nya, serta dapat diperluas dengan: “paling”, “lebih” dan  “sekali”. Misalnya “seteliti-telitinya”, “sebagus-bagusnya”, “paling cepat”, “lebih kuat”, “sakit sekali”.

4. Kata Keterangan
Kata keterangan adalah kata yang menjelaskan kata yang lain. [KER88] membagi kata keterangan menjadi 13 jenis: Keterangan kualitatif: “ia berjalan perlahan-lahan”; Keterangan waktu: “sekarang”, “nanti”, “kemarin”, “kemudian”, “sesudah itu”, “lusa”, “sebelum”, “minggu depan”; Keterangan tempat: “di sini”, “di situ”, “ke sana”, “ke mari”; Keterangan modalitas: “memang”, “pasti”, “sungguh”, “tentu”, “tidak”, “bukan”, “benar”, “sebenarnya”, “mungkin”, “rasanya”, “mudah-mudahan”, “hendaknya”, “jangan”,”mustahil”; Keterangan aspek: “sedang”, “sementara”, “sudah”, “telah”, “sering”, “biasa”; Keterangan derajat: “amat”, “hampir”, “kira-kira”, “sedikit”, “cukup”, “hanya” “satu kali”; Keterangan kesertaan: “bersama”; Keterangan syarat: “jika”, “seandainya”; Keterangan perlawanan: “meskipun”, “meski”,”jika”; Keterangan sebab: “sebab”, “karena”, “oleh karena”; Keterangan akibat: “sehingga”; Keterangan tujuan: “supaya”, “agar”, “untuk”, “hendak”; Keterangan perbandingan: “sebagai”, “seperti”, “bagaikan”; Keterangan perwatasan: “kecuali”, “hanya”.

5. Kata Depan
Kata depan adalah kata yang digunakan untuk merangkaikan kata atau bagian kalimat [KER88]. Kata-kata depan terpenting adalah  [KER88][KOS04]: “di”, “ke”, “dari”, “pada”, “akan”, “sejak”, “dengan”, “oleh”, “demi”, “guna”, “untuk”, “buat”, “berkat”, “antara”, “tentang”, “hingga”, “menurut”, “menghadap”, “mendapatkan”, “melalui”, “menuju”, “menjelang”, “sampai”, “atas”, “antara”, “bersama”, “beserta”, “sekeliling”, “selama”, “sepanjang”, “mengenai”, “terhadap”, “bagaikan”, “daripada”, “kepada”, “oleh sebab”, “sampai dengan”, “selain itu”.

6. Kata Sambung
Kata sambung adalah kata yang menghubungkan kata-kata , bagian kalimat atau kalimat  [KER88]. Beberapa kata sambung menurut [KER88]: “dan”, “lagi”, “lagipula”, “serta”, “tetapi”, “akan tetapi”, “melainkan”, “apabila”, “ketika”, “bila”, “demi”, “sambil”, “sebelum”, “sedang”, “sejak”, “selama”, “semenjak”, “sementara”, “seraya”, “setelah”, “sesudah”, “waktu”, “supaya”, “agar”, “karena”, “karena itu”, “sehingga”, “sampai”, “jika”, “andaikan”, “asal”, “asalkan”, “seandainya”, “atau”, “maupun”, “seperti”, “bagaikan”, “meskipun”, “biarpun”, “maka”, “adapun”, “akan”, “yakni”, “umpama”, “bahwa”.  Ada juga kalimat yang tidak memerlukan kata sambung. Misalnya “Dia datang, kami berangkat”.

7. Kata Ganti
Kata ganti adalah segala kata yang dipakaikan untuk mengganti kata benda [KER88]. Menurut [KER88] kata ganti dapat dibagi menjadi enam jenis. Kata ganti orang: “saya”, “aku”, “dia”, “kami”, “kita”, “kamu”, “mereka”, “anda”; Kata ganti empunya: -mu, -ku, -nya (“bukuku”, “bukumu”, “bukunya”); Kata ganti penunjuk: “ini”, “itu”, “di sana”, “di sini”, “di situ”; Kata ganti penghubung: “yang”, “tempat” (“kotak yang berisi kalung”, “kota tempat kita bertemu”); Kata ganti penanya: “apa”, “siapa”, “mana”, “mengapa”, “berapa”, “bagaimana”, “bilamana”, “kenapa”, “betapa”. Kata ganti tak tentu: “masing-masing”, “siapa-siapa”, “seseorang”, “para”, “barang”, “sesuatu”, “salah satu”, “barang siapa”.

8. Kata Bilangan
[KER88]  membagi kata bilangan menjadi empat jenis: Kata bilangan utama: “satu”, “dua”, “ribu”, “juta”, “miyar”, “triliun” ; Kata bilangan tingkat “pertama”, “kedua”; Kata bilangan tak tentu: “beberapa”, “segala”, “semua”, “tiap-tiap”, “sebagainya”; Kata bilangan kumpulan: “kedua”, “kesepuluh”, “bertiga”, “bertujuh”.

Kata Tugas
Dapat dilihat bahwa kata keterangan, kata depan dan kata sambung seringkali sulit ditentukan karena saling tumpang tindih. Oleh karena itu  [KER88]  mengusulkan kelas kata pengganti yaitu kata tugas. Jadi semua kata yang tidak masuk ke dalam kata benda, kerja dan sifat akan masuk ke dalam kelas kata tugas ini.

Penentuan kelas kata yang tidak jelas seperti ini sebenarnya adalah masalah utama yang harus dipecahkan aplikasi POS-Tagger.

Mungkin perlu diteliti apakah kata keterangan, sambung, depan memang dapat diganti dengan kata tugas. Tentunya berdasarkan kinerja untuk task tertentu, misalnya untuk summmarization atau information retrieval.

Referensi:
[KER84] Keraf, Goris (1984), “Tatabahasa Indonesia”, Nusa Indah.
[KOS04] Kosasih, E (2004), “Kompetensi Ketatabahasaan dan Kususastraan”, Yrama Widya, Cetakan 2.

Create a free website or blog at WordPress.com.
Entries and comments feeds.