P11 Word Vector .pdf Official Site of REZA CHANDRA Gunadarma University P11 Word Vector
WORD VECTOR REPRESENTATION
Pengantar Deep Learning
Apa itu Word Vector Representation?
Umumnya, pekerjaan machine learning yang
seringkali
digunakan
adalah
untuk
mengklasifikasikan
satu
permasalahan
menjadi beberapa kelompok.
Ketika komputer diberikan pembelajaran
maka komputer akan semakin cerdas dan
bisa membedakan antara kelas yang satu
dengan yang lainnya.
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.
Biasanya, klasifikasinya dibagi menjadi 2, yaitu positif dan
negatif.
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
embeddings”
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.
• Karena maknanya berdekatan, maka nilai vektornya pun akan berdekatan.
Word Vector Representation
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.
Untuk lebih memperjelas bentuk vektor dalam word vector representation, berikut ini contoh
vektor yang terdapat pada Glove dengan dimensi 50:
Word Vector Representation
Setiap kata dicirikan dengan 50 angka yang
merupakan hasil pelatihan dengan menggunakan
algoritma deep learning.
Karena keunikannya dalam mendefinisikan arti dari
kata, beberapa literatur menyebutkan bahwa word
embeddings ini merupakan universal feature
extractor
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.
Kali ini, kita akan menggunakan Gensim untuk implementasi dari Word2Vec.
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
import
import
import
gensim
numpy as np
os
matplotlib.pyplot as plt
from sklearn.decomposition import PCA, KernelPCA
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
for line in open(os.path.join(self.dirname, fname)):
yield line.split()
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.
sentences = MySentences('./corpus') # a memory-friendly iterator
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
dipertimbangkan dalam proses
miminal
sebuah
kata,
jika
ingin
# window: range antara kata-kata konteks dengan posisi current word
model = gensim.models.Word2Vec(sentences, size=32, sg = 0, min_count = 1,
window = 5, iter = 10)
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
new_model = gensim.models.Word2Vec.load('./mymodel')
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
print (model.wv.similar_by_word('kita', topn=10, restrict_vocab=None))
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
word_vectors = np.array([model.wv[w] for w in word_list])
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)
red_word_vectors = dimred.fit_transform(word_vectors)
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 !
plot(word_vectors, word_list)
Plotting Word Vectors
Referensi
https://socs.binus.ac.id/2016/12/22/word-vectorrepresentation-word2vec-glove/
http://ir.cs.ui.ac.id/alfan/tutorial/gensim_w2v.html
TERIMA KASIH
Pengantar Deep Learning
Apa itu Word Vector Representation?
Umumnya, pekerjaan machine learning yang
seringkali
digunakan
adalah
untuk
mengklasifikasikan
satu
permasalahan
menjadi beberapa kelompok.
Ketika komputer diberikan pembelajaran
maka komputer akan semakin cerdas dan
bisa membedakan antara kelas yang satu
dengan yang lainnya.
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.
Biasanya, klasifikasinya dibagi menjadi 2, yaitu positif dan
negatif.
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
embeddings”
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.
• Karena maknanya berdekatan, maka nilai vektornya pun akan berdekatan.
Word Vector Representation
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.
Untuk lebih memperjelas bentuk vektor dalam word vector representation, berikut ini contoh
vektor yang terdapat pada Glove dengan dimensi 50:
Word Vector Representation
Setiap kata dicirikan dengan 50 angka yang
merupakan hasil pelatihan dengan menggunakan
algoritma deep learning.
Karena keunikannya dalam mendefinisikan arti dari
kata, beberapa literatur menyebutkan bahwa word
embeddings ini merupakan universal feature
extractor
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.
Kali ini, kita akan menggunakan Gensim untuk implementasi dari Word2Vec.
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
import
import
import
gensim
numpy as np
os
matplotlib.pyplot as plt
from sklearn.decomposition import PCA, KernelPCA
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
for line in open(os.path.join(self.dirname, fname)):
yield line.split()
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.
sentences = MySentences('./corpus') # a memory-friendly iterator
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
dipertimbangkan dalam proses
miminal
sebuah
kata,
jika
ingin
# window: range antara kata-kata konteks dengan posisi current word
model = gensim.models.Word2Vec(sentences, size=32, sg = 0, min_count = 1,
window = 5, iter = 10)
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
new_model = gensim.models.Word2Vec.load('./mymodel')
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
print (model.wv.similar_by_word('kita', topn=10, restrict_vocab=None))
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
word_vectors = np.array([model.wv[w] for w in word_list])
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)
red_word_vectors = dimred.fit_transform(word_vectors)
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 !
plot(word_vectors, word_list)
Plotting Word Vectors
Referensi
https://socs.binus.ac.id/2016/12/22/word-vectorrepresentation-word2vec-glove/
http://ir.cs.ui.ac.id/alfan/tutorial/gensim_w2v.html
TERIMA KASIH