Misalkan kita punya kumpulan lima kata-kata baik dan enam kata-kata jelek seperti dibawah. Kata-kata baik kita labelkan dengan angka "1" sedangkan kata-kata jelek kita labelkan dengan angka "0".
import numpy as np kata = ["Bagus!", "Ampuh!", "cantik!", "Mantap!", "Cakep!", "Jelek", "Rusak", "Nol", "Omong kosong", "Busuk", "Tidak"] label = np.array ([1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0])
Kemudian kata-kata di atas kita rubah menjadi integer
# merubah kata menjadi integer from keras.preprocessing.text import one_hot vocab_size = 50 encoded_docs = [one_hot(d, vocab_size) for d in kata] print(encoded_docs)
Karena panjang maksimal dari elemen kata adalah dua buah (yakni kata "Omong kosong"), kita jadikan kata-kata lainnya memiliki panjang dua buah kata.
from keras.preprocessing.sequence import pad_sequences max_length = 2 padded_docs = pad_sequences(encoded_docs, maxlen=max_length, padding='post') print(padded_docs).
Hasilnya adalah sebagai berikut,
array([[ 3, 0], [24, 0], [26, 0], [40, 0], [44, 0], [34, 0], [13, 0], [20, 0], [14, 7], [43, 0], [49, 0]], dtype=int32)Jika tanpa pad_sequene, maka nilai '0' tidak akan tercetak pada array diatas. Sama dengan mencetak variable 'encoded_docs'
Kita sekarang sudah siap untuk mencari word embedding dari kata-kata yang kita definisikan di atas tadi.
Kita buat model JSTnya sebagai berikut,
from keras.models import Sequential from keras.layers import Embedding, Flatten, Dense model = Sequential() model.add(Embedding(vocab_size, 8, input_length=max_length)) model.add(Flatten()) model.add(Dense(1, activation='sigmoid')) # compile model model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['acc']) # lihat rincian model print(model.summary())
Kemudian, kita latih sebagai berikut,
# fit/latih model model.fit(padded_docs, label, epochs=50, verbose=0) # evaluasi model loss, accuracy = model.evaluate(padded_docs, label, verbose=0) print('Accuracy: {}'.format(accuracy*100))
Hasilnya adalah sebagai berikut,
Accuracy: 90.909094
Jadi, dengan word embedding ini, kata-kata baik dan kata-kata jelek dapat dikenali dengan baik. Ini masih contoh yang sangat sederhana, namun dapat diaplikasikan pada kasus yang lebih luas. Misalnya pada sentiment analysis di twitter.
Referensi;
- https://mubaris.com/posts/word2vec/