riochr17 / Named-Entity-Tagger-ID

Named Entity Tagger dengan korpus bahasa Indonesia menggunakan nltk ClassifierBasedTagger
4 stars 3 forks source link

Algoritma yang dipakai untuk melakukan classifikasi #1

Open farisdewantoro opened 5 years ago

farisdewantoro commented 5 years ago

Halo gan,

mau nanya dong hehe, kalo ini algoritma yang dipakai apa ya untuk named entity recognition ? saya lihat untuk post tagging memakai CRF dengan model yang sudah ada, nah untuk dapat melakukan NER itu memakai apa ? saya cek di library nltk ClassifierBasedTagger itu pakai Naive Bayes.

saya sedang belajar untuk membuat named entity menggunakan CRF tetapi saya masih bingung nih dengan algoritmanya, kalo boleh ada referensi atau penjelasan mengenai CRF boleh dishare dong gan hehehe

riochr17 commented 5 years ago

Hi @farisdewantoro sesuai dengan dokumentasi nltk, ClassifierBasedTagger defaultnya pakai naive bayes, kalau mau pakai classifier yang lain bisa dengan menambah di parameter konstruktornya, boleh cek langsung dokumentasinya lebih lanjut.

bingung CRF? silahkan cek https://python-crfsuite.readthedocs.io/en/latest/ atau langsung cek versi jupyternya https://github.com/scrapinghub/python-crfsuite/blob/master/examples/CoNLL%202002.ipynb

Kalau sekedar membuat named entity menggunakan crf contoh jupyter dari python-crf sepertinya sudah cukup jelas. Algoritmanya menurut saya sendiri tidak lebih daripada sekedar proses algoritma pembelajaran mesin pada umumnya yaitu preproses, ekstraksi fitur, latih, dan evaluasi. Hanya saja untuk named entity lebih difokuskan pada ekstraksi fitur yaitu proses pemberian tag pada kata dan chunk yang dianggap sebagai entitas.

farisdewantoro commented 5 years ago

Hi @riochr17 kalo untuk aplikasi sih kebetulan udah jadi, pakai referensinya sama dengan yang agan kirim. nahh tpi yang saya bingungkan adalah ketika proses training dan predict.

kebetulan untuk TA hehe jadi perlu tau proses perhitungannya. nah kan kalo melalui koding saya hanya menuliskan seperti train() langsung jadi model tanpa tau apa yang terjadi disana.

contohnya

Top likely transitions:
B-ORG  -> I-ORG   8.631963
I-ORG  -> I-ORG   7.833706
B-PER  -> I-PER   6.998706
B-LOC  -> I-LOC   6.913675
I-MISC -> I-MISC  6.129735
B-MISC -> I-MISC  5.538291
I-LOC  -> I-LOC   4.983567
I-PER  -> I-PER   3.748358
B-ORG  -> B-LOC   1.727090
B-PER  -> B-LOC   1.388267
B-LOC  -> B-LOC   1.240278
O      -> O       1.197929
O      -> B-ORG   1.097062
I-PER  -> B-LOC   1.083332
O      -> B-MISC  1.046113

nah kan disitu ada angka angka, yang berarti ada perhitungankan. sama halnya dengan ketika predict nama entitas.

saya masih newbie nihh gan tentang ML tolong pencerahannya harus mulai cari tau dari mana

riochr17 commented 5 years ago

halo lagi @farisdewantoro untuk proses training dan predict cara kerjanya (termasuk proses perhitungan) tergantung jenis classifier yang digunakan. Model yang dihasilkan setiap classifer juga berbeda-beda, misal decision tree modelnya akan berbentuk tree, naive bayes berbentuk kumpulan peluang2, dan sebagainya.

Untuk ner di repo ini klasifikasi yang digunakan naive bayes, cara kerja naive bayes bisa dicek disini https://dataaspirant.com/2017/02/06/naive-bayes-classifier-machine-learning/ atau googling contoh yang pernah saya coba naive bayes untuk kasus klasifikasi iris dataset.

Bila tertarik saya juga pernah menulis algoritma neural network yang sederhana di repo ini https://github.com/riochr17/Simple-Multilayer-Perceptron, disana saya juga tambahkan penurunan rumus neural network. Mungkin maksud dari @farisdewantoro seperti itu penjelasan mengenai cara kerja training dan predict dari classifier.

farisdewantoro commented 5 years ago

Kalo tetang training algoritma ada referensi tidak gan? soalnya saya liat di CRF memakai training algoritma. apakah semua machine learning itu memiliki training algoritma masing masing ? seperti: Training algorithm :

riochr17 commented 5 years ago

halo @farisdewantoro apakah semua machine learning itu memiliki training algoritma masing masing? Maaf pertanyaannya sedikit ambigu bagi saya, saya coba jawab, semoga sesuai harapan.

Menurut saya sendiri, machine learning / pembelajaran mesin itu tidak lebih dari konsep abstrak tentang mesin yang bisa mempelajari data dan mendapat pola dari data-data itu. Tentang algoritma apa yang digunakan itu tergantung dari implementasi pembelajaran mesin tersebut.

Misal jika pembelajaran mesin diimplementasikan dengan naive bayes, maka istilah sgd (stochastic gradient descent) tidak akan ditemukan. Jika diimplementasikan dengan decision tree dan turunannya, maka tidak ada juga istilah sgd.

SGD bukan training algorithm.

Istilah sgd populer di pembelajaran mesin menggunakan Neural Network, yang digunakan sebagai fungsi objektif untuk meminimalkan error pada weight yang menghubungkan setiap simpul/node pada layer. Layaknya neural network juga yang punya banyak variasi, SGD sendiri punya banyak variasi misalnya sgd dengan momentum, sgd rata-rata, AdaGrad, RMSProp, Adam, dll termasuk dua contoh sgd yang di atas.

Apakah neural network harus pakai sgd? tidak juga, jika punya fungsi sendiri yang lebih bagus dari sgd, why not?

untuk referensi dari beberapa implementasi pembelajaran mesin, coba mulai dari pembelajaran mesin menggunakan naive bayes, decision tree, svm, lalu masuk ke neural network.

untuk referensi pembelajaran mesin berdasarkan data coba cek supervised & unsupervised learning.

farisdewantoro commented 5 years ago

halo lagi bro @riochr17 , Kalo untuk yang named entity menggunakan naive bayes punya jurnal atau referensi yang bahasa indonesia tidak gan ?

sama score untuk precision and recall dapet berapa disini ? kok saya coba pakai yang ini ga keluar

score = chunker.evaluate([conlltags2tree([(w, t, iob) for (w, t), iob in iobs]) for iobs in test_samples[:500]])
print score.accuracy()

yang keluar hanya IOB Accuracy nya dengan akurasi yang sangat kecil kisaran 20-30%