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

Advertisements

Software untuk Analisis Sentimen

30 August 2012 at 19:14 | Posted in text processing, twitter | 16 Comments

Melanjutkan posting   https://yudiwbs.wordpress.com/2011/12/26/analisis-twee-analisis-opini-sentimen/  tahun ini  promotor saya, saya dan Lia mengajukan tema analisis sentimen di microblog untuk  hibah penelitian desentralisasi ITB dan diterima. Kesempatan bagus untuk membuat software  untuk basis ekperimen dan  nantinya  bisa digunakan oleh  masyarakat umum.  Kapan lagi buat prototype dibayar 🙂  Lagipula  akan bermanfaat  untuk disertasi saya.

Untuk tahap awal ini, software masih berperan sebagai executive information system yang menampilkan beberapa ukuran statistik beserta visualisasinya.  Belum dilakukan  tweet mining  untuk menemukan hal-hal penting yang  tersembunyi (target berikutnya).  Prinsipnya ini masih versi  dasar yang nanti akan dilengkapi sedikit demi sedikit.

Ada tiga  komponen penyusun software ini:  crawler (pengumpul data tweet), pemroses data (preprocessing, klasifikasi, agregasi) dan terakhir visualiasi. Berbeda dengan software  yang saya buat sebelumnya, software ini berbasis desktop (Java-Swing), bukan web atau mobile.  Alasannya, pengembangan aplikasi desktop lebih cepat daripada web dan mobile, terutama untuk user interface yang kompleks (plus saya tidak suka javascript hehe).  Sedangkan kelemahan aplikasi desktop adalah komputer harus terus menerus hidup  saat melakukan crawling dan crawling akan berhenti jika  koneksi internet putus.  Tapi nanti  bisa dibuat hybrid, crawling dilakukan di server dan datanya ‘dilempar’ ke client  untuk kemudian diproses. Sedangkan untuk mobile app, crawling+proses dilakukan di server dan baru setelah itu datanya dilempar ke mobile app secara on demand.

Setelah sebulan  mencoba-coba, mumpung  libur lebaran, akhirnya aplikasinya mulai terbentuk (gambar bawah).  “Indosat”  dipilih menjadi  keyword.

Warna merah adalah jumlah  tweet negatif, biru positif dan abu-abu adalah selisihnya.  Satuan waktu dapat dipilih mulai jam, hari, bulan dan tahun demikian juga dengan rentang waktu. Gambar diatas untuk satuan “jam” (12 Agt sampai 28 Agt) sedangkan gambar bawah untuk satuan  “hari” pada rentang yang sama:

Terlihat puncak keluhan terjadi pada tanggal  25 Agustus.  Pengguna dapat melihat lebih detil apa yang terjadi di tanggal 25 tersebut dengan mengklik point pada chart. Setelah klik maka  akan ditampilkan  keywords  dan tweet-nya.  Keywords memang masih belum ideal,  kata  “demi” dan “tidak”  harusnya bukan keyword walaupun kata “pending”, “jaringan” dan “lambat” sudah tepat dijadikan keyword.

Masih banyak yang dapat ditambahkan:  keyword tracking, kredibilitas informasi, demografi, lokasi, clustering, network analysis,  event detection, visualiasi dsb.   Belum lagi aplikasi untuk mobile-nya. Jadi masih  banyak yang bisa dikerjakan untuk senang-senang 🙂

Aplikasi Android untuk Memonitor Lalulintas Bandung berdasarkan Tweet

26 April 2012 at 09:04 | Posted in android, text processing, twitter | 12 Comments

Sebelum  pergi ke luar rumah, biasanya saya memeriksa kondisi lalulintas Bandung dengan dua cara:  melihat web cam di bandung247.com dan mencari tweet dengan keyword #lalinbdg.  Sayangnya webcam di bandung247   masih terbatas,   belum ada webcam untuk Jalan Setiabudhi, Tamansari, Siliwangi, Sukajadi dan Cihampelas yang merupakan jalur utama saya pulang-pergi ke kampus.

Untuk twitter sendiri, hashtag #lalinbdg telah menjadi standard defacto bagi  pengguna twitter yang ingin melaporkan kondisi lalulintas.  Informasi terupdate sangat cepat.  Jika ada kemacetan, kecelakaan dan banjir,  maka hampir secara  real time akan  muncul.

Tetapi  mencari informasi menggunakan twitter-client atau melalui web twitter.com tidak menyenangkan. Banyak terjadi duplikasi, yang  disebabkan oleh  account seperti infobdg, bandungtraffic, dan pengguna yang meretweet.    Lalu jika membuka situs twitter.com  di smartphone,  fungsi search justru ada di bagian paling bawah.   Sedangkan jika menggunakan  twitter client, banyak fitur-fitur yang  sebenarnya saya tidak perlukan. Saya hanya butuh search saja, bukan melihat timeline, post dsb.

Solusinya saya buat app android yang khusus untuk menampilkan tweet seputar informasi lalulintas Bandung melalui hashtag #lalinbdg.  Kelebihan aplikasi ini adalah: pengurangan duplikasi, sangat simple karena hanya punya satu fungsi:search, dan ada rangkuman sehingga informasi lebih mudah dilihat saat di kendaraan. Berikut adalah contoh snapshotnya.

Jika ada yang berminat (Android 2.2 keatas), silahkan download di: https://play.google.com/store/apps/details?id=edu.upi.cs

Social Network Analysis berdasarkan Reply Tweet Artis

27 February 2012 at 19:42 | Posted in penelitian, text processing, twitter | 10 Comments

Hari  ini saya mencoba library nodexl (nodexl.codeplex.com) sekaligus  mengeksplorasi tweet  para artis yang telah saya kumpulkan mulai awal Feb 2012.  Tweet artis dipilih  karena mereka  sudah terbiasa diliput publik sehingga diasumsikan  lebih menerima  jika  dieksplorasi datanya — semoga 🙂 .  Alasan lain adalah tweet mereka banyak direspon dan  sudah dikenal masyarakat.

Visualisasi social network bertujuan menggambarkan hubungan antar unit.   Untuk Twitter, hubungan antar account dapat berbentuk banyak hal, mulai dari hubungan follower/friend (paling populer), retweet, favourite, mention, reply dan sebagainya.    Untuk kesempatan ini saya akan menggunakan hubungan reply yang memperlihatkan adanya komunikasi atau pembicaraan antara dua account.  Asumsi saya (perlu pembuktian nanti), reply dan mention adalah hubungan kuat antara dua account twitter. Retweet atau favourite bisa dilakukan dengan satu tombol dengan mudah, tapi untuk me-reply pengguna harus mengetikkan sesuatu.

Berikut adalah visualisasinya, semakin tebal garis berarti semakin banyak si-artis me-reply. Minimal ada tiga jumlah reply, kurang dari itu tidak digambarkan. Titik biru adalah artis (diambil 100 artis dengan follower terbesar), titik hitam adalah account Twitter lain. Data yang digunakan adalah tweet dari tanggal 1 Feb sampai dengan 21 Feb 2012.  Klik gambar lalu zoom  kalau masih tidak jelas.

Soc. Network Artis berdasarkan reply

Catatan yang perlu diingat sebelum dibaca lebih lanjut:   (1) artis dalam artikel ini  didefinisikan sebagai  100 artis dengan follower  tertinggi. (2) tweet yang digunakan berada dalam periode satu bulan sehingga  bisa jadi hubungan yang ada  bersifat  sementara. (3) tentu ada media lain yang digunakan selain melalui tweet, misalnya SMS, DM, FB, email, BBM, messenger dsb yang  tentunya tidak tertangkap dalam visualiasi ini.

Beberapa hal menarik dari  visualiasi di atas:

  • Dua account yang paling sering menggunakan reply adalah @ti2DJ dan @erdiAN_aJI.  Jumlah reply terbesar dipegang  oleh @ti2DJ dengan 26 reply ke sebuah account (anaknya?).  Ini menunjukkan kedua artis ini aktif  menggunakan  twitter sebagai media  komunikasi dua arah atau lebih.
  • Di sisi lain, tidak semua account menggunakan Twitter untuk komunikasi, atau kalaupun ada hanya terbatas ke beberapa orang saja.  Mungkin mereka  lebih memilih menggunakan DM,  SMS atau  messenger? Lagipula dengan jumlah follower besar, wajar kalau mereka lebih berhati-hati.   Sebagai contoh @aqi_alexa hanya terhubung dengan 3 orang, dengan yang terkuat adalah @aud33y (istri).
  • Dari sisi reply via tweet, hubungan antar sesama artis ternyata tidak terlalu dekat.  Kecuali @ti2DJ yang terhubung dengan 8 artis,  artis lain tidak terlihat atau hanya sedikit  terhubung dengan sesama artis.  Ada beberapa yang justru terhubung kuat  dengan ‘orang biasa’  (bukan teman dan memiliki follower sedikit)  yang tidak terkait dengan bidang keartisan.  Informasi ini dapat  digunakan untuk melihat hal yang sedang diminati oleh  artis tersebut.
  • Account @dahsyatnyaolga dan @jess_iskandar sepertinya  artis yang paling  punya hubungan yang kuat dengan  penggemar fanatik. Misalnya dengan @salvia_cumaOLGA, @Icha_LoveOlga, @EmiLiaCyankOLGA dan lainnya.

Setelah mencoba-coba nodeXL dan data artis ini selama satu hari,  berikut adalah beberapa hal yang saya peroleh:

  • Kekuatan NodeXL adalah mudah dipelajari dan  mudah digunakan karena berbasis Excel.  Powerfull kalau dikombinasikan dengan SQL (jalankan query di HeidiSQL, copy paste hasilnya ke NodeXL) .  Tapi masih terlalu rumit untuk diserahkan ke enduser, dan hanya jalan di Windows (non web). Gambar yang dihasilkan juga masih harus digeser-geser manual supaya lebih jelas.
  • Menarik kalau ditambahkan content analysis dari komunikasi antara account.  Idealnya  garis yang menghubungkan dua account  saat diklik dapat menampilkan rangkuman pembicaraan (keywords), sentimennya, dan juga dapat di drill down sampai  ke  tweet mentah.
  • Perlu aspek temporal. Bagaimana kekuatan hubungan dua account dari waktu ke waktu?  Mungkin ada yang menguat (menebal kalau di gambar) saat mengerjakan proyek bersama, mungkin ada juga yang tiba-tiba dari kuat lalu menghilang  (putus/bertengkar).  Akan bagus  kalau untuk satu account dapat di-play selama 1 tahun misalnya sehingga terlihat  pergerakan hubungannya dengan account lain.
  • Perlu tools untuk melihat sekilas isi sebuah account. Saat ini langkah manual yang saya lakukan adalah: melihat garis yang tebal yang menandakan hubungan yang kuat. Lalu  lihat siapa,  copy-paste di Twitter untuk dicari, lihat deskrpsi dan tweet orang tersebut, dan googling jika diperlkukanuntuk menentukan kira-kira dia siapa.  Akan lebih enak kalau ada tools yang membantu semua proses itu. Yap saya memang pemalas 🙂

Data yang dianalisis pada posting ini adalah  tweet para artis. Selain data ini, saya juga mengumpulkan tweet dari orang lain yang berkaitan dengan artis (mention).  Jumlahnya  tentu lebih besar, mungkin lebih menarik lagi nanti hasil analisisnya.

Ekstraksi Informasi: Named Entity Recognition

7 February 2012 at 09:08 | Posted in text processing | 4 Comments

Name Entity Recognition (NER) atau Name Entity Recognition and Classification (NERC)  adalah salah satu komponen utama dari information extration yang bertujuan untuk mendeteksi dan mengklasifikasikan named-entity pada suatu teks. NER umumnya digunakan untuk mendeteksi nama orang, nama tempat dan organisasi dari sebuah dokumen, tetapi dapat juga diperluas untuk identifikasi gen, protein dan lainnya sesuai kebutuhan.

Contoh  named entity  dalam suatu kalimat:

19.55Banjir setinggi 80-100 cm di Jln yos sudarso, dekat pelabuhan 1 Cirebon, hati2 pengendara“

Setelah proses NER dijalankan, akan didapat named-entity (NE) atau sering disebut  mention beserta tipenya: “19:55” bertipe waktu; “banjir”  bertipe kejadian; “80-100cm” bertipe ukuran “Jln. yos sudarso”, “pelabuhan 1” dan “Cirebon”  bertipe  lokasi.  Dari contoh di atas dapat dilihat bahwa fungsi dari NER adalah mendeteksi kata atau kumpulan kata yang merupakan entitas dan mengkategorikan kata tersebut ke dalam tipe yang sesuai

NER bermanfaat dalam banyak aplikasi NLP (Natural Language Processing) seperti question-answering, rangkuman dan sistem dialog.  NER juga berkaitan task information  extraction lainnya seperti  dengan relation detection,  event detection dan temporal analysis.

Ada dua jenis ambiguitas yang dapat ditemui NER. Pertama kata yang sama dapat berarti dua entitas yang berbeda. Misalnya kata Soekarno dapat berarti presiden pertama Indonesia, atau nama belakang seorang seniman (Enrico Soekarno),  keduanya entitas berbeda walaupun tipenya sama (orang/person).  Jenis ambiguitas  kedua adalah nama yang sama tapi tipe berbeda. Contohnya adalah Bung Karno  sebagai stadion dengan Bung Karno sebagai orang.  Ambiguitas umumnya ditangani dengan menggunakan kamus.

Deteksi named entity  dapat dilakukan dengan melihat pola kata disekitarnya. Misalnya frasa yang didahului oleh kalimat “pergi ke … “ atau “datang dari … “ kemungkinan besar adalah named entity bertipe lokasi. Contoh “pergi ke Bandung”  dan “datang dari Amerika Serikat”.   Tentu pola ini sangat banyak kombainasinya sehingga cara manual kurang feasible. Seiring dengan makin banyaknya data tersedia, machine learning dapat digunakan untuk mempelajari pola secara otomatis dan melakukan prediksi label kategori.

NER dapat diselesaikan dengan pelabelan urutan kata statistik (statisctical sequence-labeling) yang mendeteksi batas atau segmen  dan tipe dari named-entity.  Fitur yang dapat digunakan untuk learning antara lain:  shape (uppercase atau lowercase, penggunaan angka),  kata dikiri dan dikanan, jenis kata, apakah kata ada di dalam kamus atau gazetter,  predictive words dan N-Gram.  Setelah fitur dikumpukan, pelabelan dapat diselesaikan dengan menggunakan Hidden Markov Model atau Maximum Entropy Model.

-bersambung-

Sumber: Jurafsky, D. and Martin, J. “Speech and language processing”, Prentice Hall, 2008.

Pengguna Twitter Indonesia dengan Follower Terbanyak

4 January 2012 at 16:29 | Posted in penelitian, text processing, twitter | 12 Comments

Update: 27 Feb 2012, analisis keterkaitan account artis berdasarkan reply ada di posting ini

Beberapa hari ini saya mulai mengumpulkan secara otomatis data mengenai pengguna Twitter, khususnya pengguna dari Indonesia.   Tentunya ini data sementara dan mungkin saja ada yang terlewat, nanti akan diupdate sejalan dengan makin lengkapnya data.

Besarnya follower memang belum tentu berbanding lurus dengan kemampuan mempengaruhi (influence),  tapi tetap merupakan modal penting. Rencana kedepan adalah menganalisis secara lebih mendalam  hubungan antar account berdasarkan content (tweet).

Berikut adalah 50 account Twitter dengan follower terbanyak (data Januari 2012).  Tiga teratas adalah Sherina Munaf,  Agnes Monica dan detik.com.  Menarik adalah account non personal seperti @tweetramalan, @pepatah  yang bisa masuk ke 10 besar.  Satu atlit yang masuk ke 10 besar adalah Irfan Bachdim.

User Name

Nama

followers_count

@sherinamunaf Sherina Munaf

2370152

@agnezmo Agnes Monica

2010853

@detikcom detikcom

1664032

@vidialdiano Vidi Aldiano

1659567

@TweetRAMALAN Ramalan Indonesia

1642051

@radityadika raditya dika

1624734

@Poconggg ariefmuhammad

1579399

@pepatah Denny Ch Pratama

1574060

@IrfanBachdim10 Irfan Bachdim

1499464

@afgansyah_reza afgansyah reza

1425980

@bepe20 •Bambang Pamungkas•

1389649

@sule_prikitw sule_prikitiew

1365260

@cinema21 cinema21

1273892

@Metro_TV METRO TV

1244616

@LunaMaya26 luna maya

1243724

@shireensungkar shireen sungkar

1162978

@olla_ramlan ollaramlan

1122601

@SoalCINTA Denny JA_soalCINTA

1008854

@MarioTeguhWord Mario Teguh Quotes

993259

@MotivatorSuper Motivator Super

989393

@indrabektiasli bekti indratomo

970274

@nikita_willy nikita purnama willy

874585

@desta80s Deddy Mahendra Desta

842057

@kompasdotcom KOMPAS.com

833448

@KamusCewek Kamus Cewek

803361

@bismakarisma Bisma Karisma ?

752099

@tvOneNews tvOne WebNews

726320

@OVJ_Trans7 OVJ Trans 7

710756

@TweetKlik Tweet Klik

690740

@TheHitsTransTV The Hits

676947

@indraherlambang indra herlambang

675835

@AdrieSubono Adrie Subono

673247

@morganoey Morgan Oey

642491

@sarseh sarah sechan

622100

@indybarends indy barends

620848

@thalitalatief thalitalatief

615722

@gadiiing Gading Marten

600416

@tantrikotak tantri syalindri

596977

@FaktanyaAdalah Faktanya ?dalah™

580527

@widikidiw ™ |?\??????/??|?

580489

Sedangkan untuk  200 teratas, komposisi jenis pengguna twitter adalah sebagai berikut.  Terlihat bahwa account yang mendominasi adalah   account yang berkaitan dengan dunia hiburan dan  kalimat-kalimat motivasi, joke, kata mutiara.

Jenis

Jumlah

Pepatah/kata mutiara/joke

53

Penyanyi

30

Artis/Aktor

30

Presenter/Host

21

Acara TV

9

Pelawak

8

Atlit

7

Berita

7

Penulis

4

Perusahaan

4

Pemerintah

3

Pemusik

3

sutradara/produser film

2

Produk

2

Dokter

2

Entertaint lainnya

2

Situs non berita (kaskus etc)

2

Motivator

1

Pengusaha

1

Pengusaha

1

Fans

1

Penari

1

Politikus

1

Tempat/Lokasi

1

Seniman

1

Model

1

Berikut adalah rincian siapa saja yang masuk 10 besar  untuk 5  kategori teratas

Kategori: kata mutiara/pepatah/joke

Twitter ID

Nama

followers_count

@TweetRAMALAN Ramalan Indonesia

1642051

@pepatah Denny Ch Pratama

1574060

@SoalCINTA Denny JA_soalCINTA

1008854

@MarioTeguhWord Mario Teguh Quotes

993259

@MotivatorSuper Motivator Super

989393

@KamusCewek Kamus Cewek

803361

@TweetKlik Tweet Klik

690740

@FaktanyaAdalah Faktanya ?dalah™

580527

@pemulihanjiwa Hatiku Tenang

533635

@NasihatSahabat Kata Bijak & Nasihat

523662

Kategori: Penyanyi

Twitter ID

Nama

followers_count

@sherinamunaf Sherina Munaf

2370152

@agnezmo Agnes Monica

2010853

@vidialdiano Vidi Aldiano

1659567

@afgansyah_reza afgansyah reza

1425980

@bismakarisma Bisma Karisma ?

752099

@morganoey Morgan Oey

642491

@tantrikotak tantri syalindri

596977

@widikidiw ™ |?\??????/??|?

580489

@armandmaulana armand maulana

539236

@rafaell_16 Rafael Tan

491466

Kategori: Artis/Aktor

Twitter ID

Nama

followers_count

@LunaMaya26 luna maya

1243724

@shireensungkar shireen sungkar

1162978

@nikita_willy nikita purnama willy

874585

@SandraDewi88 Sandra Dewi

566592

@t_ORASUDI_ro tora sudiro

523023

@Bellaudya829 Laudya cynthia bella

404641

@CUTTARYtweet Cut Tary

393496

@juliaperrez JULIAPEREZ / JUPE

382042

@chelseaolivia92 Chelsea Olivia

350585

@WulanGuritno Wulan Guritno

337107

Kategori: Presenter / Host

Twitter ID

Nama

followers_count

@indrabektiasli bekti indratomo

970274

@desta80s Deddy Mahendra Desta

842057

@indraherlambang indra herlambang

675835

@sarseh sarah sechan

622100

@indybarends indy barends

620848

@thalitalatief thalitalatief

615722

@gadiiing Gading Marten

600416

@vincentrompies vincent ryan rompies

554440

@omeshomesh ananda omesh

398730

@dahsyatnyaolga Olga Syahputra

359914

Kategori: Acara TV non berita.

Terlihat TransTV adalah perusahaan TV yang paling sukses dengan menempatkan 6  acaranya pada 10 besar.

Twitter ID

Nama

followers_count

@OVJ_Trans7 OVJ Trans 7

710756

@TheHitsTransTV The Hits

676947

@dahSyatMusik dahSyat

555197

@onlinetranstv online transtv

448699

@inserttranstv informasi selebriti

388146

@InboxSCTV_ Inbox SCTV

336829

@KickAndyShow Kick Andy Show

306330

@DeRingSTransTV Derings Trans TV

184215

@cintacenatcenut Cinta Cenat Cenut II

169110

Analisis Tweet: Opini atau Sentimen

26 December 2011 at 19:49 | Posted in penelitian, text processing, twitter | 36 Comments

Twitter seringkali digunakan untuk ‘curhat’ mengenai sesuatu hal, baik memuji ataupun mencela. Tentunya ini punya potensi besar bagi perusahaan yang ingin mengetahui feedback masyarakat untuk merk dan layanan mereka demikian juga  partai politik atau politikus yang ingin mengukur tingkat popularitas mereka. Analisa ‘curhat’ ini dikenal dalam dunia pemrosesan teks sebagai analisa opini atau sentimen (opinion analysis atau sentiment analysis). Opini artinya adalah pandangan subyektif seseorang tentang suatu hal.

Ada beberapa task utama dalam analisis opini, diantaranya:

  1.  Menentukan tweet berisi opini atau tidak. Contoh bukan opini: “Hari ini saya belanja di supermarket X”. Sedangkan contoh opini adalah “Pelayanan kasir supermarket X tidak ramah dan lambat”.
  2. Menentukan apakah opini tersebut adalah opini negatif atau positif. Contoh opini positif   “Supermarket X bersih, enak belanja disana”. Sedangkan contoh opini negatif  bisa dilihat pada contoh no 1.
  3. Apa yang menjadi topik dari opini? Misalnya pada contoh no 1, yang menjadi topik adalah “layanan kasir”  sedangkan pada contoh no 2 yang menjadi topik adalah “kebersihan”

Dengan cara manual, analisa opini ini bisa saja dilakukan. Misalnya memonitor berita-berita di media masa.  Tapi untuk data tweet, cara manual tidak mungkin bisa dilakukan. Ini karena jumlah datanya yang sangat besar dan terus mengalir. Misalnya untuk tweet berbahasa Indonesia saja diperkirakan ada aliran 6 juta tweet per hari (2010). Disinilah peranan text processing, yang secara otomatis dapat  memproses data.

Sebulan yang lalu saya mengadakan eksperimen kecil untuk analisis opini. Tentunya detil teknis tidak saya tulisan di posting ini dan nanti bisa  dibaca di papernya. Data yang saya gunakan adalah tweet yang mengandung  kata  dua operator GSM di Indonesia. Saya kumpulkan dari bulan Agustus 2010 dan masih berlangsung sampai sekarang. Tapi untuk eksperimen ini, saya hanya gunakan sebagian data saja (35 ribuan tweet).

Beberapa hal  dari hasil eksperimen:

  • Dari tweet yang mengandung kata operator GSM tersebut, 65% mengandung opini.
  • Dari tweet opini tersebut, opini negatif mencakup 77%. Ini  masuk akal  karena orang biasanya saat puas diam, dan saat kesal menulis tweet negatif.
  • Kata-kata kunci (keyword)  yang ditemukan oleh software adalah: “emosi, mahal, bb ,<makian>, aneh,  jaringan, pulsa, provider, bis, paket, sms,  sinyal”.

 

Jika dibuat grafik, bentuknya seperti ini

 

Garis biru memperlihatkan opini negatif, sedangkan garis merah adalah opini positif.  Sumbu x adalah hari.  Terlihat opini negatif  mendominasi.  Analisis keyword juga dapat dilakukan per hari. Misalnya pada tanggal 9 September 2010,  satu hari menjelang  idul fitri, salah satu keyword yang menonjol adalah “cs”, yaitu customer support.  Contoh tweetnya:

“Susah bgt sih hubungin CS  [xxx]  ..sibuk2 mlulu”

 “tadi gua sempet nyolot22an sama CS nya [xxxx]   HAHAHA songong bet sih lau neng”

Ini mungkin disebabkan jumlah CS yang terbatas di  menjelang  idul fitri.

 

Tentunya masih banyak lagi hal-hal yang bisa digali, tapi  perlu eksperimen dan studi lebih lanjut, dan itu yang sedang saya lakukan bersama beberapa mahasiswa bimbingan saya   🙂

 

 

Text Mining untuk bidang Intelijen

22 November 2009 at 14:57 | Posted in text processing | 8 Comments

Baru-baru ini media (terutama US) diramaikan dengan Kasus Major Hasan yang menembak hingga tewas 13 orang di Fort Hood. Yang menarik dari kasus ini, dinas rahasia Amerika telah menyadap email antara Major Hasan dengan seseorang dari Yaman dari tahun yang lalu.

Hal ini mengingatkan saya pada kejadian setahun yang lalu. Waktu itu saya mendapat  email dari seseorang di Amerika yang meminta daftar stopwords bahasa Indonesia (waktu itu memang belum saya publish).  Emailnya menggunakan bahasa Indonesia yang cukup fasih, tetapi tetap terlihat bahwa dia bukan orang native Indonesia (dari namanya juga terlihat).  Sebagai akademisi, tentu saja informasi itu saya berikan bahkan kemudian saya upload agar setiap orang dapat mengambilnya tanpa perlu minta ijin lagi.  Saya kemudian iseng mencari info perusahan orang tersebut (dia bukan dari akademisi). Ternyata salah satu client besar perusahaan itu adalah Departemen Pertahanan Amerika.

Sebenarnya itu tidak mengejutkan, departemen pertahanan US sering menjadi sponsor baik untuk lomba text mining maupun penelitian-penelitian yang berkaitan dengan text mining.  Dengan penduduk muslim terbesar di dunia, tentu saja aplikasi text mining untuk bahasa Indonesia menjadi hal yang penting dari sudut pandang intelijen karena tidak mungkin setiap email, blog dan  forum diawasi secara manual.  Ini menjelaskan kenapa perusahaan itu tidak menggunakan orang Indonesia asli,  karena untuk proyek yang sensitif dari sisi keamanan, orang asing jelas tidak diperkenankan ikut.

Indonesia sendiri masih tertinggal untuk hal ini. Pada tweet Mentri Depkominfo, Bapak Tifatul Sembiring menulis bahwa untuk hal yang sensitif dibicarakan lewat twitter silahkan gunakan email beliau di …@gmail.com (cat: saya sudah reply tweet beliau, dan tidak ada tanggapan).   Lalu ada iklan lowongan perwira di TNI yang email kontaknya masih menggunakan domain @yahoo.com.  Saya pribadi tidak yakin mail server dan webserver di Indonesia bebas penyadapan intelijen asing, apalagi email server yang dimiliki perusahan US :). Ini jelas menunjukan pimpinan kita banyak yang belum sadar tentang aspek  intelijen di dunia maya.

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.

Next Page »

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