WORD VECTOR REPRESENTATION
Apa itu Word Vector Representation?
Umumnya, pekerjaan machine learning yang
seringkali
digunakan
adalah
untuk
mengklasifikasikan
satu
permasalahan
menjadi beberapa kelompok.
Apa itu Word Vector Representation?
Contoh task paling sederhananya adalah sentiment
analysis.
Sentiment analysis adalah satu usaha di bidang machine
learning untuk menilai bagaimana penilaian publik atau
kelompok orang tertentu terhadap objek yang diobservasi.
Word Vector Representation
Komputer bisa mempelajari karakter dari data melalui feature extraction.
Bebagai jenis feature diambil dari data, kemudian dilakukan pembelajaran secara khusus pada feature tersebut.
Word vector representation merupakan hasil pembelajaran dari algoritma deep learning.
Setiap kata memiliki vektor yang mewakili makna dari kata tersebut.
Bentuk vektornya bervariasi dalam hal dimensinya.
Word vector representation akrab juga disebut dengan terminologi: “word
Word Vector Representation
Word2Vec merupakan nama word vector representation yang dibuat oleh Google (https://code.google.com/archive/p/word2vec/).
Sebagai gambaran bahwa vektor dari Word2Vec ini bisa mewakili makna dari sebuah kata, kita bisa mengukur beberapa vektor sebagai perbandingan.
Apabila kita mengukur jarak antara vektor kata “France” dengan
“Paris” dan vektor kata “Italy” dengan “Rome”, maka akan ditemukan bahwa jaraknya akan muncul pada angka yang berdekatan.
• Hal ini dikarenakan secara mendasar kedua kata tersebut sama-sama merupakan nama negara dan ibukotanya.
Word Vector Representation
Word embeddings yang dihasilkan oleh Stanford ini dinamakan dengan Glove
Jika pada Word2Vec dimensi vektornya adalah 300, pada Glove memiliki beberapa variasi dimensi vektornya yaitu 50, 100, 200 hingga 300.
Word Vector Representation
Setiap kata dicirikan dengan 50 angka yang
merupakan hasil pelatihan dengan menggunakan
algoritma deep learning.
Karena keunikannya dalam mendefinisikan arti dari
Word Vector Representation dengan
Gensim
Model CBOW mencoba untuk memproyeksikan vektor kata-kata konteks untuk memprediksi vektor kata target , sedangkan, model Skip-Gram adalah kebalikannya, yaitu mencoba memprediksi vektor kata-kata yang ada di konteks diberikan vektor kata tertentu .
Dari sini, model CBOW cenderung lebih mudah smooth terhadap informasi distribusional karena semua kata-kata konteks langsung diproses menjadi satu vektor sebelum akhirnya digunakan untuk memprediksi vektor kata target.
Oleh karena itu, untuk corpus yang lebih kecil ukurannya, model CBOW cenderung lebih baik. Sebaliknya, model Skip-Gram membuat sepasang kata target dan konteks sebagai sebuah instance sehingga Skip-Gram cenderung lebih baik ketika ukuran corpus sangat besar.
Word Vector Representation dengan
Gensim
Pertama-tama, kita perlu import terlebih dahulu berbagai macam
library untuk pekerjaan kita kali ini.
Perhatikan bahwa PCA (Principal Component Analysis) dan
matplotlib akan digunakan untuk melakukan plotting vektor kata ke bidang 2 dimensi.
Kita akan memvisualisasikan beberapa kata dan melihat
kedekatannya satu sama lain.
import gensim
import numpy as np import os
import matplotlib.pyplot as plt
Word Vector Representation dengan
Gensim
Kemudian, kita akan membuat wrapper class untuk membaca setiap
file teks pada korpus, dan juga membaca baris demi baris pada file teks secara efisien.
Hal ini dapat dicapai dengan penggunaan generator yield pada
python.
Dengan fitur ini, kita tidak perlu memuat seluruh teks pada korpus di
memori sebelum melatih model Word2Vec kita.
class MySentences(object):
def __init__(self, dirname): self.dirname = dirname
def __iter__(self): #untuk setiap file
for fname in os.listdir(self.dirname): #untuk setiap baris
Word Vector Representation dengan
Gensim
Berikutnya adalah menghidupkan object dari kelas iterator
corpus tersebut.
Perhatikan bahwa corpus Anda harus diletakkan di dalam
sebuah folder yang didefinisikan pada argumen berikut
(misal, folder corpus).
Letakkan semua file teks corpus di dalam folder tersebut.
Word Vector Representation dengan
Gensim
Kemudian, bagian berikut adalah intinya, yaitu melatih
model Word2Vec kita menggunakan corpus dan juga
corpus iterator yang sudah kita definisikan sebelumnya.
Penjelasan argumen yang penting ada di bagian
komentar.
# sg = 0 -> CBOW, sg = 1 -> skip-gram
# size: dimensionality dari vektor kata yang dihasilkan
# min_count: banyaknya frekuensi miminal sebuah kata, jika ingin dipertimbangkan dalam proses
# window: range antara kata-kata konteks dengan posisi current word
Word Vector Representation dengan
Gensim
Jika ingin menyimpan model yang sudah di latih,
serta memuat model yang sebelumnya disimpan,
dapat menggunakan potongan kode berikut.
# save model
model.save('./mymodel')
# load model
Word Vector Representation dengan
Gensim
Potongan kode berikut adalah beberapa API yang
disediakan oleh gensim untuk kebutuhan operasi
vektor, seperti menghitung kemiripan vektor antara
2 kata, dan yang lainnya.
# mendapatkan representasi vektor dari sebuah kata
print (model.wv['dia'])
# menghitung similarity vektor antara dua kata
print (model.wv.similarity('dia', 'kita'))
# mencari top-N similar words
Plotting Word Vectors
Sekarang, kita coba plot vektor dari beberapa kata
untuk
melihat
visualisasi
kedakatan
vektor
dari
beberapa kata.
Kata-kata yang ingin ditampilkan plot vektornya dapat
diletakkan pada variable word_list berikut.
# kata-kata yang ingin kita plot vektornya
word_list = ['kita', 'dia', 'Anda', 'operasi', 'katarak']
# daftar vektor dari kata-kata tersebut
Plotting Word Vectors
Selanjutnya, agar bisa di-plot di bidang 2 dimensi, kita
perlu melakukan reduksi dimensi vektor kata ke vektor
2 dimensi.
Kita dapat menggunakan berbagai macam teknik
seperti PCA (Principal Component Analysis) dan t-SNE.
# reduksi dimensi vektor ke 2D agar bisa di-plot pada bidang 2D dimred = PCA(n_components=2, copy=False, whiten=True)
Plotting Word Vectors
Terakhir, kita buat fungsi untuk melakukan plot vektor dari kata-kata
tersebut (yang sudah direduksi ke dimensi 2).
def plot(datas, labels, fc='yellow'): # plot the dots
plt.subplots_adjust(bottom = 0.1)
plt.scatter(datas[:, 0], datas[:, 1], marker='o') # annotate labels
for label, x, y in zip(labels, datas[:, 0], datas[:, 1]): plt.annotate( \
label, \
xy=(x, y), xytext=(-15, 15), \
textcoords='offset points', ha='right', va='bottom', \ bbox=dict(boxstyle='round,pad=0.3', fc=fc, alpha=0.5), \
arrowprops=dict(arrowstyle = '->', connectionstyle='arc3,rad=0')) plt.show()
# kita plot !
Referensi