Tampilkan postingan dengan label NLP. Tampilkan semua postingan
Tampilkan postingan dengan label NLP. Tampilkan semua postingan

Selasa, 14 November 2017

Daftar Tutorial Deep Learning untuk NLP

Link berikut berisi tutorial Deep Learning untuk Natural Language Processing (NLP). Tutorial akan memperkenalkan terlebih dahulu konsep dari deep learning, yang langsung dikhususkan untuk NLP atau pemrosesan data tekstual secara umum. Kemudian, tutorial akan menyampaikan isu yang sedang ramai diperbincangkan di NLP saat itu, yaitu terkait Distributed Semantic Model. Setelah itu, Tutorial akan berisi sesi hands-on untuk mencoba mengimplementasikan beberapa arsitektur Deep Learning dasar yang biasa digunakan pada NLP. Hands-on akan menggunakan tools berupa Python 2, Tensorflow, dan Gensim.

Berikut adalah link tutorial ini:

http://ir.cs.ui.ac.id/alfan/tutorial/list.html


--
Alfan F. Wicaksono
26 Safar 1439 H/15 November 2017

Rabu, 20 Maret 2013

Movie Review Corpus Berbahasa Indonesia (v1.0)

Saya membangun sebuah corpus berbahasa Indonesia untuk sentiment analysis. Corpus ini merupakan kumpulan Movie Review (Resensi Film) berbahasa Indonesia yang diberi label "positif" atau "negatif" terkait sentimen yang dikandung di dalam dokumen yang bersangkutan.

Corpus ini mirip dengan IMDB corpus yang terkenal yang dibangun oleh Cornell University [1], hanya saja ukuran corpus berbahasa Indonesia ini lebih kecil.

  • #Positive Docs  : 381
  • #Negative Docs : 384
  • #Docs (total) : 765
Corpus ini merupakan corpus movie review berbahasa Indonesia pertama (sepengetahuan saya). Semoga corpus ini berguna untuk teman-teman yang ingin melakukan riset di bidang sentiment analysis / opinion mining dengan data berbahasa Indonesia. Franky dan Dr. Ruli sebelumnya melakukan riset sentiment analysis dengan menggunakan IMDB corpus yang diterjemahkan ke bahasa Indonesia secara otomatis [2].

Jika teman-teman tertarik dengan corpus ini, silakan kirim email ke alfan |titik| farizki |a/t| gmail ATAU alfan |a/t| cs |titik| ui |titik| ac |titik| id.



[1] http://www.cs.cornell.edu/people/pabo/movie-review-data. Data ini pertama kali digunakan oleh Bo Pang dan Lillian Lee, "A Sentimental Education: Sentiment Analysis Using Subjectivity Summarization Based on Minimum Cuts'',  Proceedings of the ACL, 2004.
[2] Franky dan Ruli Manurung, "Machine Learning Based Sentiment Analysis of Automatic Indonesian Translations of English Movie Reviews", In Proceedings of the International Conference on Advanced Computational Intelligence and Its Applications 2008 (ICACIA 2008). Depok, Indonesia, 1-2 September 2008.


21 Maret 2013
Alfan F. Wicaksono

Senin, 13 Desember 2010

Introduction to WordNet : Lexical Database for English

Assalamu'alaikum teman-teman semua,

Sekarang kita akan melakukan kajian terhadap salah satu Tools yang sangat berguna di dunia Text Mining yaitu WordNet. WordNet merupakan basis data lexical untuk bahasa inggris. WordNet melalukan pengelompokan kata atau collocations (collocation adalah beberapa kata yang muncul bersama (berurutan) dan membentuk makna tertentu, contoh "car pool") dalam satu himpunan yang disebut synset. Jadi, di dalam WordNet, ada banyak sekali synset.

Seperti yang sudah disebutkan sebelumnya, setiap synset mengandung kata-kata yang bersinonim atau collocations  yang bersinonim. Kata/collocation yang mempunyai makna/semantic yang berbeda, akan berada pada synset yang berbeda pula. Defini asli dari synset (berdasarkan dokumentasi asli WordNet) : a set of words that are interchangeable in some context without changing the truth value of the preposition in which they are embedded.

Berikut adalah contoh Synset (diambil dari WordNet Online - dengan kata kunci "good") :
  • S: (adj) estimable, good, honorable, respectable (deserving of esteem and respect) "all respectable companies give guarantees"; "ruined the family's good name"
  • S: (adj) beneficial, good (promoting or enhancing well-being) "an arms limitation agreement beneficial to all countries"; "the beneficial effects of a temperate climate"; "the experience was good for her"
Synset pertama terdiri dari kata estimable, good, honorable, dan respectable. Synset kedua terdiri dari kata beneficial, dan good. Kita bisa lihat disini bahwa kedua synset ini mempunyai semantik yang berbeda. Setiap kata pada synset yang sama bersifat interchangable dalam sebuah kalimat. Kata good adalah polisemi : bentuk tekstual sama, tetapi mempunyai semantik yang berbeda-beda.

WordNet juga menyediakan Relasi semantik antar synset. Relasi semantik antar synset ini tergantung pula dari Part-of-Speech katanya, misal berikut (dikutip langsung dari Wikipedia) : 
  • Nouns
    • hypernyms: Y is a hypernym of X if every X is a (kind of) Y (canine is a hypernym of dog, because every dog is a member of the larger category of canines)
    • hyponyms: Y is a hyponym of X if every Y is a (kind of) X (dog is a hyponym of canine)
    • coordinate terms: Y is a coordinate term of X if X and Y share a hypernym (wolf is a coordinate term of dog, and dog is a coordinate term of wolf)
    • holonym: Y is a holonym of X if X is a part of Y (building is a holonym of window)
    • meronym: Y is a meronym of X if Y is a part of X (window is a meronym of building)
  • Verbs
    • hypernym: the verb Y is a hypernym of the verb X if the activity X is a (kind of) Y (to perceive is an hypernym of to listen)
    • troponym: the verb Y is a troponym of the verb X if the activity Y is doing X in some manner (to lisp is a troponym of to talk)
    • entailment: the verb Y is entailed by X if by doing X you must be doing Y (to sleep is entailed by to snore)
    • coordinate terms: those verbs sharing a common hypernym (to lisp and to yell)
Relasi semantik tersebut belaku untuk setiap kata atau collocations yang ada di dalam synset yang berhubungan. Selain itu, WordNet juga menyediakan relasi antar kata (yang hanya berlaku antar kata) seperti antonim.

WordNet menyediakan polysemy count : jumlah synset yang mengandung sebuah kata. WordNet juga menyediakan Frequency Score : seberapa sering sebuah kata muncul pada sense/semantik tertentu.

Minggu, 27 Juni 2010

Chunk Tagging dan Chunk Labelling

Chunk tagging adalah sebuah task di bidang NLP yang bertugas untuk memberi batas setiap chunk pada kalimat. Chunk adalah sebuah/beberapa kata dalam kalimat yang masih terkait seperti frase. Sebenarnya, teknik yang digunakan sama dengan POS tagging, perbedaannya terletak pada label yang digunakan. Pada POS tagging label yang digunakan adalah JJ, VBI, NNP, dll, tetapi kalau pada pada Chunk tagging, label yang digunakan adalah STRT, INSTP, STP, UNSTP.
  1. STRT : menandakan awal dari chunk
  2. INSTP : menandakan bagian tengan dari chunk
  3. STP : menandakan bagian akhir dari chunk
  4. UNSTP : menandakan chunk yang hanya terdiri dari satu kata
Sebenarnya, label yang digunakan tidak harus berjumlah 4 seperti yang sudah disebut pada bagian sebelumnya. Kita bisa membuatnya menjadi hanya 2 label atau 3 label saja. Penentuan mana yang terbaik, harus dilakukan penelitian terhadap bahasa yang digunakan.

Sebelum melakukan Chunk tagging, kita harus melakukan terlebih dahulu POS tagging terhadap kalimat masukan. Salah satu input yang sering digunakan adalah gabungan antara Kata dengan POS-nya, outputnya adalah label chunk.

jadi, token input adalah V1-Vn, dimana V = {W, Tw}. Output adalah kumpulan Ct-Cn dimana C adalah label chunk (STRT, INSTP, dll).

berikut adalah contoh hasil Chunk Tagging:
Orang/STRT tua/INSTP pergi/STRT ke/INSTP Bandung/STP
[Orang tua]chunk1 [pergi ke Bandung]chunk2

Selain Chunk tagging, ada juga yang disebuah Chunk labelling. Tasks ini sebenarnya merupakan kelanjutan dari task Chunk tagging. Pada chunk tagging, kita hanya mengetahui batas-batas chunk pada kalimat, tetapi kita tidak mengetahui kategori chunk tersebut. Kategori chunk bisa terdiri dari NP (Noun Phrase) , VP (Verb Phrase), dll.

Proses yang dilakukan sebenarnya sama saja dengan Chunk tagging, hanya pada corpus latih, kita harus menambahkan satu lagi informasi, yaitu informasi Kategori chunk.

contoh hasil Chunk labelling:
[Orang tua]NP [pergi ke Bandung]VP

Machine learning yang digunakan bisa macam-macam, bisa HMM, SVM, CRF, dll. Penggunaan Chunk Tagging dan Chunk Labelling ini banyak sekali, misal untuk membangung Named Entity Recognizer, untuk deteksi Kata Majemuk pada bahasa Indonesia, sebagai pengganti Shallow Parser, dan lain-lain.

Engine IPostagger yang sudah saya kembangkan bisa digunakan untuk melakukan Chunk Tagging dan Chunk Labelling, hanya saja CORPUS yang digunakan belum diberi label untuk kasus ini. Kalau ada yang mau melanjutkan pekerjaan melakukan labeling terhadap corpus POS Tagger saya, silakan saja...

Rabu, 10 Maret 2010

Release : IPostagger_v1.0-beta, HMM-based POS Tagger Bahasa Indonesia

IPostagger merupakan Engine POS Tagger yang menerapkan konsep HMM, tetapi disesuaikan untuk kasus bahasa indonesia yang beberapa katanya mempunyai awalan atau akhiran. IPostagger dibuat di Laboratorium Grafika dan Intelegensia Buatan, Teknik Informatika, ITB oleh Saya.

Jika Anda ingin menggunakan POS Tagger ini, jangan lupa cite ke :
Alfan Farizki Wicaksono, Ayu Purwarianti. HMM Based POS Tagger for Bahasa Indonesia. On Proceedings of 4th International MALINDO (Malay - Indonesian Language) Workshop. 2nd August 2010.

Paper lain bisa dilihat di : http://ir.cs.ui.ac.id/malindo2010/program.php

Fitur yang ada di IPostagger ini:
1. Kita bisa memilih model bahasa yang digunakan(NGrams) mau Bigram atau Trigram
2. Ada metode penanganan OOV menggunakan Affix Tree, kita bisa memilih mau menggunakan Prefix saja, Suffix Saja, atau gabungan keduanya.
3. Menggunakan metode Smoothing Deleted Linier Interpolation untuk Trigram dan JELINEC-MERCER untuk Bigram

Klaim : Dijamin akurasinya diatas 95% tergantung Corpus dan Tagset yang Anda punya

Lisensi : GPL gan !, open source !

Bonus : Corpus Bahasa Indonesia 8 MB buatan UI-BPPT

Contact: xxx@gmail.com
xxx : alfan.farizki

Senin, 04 Januari 2010

Persamaan formal HMM

pada postingan sebelumnya, sudah dibahas mengenai pengertian HMM dan apa bedanya dengan Markov Chain biasa. Sekarang, kita akan lanjut untuk membahas persamaan formal yang terkait dengan HMM.

HMM secara formal adalah 3 tuple:

M = (A, B, p)                   (1)

dengan M adalah HMM itu sendiri, Penjelasan apa itu A? B? dan p? akan ditulis dibagian bawah.

Berikutnya adalah:

S = (s1, s2, s3, ..., sN)                      (2)
V = (v1, v2, v3,.....,vN)                     (3)

dimana S adalah himpunan state dan V adalah himpunan observasi.

berikutnya,

Q = q1, q2, .., qT            (4)

O = o1, o2, ..,oT             (5)

dengan Q adalah urutan pasti state dengan panjang T yang sesuai dengan observasi O.

persamaan (1) sampai (5) diatas hanyalah sebagai pengantar untuk penjelasan formal suatu HMM. jadi,
A adalah array transisi yang menyimpan probabilitas transisi dari state i ke state j.

A = [a ij], a ij = P(qt = sj | qt-1 = si)

B adalah array observasi yang menyimpan beberapa probabilitas state j menghasilkan observasi k.

B = [bi (k)], bi(k) = P(xt = vk | qt = si)

dan p adalah array yang berisi probabilitas awal, (saat implementasi ke code, ini bisa diterjemahkan jadi nol)

p = [pi], pi = P(q1 = si)

--
lambang [] menandakan array

model yang digunakan ini mempunyai beberapa asumsi,
  1. current state hanya bergantung pada state sebelumnya
  2. observasi yang diemisikan oleh sebuah state pada waktu t hanya bergantung pada current state.
contoh pada kasus Part-of-Speech Tagging

asumsi 1 : P(t2 | t1) atau P(t3 | t2, t1)  => current tag hanya melihat konteks tag sebelumnya/tidak kedepan

asumsi 2 : P(w | t) => peluang sebuah lexicon/kata jika diketahui sebuah tag. Dia tidak melihat tag apa yang ada pada posisi sebelum atau sesudah kata w.

--
referensi masih sama seperti pada postingan sebelumnya

ok, sekian dulu catatan saya mengenai persamaan formal HMM. semoga bermanfaat.

Sabtu, 26 Desember 2009

apa itu Hidden Markov Model ?


Definisi Hidden Markov Model:


Hidden Markov Model(HMM) adalah sebuah kakas statistik yang sudah banyak diterapkan di bidang signal processing, dan speech processing. HMM juga sukses diterapkan untuk menangani masalah – masalah yang ada pada NLP seperti part-of-speech tagging, phrase chunking, dan mengambil informasi dari sekumpulan dokumen. Andrei Markov memberikan namanya ke sebuah teori matematika yaitu Markov Chain pada awal abad ke 20[3], akan tetapi yang mengembangkan teori HMM adalah Baum dan para koleganya pada tahun 1960[2].

Sebelum melangkah lebih jauh mengenai HMM, terlebih dahulu dibahas mengenai Markov Chain yang merupakan dasar dari teori HMM. Markov Chain merupakan finite state automaton yang terdiri dari kumpulan state yang transisi antar state-nya dilakukan berdasarkan masukan observasi. Pada Markov Chain, setiap sisi antar state berisi probabilitas yang menunjukan jalur yang mungkin diambil dan total semua probabilitas yang keluar simpul adalah satu.

Gambar berikut merupakan contoh dari model Markov Chain. Model ini menggambarkan index dari stock market. Model ini mempunyai 3 state, Bull, Bear, dan Even, dan 3 indeks observasi Up, Down, Unchanged. Diberikan serangkaian observasi, contoh: up-down-down, dapat dengan mudah diketahui bahwa urutan state yang memproduksi observasi tersebut adalah Bull-Bear-Bear, dan probabilitas dari urutan state tersebut adalah 0,2 x 0.3 x 0.3.




Markov Chain bermanfaat untuk menghitung probabilitas urutan kejadian yang dapat diamati. Tidak semua urutan kejadian yang ingin diketahui bisa diamati. Untuk dapat memodelkan hal ini, model Markov Chain dimodifikasi menjadi Hidden Markov Model. Gambar II-2 menjelaskan bahwa Hidden Markov Model mempunyai beberapa simbol yang diemisikan oleh setiap state. Kunci perbedaannya adalah jika mempunyai urutan observasi up-down-down, maka tidak bisa diketahui dengan pasti urutan state apa yang memproduksi urutan observasi ini. Oleh sebab itu, urutan state disebut ’hidden’ atau tersembunyi. Walaupun begitu, perhitungan urutan state mana yang berpeluang paling besar menghasilkan urutan observasi tersebut dapat dilakukan.





REFERENSI:

[1]  Blunsom, Phil. Hidden Markov Models. 19 Agustus 2004.
[2] L. Baum et. al. A maximization technique occuring in the statistival analysis of probabilistic functions of markov chains. Annals of mathematical statistics, 41:164-171, 1970.
[3] A. Markov. An example of statistival investigation in the text of eugene onyegin, iilustrating coupling of test in chains. Proceedings of the Academy of Sciences of St. Petersburg, 1913.
[4] L. Rabiner. A tutorial on hidden markov models and selected applications in speech recognition. Proceedings of IEEE, 1989.
[5] Cutting, Doug, et al. A Practical Part-of-speech Tagger. Xerox Palo Alto Research Center. In Proceding of the third conference on applied Natural Language Processing page 133-140. 1992.
[6] Schmid, Helmut. Probabilistic Part-of-Speech Tagging using Decision Tree.

Jumat, 11 Desember 2009

Part-of-speech(POS) tagging bahasa indonesia

Part-of-Speech tagging adalah sebuah pekerjaan NLP. Sebagian besar kegiatan yang dilakukan di bidang NLP seperti Information Extraction, Question-Answering, Speech Recognition, Intelligent Tutoring System, Parser, dan yang lainnya membutuhkan sistem POS Tagging ini untuk pemrosesan awalnya. Sayangnya, untuk bahasa Indonesia sistem ini hanya sedikit, publikasinya kurang, dan belum ada yang menyediakan untuk di download. Tentunya saya dan Anda merasa sedih akan hal ini, padahal Bahasa Indonesia ini diucapkan oleh lebih dari 200 Juta Jiwa [etnologue].

Apa sih part-of-speech tagging itu?
Part-of-speech tagging adalah sebuah sistem yang memberikan label kata secara otomatis pada suatu kalimat. Misalkan, ada kalimat saya makan nasi dan ada label KG=kata ganti, VV=kata kerja, NN=kata benda. Sistem akan menerima input berupa kalimat tersebut, outputnya adalah:

saya/KG makan/VV nasi/NN

sepertinya mudah ??
memang terlihat mudah, tetapi masih banyak hal yang harus diperhatikan mengingat yang melakukan pelabelan ini adalah komputer dan bukan manusia. Masalah yang dihadapi oleh para peneliti POS tagging ada dua:
  1. Kata Ambigu : saya bisa terkena bisa ular. kedua kata bisa disamping mepunyai kelas kata yang berbeda. lalu bagaimana kita membedakannya ??
  2. Kata OOV (Out-of-vocabulary) : sebelum melakukan pelabelan kelas kata, sistem perlu melakukan training data terlebih dahulu. lalu bagaimana dengan kata yang tidak terdapat pada data learning atau corpus?
Metode untuk mengembangkan sistem ini ada 3 tipe:
  1. Menggunakan metode Rule Base. sistem mempunyai aturan pelabelan dimana pengetahuan berasal dari ahli linguistik.
  2. Menggunakan metode Statistik.
  3. Menggunakan metode Transformation Based => bisa dibilang gabungan kedua metode diatas.
untuk metode statistik beberapa yang sering digunakan adalah CRF(conditional random field) , HMM(hidden markov model), dll. penanganan OOV sendiri mempunyai metode sendiri.

Saya sudah buat sistem Part-of-Speech tagging menggunakan First Order Hidden Markov Model. sebenarnya sistem ini saya ingin khususkan untuk bahasa Indonesia. Saya ingin buktikan kalau dunia NLP Indonesia tidak kalah dengan yang lain. Hanya saja, saya belum mempunyai Corpus Bahasa Indonesia(sekarang sedang proses pengembangan).Oh iya, satu lagi, sistem saya ini juga masih belum bisa menangani OOV. OOV mempunyai label sendiri yaitu label "OOV"

Jika ada yang berminat dengan program HMM-bigram saya (mungkin untuk riset), silakan kontak Email saya di :
alfan dot farizki at gmail

Program POS Tagging ini gratis dan berlisensi GPL, semoga bermanfaat untuk NLP Indonesia....

Sabtu, 21 November 2009

PHP Text Classifier

PHP Text Classifier adalah sebuah Modul PHP yang dapat Anda gunakan untuk melakukan klasifikasi sebuah dokumen secara otomatis, melalui data latih tertentu. Anda dapat membentuk kategori yang Anda inginkan, asalkan Anda mempunyai data latih yang cukup untuk merepresentasikan kategori itu.

Anda dapat mendownload PHPTextClassifier buatan saya sendiri melalui link dibawah ini

Semoga  modul ini bermanfaat....:)

Salah satu kegunaan dari Text Classifier adalah untuk mengklasifikasikan suatu berita secara otomatis pada suatu web. Contoh lain yang paling sering digunakan adalah untuk menentukan apakah Text Document masukan user merupakan SPAM atau BUKAN SPAM.