Membuat video tutorial praktikum

Saya sudah pernah menggabungkan video ke dalam elearning  sekitar 2006 (era sebelum Youtube). Saya juga sudah upload video di Youtube sejak 2010. Masalahnya saya pribadi tidak terlalu suka dengan media video untuk belajar, saya lebih suka membaca. Itu sebabnya sampai sekarang saya lebih banyak membuat modul tutorial dalam bentuk tulisan.

Beberapa semester terakhir, mahasiswa sering  mengeluh tidak diajari secara detil. Mereka ingin belajar seperti dalam kursus, tahap demi tahap bersama-sama.  Membayangkannya saja  saya langsung malas hehe. Solusinya adalah dengan membuat video tutorial dan upload ke Youtube. Buat satu sekali, bisa digunakan seterusnya.

Untuk screen recorder, saya menggunakan OBS Studio. Bagus fiturnya, dan bisa digabung misalnya dengan stream dari kamera (kapan-kapan nanti beli kamera-nya).¬† Untuk mic, saya menggunakan headset punya Furqon yang biasa digunakan dia untuk main game ūüôā¬† Tidak terlalu banyak masalah, asal latihan dulu. Hati-hati dengan volume suara, umumnya terlalu kecil. Tambahkan filter gain di OBS untuk memperbesar volume.

Untuk video editor, saya mencoba OpenShot (terlalu sederhana), VSDC (previewnya tidak enak) dan akhirnya Shotcut. Saya paling cocok dengan Shotcut, walaupun perlu waktu belajar agak lama.

Setelah dua hari utak-atik (untuk video berdurasi hanya 15 menit), akhirnya bisa upload tutorial pertama saya tentang pengantar Android Studio. Nanti materi lainnya menyusul.

Playlist tutorial Android yang saya buat:  https://www.youtube.com/playlist?list=PLUh6vS-rrmzRG5FFQeaog46kjs4zxtCWX

 

POS Tagger Bahasa Indonesia dengan Python

Posting sebelumnya: POS Tagger dengan Syntaxnet

Posting terkait: POS Tagger dan Dependency Parser dengan StanfordNLP

Secara bertahap, saya dan istri akan migrasi dari Java ke Python. Salah satu yang kami perlukan adalah POS (Part of Speech)-Tagger Bahasa Indonesia.

Ini cara yang paling sederhana  karena saya sudah sediakan modelnya, untuk cara trainingnya ada di bagian bawah.

Saya menggunakan CRFTagger, jadi library yang perlu diinstall: numpy, nltk dan python-crfsuite.

Lalu download pretrained model (1.6MB) yang saya buat berdasarkan data Fam Rashel (200rb-an token) di https://drive.google.com/open?id=12yJ82GzjnqzrjX14Ob_p9qnPKtcSmqAx

Untuk menggunakannya (sesuaikan path jika diperlukan):

from nltk.tag import CRFTagger
ct = CRFTagger()
ct.set_model_file('all_indo_man_tag_corpus_model.crf.tagger')
hasil = ct.tag_sents([['Saya','bekerja','di','Bandung']])
print(hasil)

Hasilnya akan seperti ini:

[[(‘Saya’, ‘PRP’), (‘bekerja’, ‘VB’), (‘di’, ‘IN’), (‘Bandung’, ‘NNP’)]]

Selesai… gampang kan ūüôā

Jika ada yang berminat untuk training sendiri, ada beberapa dataset POS-Tag Bahasa Indonesia:

https://github.com/UniversalDependencies/UD_Indonesian
https://github.com/famrashel/idn-tagged-corpus
http://www.panl10n.net/english/OutputsIndonesia2.htm
https://lindat.mff.cuni.cz/repository/xmlui/handle/11234/1-1989

Saya menggunakan data milik Fam Rashel, code untuk training-nya adalah sbb (mungkin belum efisien, saya masih belajar Python):

from nltk.tag import CRFTagger

jumSample = 500000
namaFile = "/home/yudiwbs/dataset/pos-tag-indonesia/idn-tagged-corpus-master/Indonesian_Manually_Tagged_Corpus.tsv"
with open(namaFile, 'r', encoding='utf-8') as f:
    lines = f.read().split('\n')

pasangan = []
allPasangan = []

for line in lines[: min(jumSample, len(lines))]:
    if line == '':
        allPasangan.append(pasangan)
        pasangan = []
    else:
        kata, tag = line.split('\t')
        p = (kata,tag)
        pasangan.append(p)

ct = CRFTagger()
ct.train(allPasangan,'all_indo_man_tag_corpus_model.crf.tagger')
#test
hasil = ct.tag_sents([['Saya','bekerja','di','Bandung'],['Nama','saya','Yudi']])
print(hasil)

Dokumentasi lengkap tentang lib POS-Tag NLTK dapat dilihat di: http://www.nltk.org/api/nltk.tag.html 

Untuk sekarang saya belum buat pengukuran kinerja model yang dihasilkan.

NER (Named Entity Recognition) Bahasa Indonesia dengan Stanford NER

 

Update, posting lanjutan: NER Bahasa Indonesia dengan anaGo (Ptyhon+Keras)

Posting sebelumnya tentang NER


Untuk mengekstrak named entity Bahasa Indonesia, kita dapat memanfaatkan library Stanford NER untuk membuat model yang di-train dengan dataset Bahasa Indonesia. Pertama download Stanford NER di: https://nlp.stanford.edu/software/CRF-NER.html#Download

Sedangkan dataset NER Bahasa Indonesia untuk training dapat diperoleh di:

 https://github.com/yohanesgultom/nlp-experiments/blob/master/data/ner/training_data.txt

dan

https://github.com/yusufsyaifudin/indonesia-ner/tree/master/resources/ner

Catatan: format dataset di atas tidak sesuai dengan Stanford NER, jadi perlu dikonversi ke format dua kolom seperti ini:

Sementara	O
itu	O
Pengamat	O
Pasar	O
Modal	O
Dandossi	PERSON
Matram	PERSON
mengatakan	O
,	O
sulit	O
bagi	O
sebuah	O
kantor	ORGANIZATION
akuntan	ORGANIZATION
publik	ORGANIZATION
(	O
KAP	ORGANIZATION
)	O

Selanjutnya untuk training, dokumentasinya ada di:

https://nlp.stanford.edu/software/crf-faq.html#a:   

Setelah training selesai dan model didapat, maka cara menggunakannya adalah sebagai berikut.

Ambil stanford-ner-resources.jar, letakkan di direktori lib. Jika menggunakan Gradle maka setting gradle-nya sbb:


repositories {
  flatDir {
    dirs 'libs'
  }
}

dependencies {
 testCompile group: 'junit', name: 'junit', version: '4.12'
 compile group: 'edu.stanford.nlp', name: 'stanford-parser', version: '3.8.0'
 compile name: 'stanford-ner-3.8.0'
}

Selanjutnya gunakan code yang ada di NERDemo.java.¬† Sesuaikan variabel serializedClassifier dengan lokasi model bahasa Indonesia. Outputnya akan seperti ini untuk input “Budi Martami kuliah di UPI yang berlokasi di Bandung”:


---
Budi/PERSON Martami/PERSON kuliah/O di/O UPI/ORGANIZATION yang/O berlokasi/O di/O Bandung/LOCATION ./O
---
Budi	PERSON
Martami	PERSON
kuliah	O
di	O
UPI	ORGANIZATION
yang	O
berlokasi	O
di	O
Bandung	LOCATION
.	O
---

Part of Speech Tagger dan Dependency Parser Bahasa Indonesia: Syntaxnet

Update: demo visualiasi dependency: http://nlp.yuliadi.pro/ (tab ke-3).

Posting terkait:
Dependency Parser dengan lib UUParser
POS Tagger dengan NLTK Python.

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. Saya hanya menemukan dua, yang pertama dari UI http://bahasa.cs.ui.ac.id/postag/tagger  dengan lisensi creative commons non commercial dan lainnya INANLP dari ITB tetapi tidak tersedia bebas source code-nya (cmiiw). 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/research/syntaxnet#installation

Update April 2018:  sudah ada binary installation yang lebih mudah dibandingkan compile source code.

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/research/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

Word2Vec untuk Bahasa Indonesia

Update Maret 2018, posting saya yang terkait: Word2Vec dengan Python (Gensim) dan Glove

Saat saya googling sepertinya belum ada yang membagi model Word2Vec untuk corpus bahasa Indonesia. Saya yakin sudah ada yang melakukan sih, tapi belum sempat membaginya.  Intinya saya akan membuat Word2Vec model untuk semua artikel Wikipedia bahasa Indonesia. Hasilnya adalah pre-trained model yang nanti bisa digunakan untuk berbagai task NLP.  Sedangkan pembahasan seputar Word2vec atau embedded word sudah banyak di internet, jadi tidak perlu saya tulis di sini lagi.

Selanjutnya saya akan bahas proses pembuatannya, tapi kalau ada yang mau langsung menggunakan model ini, dapat download (500 MB) di: drive.google.com/file/...  sedangkan untuk menggunakannya, baca deeplearning4j.org/word2vec di bagian me-load model.

Proses yang saya lakukan adalah sbb (sekali lagi anda bisa langsung menggunakan pretrained model seperti yang saya tulis diparagraph sebelumnya tanpa perlu download wipedia dan men-train-nya). Untuk mendonwload XML Wikipedia bahasa Indonesia, ambil dari dumps.wikimedia.org/idwiki/latest/  pilih file xml-nya  yang dizip seperti: idwiki-latest-pages-articles.xml.bz2.  Ukurannya tidak terlalu besar, 300MB dan setelah diunzip menjadi 1.8GB. Bandingkan dengan Wikipedia bahasa Inggris yang setelah diekstrak mencapai 55GB! Memang artikel wikipedia berbahasa  Indonesia masih terbatas.

XML ini perlu diproses untuk membuang tag dan karakter-karakter yang tidak diperlukan. Yang saya lakukan adalah memindahkan XML ini ke beberapa file teks dan satu file terdiri atas beberapa artikel.

Karena saya lebih nyaman menggunakan Java, saya menggunakan library DeepLearning4J : deeplearning4j.org/word2vec (ada penjelasan yang bagus juga tentang word2vec disana). Saya sangat anjurkan menggunakan Gradle, karena mempermudah penggunaan library. Konfigurasi Gradlenya seperti ini:

compile "org.nd4j:nd4j-native-platform:0.6.0"
compile "org.deeplearning4j:deeplearning4j-core:0.6.0"
compile "org.deeplearning4j:deeplearning4j-ui:0.6.0"
compile "org.deeplearning4j:deeplearning4j-nlp:0.6.0"
compile "org.nd4j:nd4j-x86:0.6.0"

Bagian yang perlu dimodifikasi adalah SentenceIterator yang tadinya hanya memproses satu file, sekarang memproses beberapa file. Proses training dengan konfigurasi berikut memakan waktu kira-kira 2 jam.

minWordFrequency(5)
.iterations(1)
.layerSize(100)
.seed(42)
.windowSize(5)

Setelah dicoba, ada beberapa hasil yang menarik:

  • 5 kata yang terdekat dengan Jakarta didapat:¬†bekasi, tangerang, ciputat, setiabudi, rawamangun
  • 5 kata terdekat dengan Bandung:¬†cimahi, bogor, bekasi, gegerkalong, salatiga ¬†(salatiga aneh)
  • 5 kata terdekat dengan presiden:¬†menteri, kabinet, azarov, valdis, phomvihane (tiga kata terakhir sepertinya presiden suatu negara, tapi kenapa?)
  • 5 kata terdekat dengan bakso:¬†sate, bakmi, rujak, goreng, gorengan
  • Untuk kasus analogi klasik: king – queen = man – woman. Jika inputnya Ratu : Raja maka Perempuan: ?).¬†Yang didapat:¬†perempuan, laki-laki, orang, seonbi, keluarga.¬†Harusnya laki-laki yang pertama, kenapa ini dapatnya perempuan lagi ya?
  • Kasus analogi lain: minum:air = makan: ? ¬†hasilnya juga aneh:¬†air, ceruk-ceruk, panoramanya, bentuang, balangdaras

Sepertinya untuk kemiripan atau kedekatan kata model ini sudah cukup baik, tapi untuk analogi masih berantakan. Perlu penelitian lebih lanjut.

Berikutnya saya mau coba corpus berita dan twitter yang dikumpulkan mahasiswa saya.

LibGDX untuk membuat Game pada Android (Modul Tutorial LibGDX)

LibGDX  (libgdx.badlogicgames.com) adalah framework untuk membuat game,  visualisasi dan simulasi.  Kelebihan LibGDX diantaranya:

  1. Multiplatform. Dapat menghasilkan app untuk desktop (Win, Linux, Max), Android, iOS dan web dengan mudah.
  2. Free dan opensource (lisensi Apache 2.0).
  3. Basisnya Java.
  4. Tidak perlu mengetahui Android SDK.  Anda dapat membuat game di Android walaupun belum pernah membuat app di Android sebelumnya, tentunya asal mengerti Java.
  5. Tidak perlu menggunakan emulator!  Proses pengembangan jadi jauh lebih cepat. Jalankan project di desktop dan nanti setelah selesai baru jalankan versi Androidnya tanpa tambahan code.
  6. Kinerja bagus, melebihi beberapa framework lain (pembahasan tentang ini: http://www.sparkrift.com…l)
  7. Menyediakan banyak fitur yang memudahkan programmer membuat game seperti box2D, Scene2D, Bullets  3D dan lainnya.
  8. Dokumentasi lumayan dan forum-nya aktif.

Saya membuat modul praktikum untuk kuliah game programming di Ilkom UPI. Lisensi tutorialnya adalah creative commons dan formatnya MS Word, jadi silahkan didistribusikan, dimodifikasi asal nama saya jangan dibuang.  Bagi yang berminat, dokumennya dapat diambil di: https://docs.google.com/document/d/1wV0MbEh5gN3EWhcrT1ZreEC-_n3eisl8QA3H8Me_ZOE/edit?usp=sharing

Modul Tutorial Pengantar Pentaho Kettle (Pentaho Data Integration)

Update Maret 2017:
Versi terakhir modul ini dapat dilihat di: https://docs.google.com/document/d/1ohHilXGVVmRm4qlydATlQmTYzYcTldQlcM8lgHetez0/edit?usp=sharing

Pentaho Kettle adalah versi community dari  Pentaho Data Integration yang free dan open source.  Tool ini digunakan untuk proses ETL  (Extract, Transform, Load)  dalam  data warehouse.  Selain untuk data warehouse,  software  ini dapat digunakan untuk migrasi data, pembersihan data, preprocessing sebelum mining dan banyak lagi.  Kettle  mudah digunakan (user interface drag-drop),  powerfull tapi fleksibel, dan dirancang untuk dapat menangani data berukuran besar.

Dulu saat ¬†mengembangkan ¬†sistem saya sering ¬†harus mengimpor data dalam berbagai format (excel, teks, foxpro dan lainnya). Biasanya yang saya lakukan adalah membuat program sendiri. ¬†Kelemahannya: hanya saya yang mengerti dan software konversi ¬†yang saya buat ¬†sulit untuk digunakan orang lain. ¬†Belum lagi kadang ada bug dan masalah-masalah lain. ¬†Sayang baru tahu ada tools ini sekarang ūüôā

Semester ini, untuk pertama kalinya  Kettle masuk sebagai materi  praktikum pada  kuliah Data warehouse dan mining   Bagi yang berminat untuk mempelajari atau menggunakannya dalam pelatihan atau kuliah,  berikut adalah tutorial singkat pengantar Kettle.  Berbahasa Indonesia dalam format docx,  lisensinya creative common sehingga bebas didistribusikan/update/remix selama nama saya dicantumkan  dan tidak untuk komersial.   Tutorial ini masih dalam tahap beta dan mungkin masih banyak berubah.

Versi Oktober 2014: docx  atau  pdf

Mencegah Mahasiswa Berbuat Curang

Masalah kecurangan akademik menurut saya sudah mirip korupsi.   Mengakar dari SD sampai pasca sarjana (bahkan di tingkat profesor),  mengacaukan sistem karena mendorong orang untuk memilih jalan pintas daripada bekerja keras.  Berikut adalah apa yang saya lakukan untuk mengurangi kecurangan akademis pada kuliah yang saya pegang di UPI.  Menurut saya efektif, karena setelah beberapa semester saya tidak melihat lagi kasus-kasus baru.

Ujian

Untuk ujian, yang saya lakukan adalah menggunakan asisten atau kakak kelas mereka, tentu dipilih yang saya kenal dan saya yakin ¬†‘bersih’ dan bisa diandalkan. Jadi kalau ada 40 mahasiswa, akan dipecah menjadi dua kelas. ¬†Setiap kelas berisi 20 mahasiswa diawasi 3-4 asisten ¬†(ya 1 asisten untuk 5 mahasiswa) ¬†dan saya bolak-balik. ¬†Asisten menggunakan sistem silent alarm. Jika ada yang dicurigai, tidak ditegur tapi ¬†saat mereka mengumpulkan berkasnya akan dipisahkan atau ditandai. ¬†Asisten kebanyakan ditempatkan di samping dan belakang kelas.

Biasanya yang mencontek ini juga punya group sendiri yang ingin duduk berdekatan.¬†Sebelum ujian dimulai group mahasiswa yang ‘mencurigakan’ ini akan saya acak-acak sehingga mereka terpisah sejauh mungkin. ¬†Jika saat ujian ada yang mencurigakan, mahasiswa tersebut juga dapat dipindahkan. ¬†Mahasiswa yang ¬†pintar dan rajin tidak mau bergabung karena takut. ¬†Aturan saya adalah semua yang terlibat, baik source maupun destination akan sama-sama mendapat E. ¬† Mahasiswa yang rajin dan pintar jadi punya ¬†alasan untuk menolak menjadi sumber contekan “Maaf, bukannya nggak mau bantu, tapi saya takut kena E”. ¬† ¬†Ini efektif memutuskan ‘pemasok’ contekan dan kalaupun ada sumber contekan, ¬†kualitasnya rendah.

Terakhir ¬†saat saya memeriksa ujian dan menemui jawaban yang ¬†mencurigakan mirip, saya panggil semua yang terlibat. Kalau mereka mengaku, langsung E. ¬†Kalau mengelak, saya ¬†tidak mau berdebat, ¬†hanya ¬†minta mereka buat pernyataan dan ditandatangani ¬†“Demi Allah saya tidak melakukan kecurangan”. ¬†Biasanya mereka mengaku di tahap ini. ¬†Kalau masih tidak mengaku? ¬†bisa jadi memang jujur tapi kalaupun tidak ¬†itu sudah ¬†jadi urusan mereka dengan yang Diatas.

Tugas/Skripsi 

Untuk tugas, pemeriksaaan kecurangan relatif lebih sederhana karena elemen terbesar tugas adalah membuat software. Biasanya kalau saya curiga, saya akan minta mereka menjelaskan source code-nya. “OK, tunjukkan code untuk bagian ini”. Pernah terjadi, jangankan bagian dari code-nya, file-nya saja mereka tidak bisa menunjukkan. ¬†Lalu setelah saya lihat sekilas, kadang saya bertanya “Loop di baris xxx untuk apa ya? method xxx input dan outputnya apa ya? coba jelaskan”. ¬† Pernah dalam satu semester ada 15 orang ¬†yang saya beri E karena kasus ini . ¬†Sayangnya tidak seperti mencontek di ujian, pihak pemberi code seringkali tidak dapat ditangkap, biasanya mereka mengaku dibuatkan oleh kakak angkatan. ¬†Kedepan mungkin saya gunakan ¬†software pembanding source code untuk bisa menangkap siapa saja yang bekerjasama.

Untuk skripsi, kita bisa deteksi berdasarkan presentasi saat sidang dengan kualitas dokumen. Ada yang dokumennya bagus, tapi saat menjelaskan dan menjawab berantakan.  Tentu harus dibedakan tidak bisa menjelaskan karena grogi atau tidak bisa menjelaskan karena tidak tahu apa yang mereka tulis.   Kecurangan juga dapat dideteksi dari gaya menulis, sering mahasiswa melakukan copy-paste dari berbagai sumber yang memiliki gaya menulis berbeda.  Saat dibaca akan terasa seperti terpatah-patah atau tersendat-sendat.

Prinsipnya kita harus membuat kecurang menjadi tidak menguntungkan secara ¬†‘ekonomis’ (manfaat vs resiko) . Tentu masih ada yang nekat, tapi biasanya tanpa curangpun mereka memang ¬†tidak akan lulus juga.

Sangat penting aturan main dijelaskan diawal dan diterapkan dengan konsisten. ¬†Awalnya ¬†banyak ‘korban’ berjatuhan, tapi setelah mereka tahu sistemnya serius dan tidak sepadan untuk dilanggar secara drastis kasus kecurangan berkurang.

Ekstraksi Informasi: Named Entity Recognition

Posting lanjutan tentang NER:

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.55: Banjir 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.

Cara Menginstall SDK Android tanpa Internet

Update Nov 2012:

Penting: sudah tersedia bundle installer Android SDK untuk Windows yang lengkap: Eclipse+ADT, platform-tools, SDK tools, platform dan system_image : http://developer.android.com/sdk/index.html   JADI LANGKAH-LANGKAH YANG DITULIS DI POSTING INI SUDAH TIDAK DIPERLUKAN LAGI. ANDA BISA MENGINSTALL SECARA OFFLINE DENGAN BUNDLE TERSEBUT. Dasar-dasar membuat app Android dapat dilihat pada modul tutorial android Android  yang saya gunakan untuk memberikan praktikum  di kampus.  Modul ini berisi prosedur instalasi sampai widget, sqlite, grafik, koneksi server, pemanfaatan google map dll. Lisensinya creative common,  jadi silahkan digunakan  untuk belajar,  pelatihan dst. Boleh didistribusikan, dimodifikasi dan diremix,  asal setelah dimodifikasi  doc-nya juga disebar,  nama saya tetap ada dan tidak untuk komersial.  Bagi yang belum menguasai Java, bisa mendownload  modul java untuk dipelajari.

Update April 2012:

Pertama: posting  ini ditujukan untuk membantu pelaksanaan praktikum/pelatihan mobile computing di lab. Instalasi SDK dan  ADT di 30 komputer lab secara bersamaan menggunakan internet tentu sulit, lebih praktis  jika dilakukan offline.  Jadi jika anda hanya ingin menginstall untuk komputer pribadi,  dianjurkan menggunakan cara biasa saja (via SDK secara online) .

Update Okt 2012:
Disesuaikan dengan SDK dan ADT terakhir  (versi r20.0.3)

——–

Tidak sulit menginstall Android SDK, ¬†tapi ¬†perlu beberapa penyesuaikan jika memiliki koneksi internet yang terbatas atau tidak ada. ¬†Beberapa hal saya ambil dari site ini, tapi dengan penjelasan dan tambahan Eclipse+ADT. ¬†Saya juga masih perlu banyak belajar, jadi cmiiw ūüôā

Berikut langkah-langkahnya, (bagi mahasiswa Ilkom UPI, saya sudah siapkan file-file  yang dibutuhkan di pengelola Lab Praktikum atau di Lab Basdat):

Catatan: Langkah 1 dan 2 dapat dilewat jika Anda telah menginstall Eclipse. Nama file  dapat berubah sesuai dengan versi masing-masing. Saya mencantumkan nama file  supaya memudahkan mahasiswa yang menjalankan instalasi dari CD/flash disk.

  1. Siapkan dan install Java SDK Nama filenya akan seperti ¬†“jdk-7u7-windows-i586.exe”. Nama ¬†dapat ¬†berbeda ¬†sesuai dengan versi JDK.
  2. Siapkan dan install Eclipse. Nama filenya seperti “eclipse-java-juno-SR1-win32.zip”. ¬†Tidak perlu diinstall, tinggal ekstrak saja ke tempat yang diinginkan. Jalankan untuk memastikan Eclipse sudah bekerja.
  3. Siapkan dan install SDK Android Nama filenya seperti “installer_r20.0.3-windows.exe”, install dan catat lokasi installernya.
  4. Pada tahap ini biasanya kita harus menginstall Android platform via   SDK Manager melalui internet. Jika anda hanya menginstall untuk satu komputer, sangat disarankan untuk melakukan instalasi lewat internet dan loncat ke langkah 10.
  5. Buka¬†struktur¬†repo Android¬†. Cari dengan ctrl-f kata “<sdk:platform>”. ¬† Terlihat bahwa disediakan ¬†beberapa versi platform ¬†(kenapa tidak yang terbaru saja? jawabannya Android yang beredar dipasaran terdiri dari berbagai versi dan dapat tidak ¬†kompatibel antara versi baru dengan yang lama). Kemudian lihat isi tag “<sdk:url>”. ¬†¬†Misalnya yang dipilih versi 2.2, maka ambil isi <sdk:url>android-2.2_r03-linux.zip</sdk:url> ¬† lalu tambahkan setelah ¬†dl-ssl.google.com/android/repository/ ¬† Sehingga URL-nya menjadi: ¬†http://dl-ssl.google.com/android/repository/android-2.2_r03-linux.zip¬†¬†(walaupun ujungnya ada kata linux, tapi bisa digunakan untuk windows). Download file ini. ¬†Langkah 5-6 dapat diulang untuk versi platform yang lain. Misalnya untuk ICS, maka urlnya adalah http://dl-ssl.google.com/android/repository/android-16_r03.zip.
  6. Ekstrak file dari langkah 5. ¬†Copy ke ¬†direktori ke C:\Program Files\Android\android-sdk-windows\platforms (sesuai tempat menginstall SDK Android di langkah 3) ¬† sehingga menjadi¬†C:\Program Files\Android\android-sdk-windows\platforms\android-2.2_r02-windows dengan subdirektori seperti¬†C:\Program Files\Android\android-sdk-windows\platforms\android-2.2_r02-windows\ant , ¬†data, images, skin dst. Nama direktori “android-2.2_r02-windows” bisa diganti dengan nama lain.
  7. Pada tahap ini anda membutuhkan direktori “platform-tools”, ¬†“extras” dan “system-images” yang isinya saya tidak tahu harus mendownload dari mana. Cara yang saya gunakan adalah mengcopy ¬†dari komputer yang sudah memiliki SDK lengkap (diupdate melalui internet). ¬†
  8. Copy direktori “platform-tools” ¬†ke¬†C:\Program Files\Android\android-sdk-windows\ ¬†sehingga menjadi¬†C:\Program Files\Android\android-sdk-windows\platform-tools. ¬†Lakukan hal yang sama untuk direktori “extras” dan “system-images”.
  9. Jalankan ulang SDK-Manager (Start –> All Program –> Android SDK Tools –> SDK Manager). Platform 2.2 harusnya sudah otomatis muncul.
  10. Sekarang kita menyiapkan Android Virtual Device (AVD). ¬†Di panel kiri SDK manager, ada pilihan “Virtual Device”. Klik ini. Lalu lihat dibagian kanan ada tombol “New”. ¬† Klik “new”, akan keluar dialog. ¬†Isi nama, target, ukuran SD-Card dst. ¬†Setelah selesai, ¬†dialog tertutup dan akan muncul AVD tersebut. Pilih AVD ini. Lalu klik “Start” dan tunggu. Proses ini cukup lama! (saat pertama coba ¬†sempat saya close karena curiga hang, ternyata memang lama). Silahkan bermain-main dengan AVD ini, khususnya yang belum mempunyai phone Android.
  11. Siapkan ¬†plugin Android untuk Eclipse, yaitu ADT (bagi yang mau mendownload ¬†scroll kebawah sedikit dibagian “Download the current ADT Plugin zip file”). ¬†Nama filenya akan seperti “ADT-20.0.3.zip.”. ¬†Jalankan Eclipse. ¬†Pilih ¬†Help –> Install New Software. Klik “Add” lalu “Archive”. Pilih ¬†file ADT-20.0.3.zip.¬†beri nama “Android Plugin” dan pilih hanya developer tools saja. Lalu tekan next dan ikuti petunjuk selanjutnya¬†ikuti petunjuk selanjutnya.
  12. Masih dalam Eclipse, kita coba buat app Android pertama. Klik ¬†File -> New -> Other (atau ctrln-N) ¬†Pilih “Android Project” ¬†dibagian Android. ¬†Ikuti petunjuk selanjutnya.
  13. Jalankan project tersebut dengan tombol play (ctrl-F11). Pilih Android Application. Tunggu AVD muncul dan loading ¬†(untuk menghemat waktu, usahakan AVD tidak ditutup selama Eclipse masih terbuka). ¬† Jika program Anda tidak muncul klik “menu” pada AVD.