Vektor kata: Raja, ratu, pria, wantia |
Vektor dari Kata
Apa itu vektor dari kata, atau singkatnya 'vektor kata'? Sederhananya: a vector of weights. Tugas dari vektor dari kata adalah untuk mencari representasi (numerik) dari kata-kata yang dicari. Contoh sederhana adalah sebagai berikut.
Sebuah data terdiri dari kata-kata:
data = {raja, ratu, pria, wanita, anak-anak}
maka kata "raja" dapat kita tuliskan:
raja = {1, 0, 0, 0, 0}
ratu = {0, 1, 0, 0, 0}
pria = {0, 0, 1, 0, 0}
wanita = {0, 0, 0, 1, 0}
anak-anak={0, 0, 0, 0, 1}
Teknik diatas disebut dengan one-hot encoding.
Pembelajaran vektor kata
Bagaimana caranya mencari nilai dari vektor kata? dengan mencari kemungkinan keluarnya/adanya kata tersebut dari suatu database.Perhatikan contoh kalimat berikut:
Saya suka baju yang berwarna merah tua dipadung dengan topi dengan warna senada.Maka, kemungkinan kata "saya" berpasangan dengan kata "suka" sangat besar, begitu juga dengan kata "merah" dengan kata "tua". Sebaliknya kata "saya" berpasangan dengan kata "meja" peluang terjadinya sangat kecil sekali. Permasalah ini dapat diselesaikan dengan jaringan syaraf tiruan (JST).
Selain JST, ada dua pendekatan yang biasa dipakai pada vektor kata: Continues bag of words (CBOW), dan skip gram. Pada continues bag of words (baca ini bagian bag of words), setiap kata (w) pada kalimat, selanjutnya disebut konteks, dilatih untuk untuk memaksimalkan probabilitasnya dengan kata target (label). Misal kata "kucing" dan kata "pohon" sebagai konteks dengan kata "mamanjat" sebagai target. Pada skip-gram, hampir berkebalikan, teknik ini memaksimalkan klasifikasi kata berdasarkan kata lain pada kalimat yang sama. Jadi pada contoh "kucing memanjat pohon", jika kata "mamanjat" kita jadikan inputnya maka, Skip-gram akan mecoba menghasilkan outout kata "kucing" dan "memanjat".
Secara matematik, idea dari word2vec (program dari google untuk mencari vektor kata) adalah: melewati semua kata dari seluruh korpus dan memprediksi kata-kata di sekitar kata tengah (center word), contohnya jika kata tengahnya "memanjat", maka peluang kemunculan kata "kucing" dan kata "pohon" akan tinggi. Ide ini dapat dirumuskan dengan,
$$ P (o|c) = \dfrac{exp(u_o^T V_c)}{\sum_{w=1}^{v}exp(u_w^T V_c)}$$
Bagaimana menerapkan rumus di atas? Perhatikan contoh kalimat berikut:
Saya suka deep learning dan NLP
Maka,
$$ P(saya|deep) = \dfrac{exp(u_{saya}^T V_{deep})}{\sum_{w=1}^{V}exp(u_{saya}^TV_{deep})}$$
Begitu juga untuk kata-kata yang lain. Jika dimiliki korpus yang sangat besar dimana peluang munculnya kata-kata dari kata tengah dapati dilatih (misal: wikipedia, twitter, dll), maka peluang munculnya kata-kata disekitar kata tengah tersebut dapat dihitung.
Glove embedding
Glove merupakan singkatan dari global vektor. Teknik ini mengambil keuntungan dari dua pendekatan berbeda: count-based (misalnya PCA, principal component analysis) dan direct prediction seperti word2vec.Secara matematik, glove meminimalkan cost function berikut:
$$ J(\theta) = \dfrac{1}{2}\sum_{i,j=1}^Wf(P_{ij})(u_i^T v_{ij} - \log P_{ij})^2$$
dimana $\theta$ merupakan semua parameter, $u$ dan $v$ adalah pasangan kata (contoh "saya" dan "deep" pada contoh sebelumnya), dan P adalah peluang munculnya kata ke-i dan ke-j pada corpus. Jika dipecah lagi, maka yang diminimalkan adalah pengurangan sebelah kanan.
Dengan teknik glove ini, suatu korpus dapan direpresentasikan dengan vector weight, sehingga jika kita punya teks, kita bisa mengambil vector weight dari korpus tadi (pretrained model) untuk mengklasifikasikan teks kita dengan label (output) yang kita miliki.
Referensi:
- https://blog.acolyer.org/2016/04/21/the-amazing-power-of-word-vectors/
- https://code.google.com/archive/p/word2vec/
- https://www.kaggle.com/c/word2vec-nlp-tutorial#part-2-word-vectors
- https://www.youtube.com/watch?v=ASn7ExxLZws