Word2Vec untuk Bahasa Indonesia

Update Des 2021: Update link gdrive supaya dapat diakses tanpa minta permission (Google mengubah kebijakan beberapa bulan lalu).  Tapi saya rekomendasikan untuk tidak menggunakan Word2Vec lagi,  banyak teknik lain yang sekarang kinerjanya lebih baik seperti GPT, BERT,  XLnet.

Update Maret 2018, posting saya yang terkait: Word2Vec dengan Python (Gensim) dan Glove

Nov 2016:

Saat saya googling sepertinya belum ada yang membagi model Word2Vec untuk corpus bahasa Indonesia. Saya yakin sudah ada yang melakukan sih, tapi belum sempat membaginya.  Intinya saya akan membuat Word2Vec model untuk semua artikel Wikipedia bahasa Indonesia. Hasilnya adalah pre-trained model yang nanti bisa digunakan untuk berbagai task NLP.  Sedangkan pembahasan seputar Word2vec atau embedded word sudah banyak di internet, jadi tidak perlu saya tulis di sini lagi.

Selanjutnya saya akan bahas proses pembuatannya, tapi kalau ada yang mau langsung menggunakan model ini, dapat download (500 MB) di: drive.google.com/file/...    sedangkan untuk menggunakannya, baca deeplearning4j.org/word2vec di bagian me-load model.

Proses yang saya lakukan adalah sbb (sekali lagi anda bisa langsung menggunakan pretrained model seperti yang saya tulis diparagraph sebelumnya tanpa perlu download wipedia dan men-train-nya). Untuk mendonwload XML Wikipedia bahasa Indonesia, ambil dari dumps.wikimedia.org/idwiki/latest/  pilih file xml-nya  yang dizip seperti: idwiki-latest-pages-articles.xml.bz2.  Ukurannya tidak terlalu besar, 300MB dan setelah diunzip menjadi 1.8GB. Bandingkan dengan Wikipedia bahasa Inggris yang setelah diekstrak mencapai 55GB! Memang artikel wikipedia berbahasa  Indonesia masih terbatas.

XML ini perlu diproses untuk membuang tag dan karakter-karakter yang tidak diperlukan. Yang saya lakukan adalah memindahkan XML ini ke beberapa file teks dan satu file terdiri atas beberapa artikel.

Karena saya lebih nyaman menggunakan Java, saya menggunakan library DeepLearning4J : deeplearning4j.org/word2vec (ada penjelasan yang bagus juga tentang word2vec disana). Saya sangat anjurkan menggunakan Gradle, karena mempermudah penggunaan library. Konfigurasi Gradlenya seperti ini:

compile "org.nd4j:nd4j-native-platform:0.6.0"
compile "org.deeplearning4j:deeplearning4j-core:0.6.0"
compile "org.deeplearning4j:deeplearning4j-ui:0.6.0"
compile "org.deeplearning4j:deeplearning4j-nlp:0.6.0"
compile "org.nd4j:nd4j-x86:0.6.0"

Bagian yang perlu dimodifikasi adalah SentenceIterator yang tadinya hanya memproses satu file, sekarang memproses beberapa file. Proses training dengan konfigurasi berikut memakan waktu kira-kira 2 jam.

minWordFrequency(5)
.iterations(1)
.layerSize(100)
.seed(42)
.windowSize(5)

Setelah dicoba, ada beberapa hasil yang menarik:

  • 5 kata yang terdekat dengan Jakarta didapat: bekasi, tangerang, ciputat, setiabudi, rawamangun
  • 5 kata terdekat dengan Bandung: cimahi, bogor, bekasi, gegerkalong, salatiga  (salatiga aneh)
  • 5 kata terdekat dengan presiden: menteri, kabinet, azarov, valdis, phomvihane (tiga kata terakhir sepertinya presiden suatu negara, tapi kenapa?)
  • 5 kata terdekat dengan bakso: sate, bakmi, rujak, goreng, gorengan
  • Untuk kasus analogi klasik: king – queen = man – woman. Jika inputnya Ratu : Raja maka Perempuan: ?). Yang didapat: perempuan, laki-laki, orang, seonbi, keluarga. Harusnya laki-laki yang pertama, kenapa ini dapatnya perempuan lagi ya?
  • Kasus analogi lain: minum:air = makan: ?  hasilnya juga aneh: air, ceruk-ceruk, panoramanya, bentuang, balangdaras

Sepertinya untuk kemiripan atau kedekatan kata model ini sudah cukup baik, tapi untuk analogi masih berantakan. Perlu penelitian lebih lanjut.

Berikutnya saya mau coba corpus berita dan twitter yang dikumpulkan mahasiswa saya.

8 tanggapan untuk “Word2Vec untuk Bahasa Indonesia”

  1. Pak Yudi, saya mahasiswa tingkat akhir di Universitas Diponegoro Semarang. Topik skripsi saya akan menggabungkan LDA dan Word2Vec untuk klasifikasi dokumen berita Bahasa Indonesia. Kalau diijinkan bolehkan saya melihat source code dari Bapak untuk referensi? Saya rencananya menggunakan python untuk pemrosesan LDA dan Word2Vec nya. Terima kasih

    1. Ya sebaiknya ditanyakan pada si pembuat code-nya 🙂 Tapi saran saya, lebih baik buat dual boot windows-linux atau menggunakan virtual machine Linux. Terlalu banyak masalah kalau menggunakan Windows.

    1. Sepertinya sekarang sudah bisa, biasanya sudah ada yg porting ke Windows. Posting ini ditulis saat awal2 syntaxnet yang masih harus dicompile manual.

  2. halo pak, saya mahasiswa tingkat akhir di institut teknologi del pak. pak apakah saya bisa meminta code word2vec untuk corpus komentar youtube atau word2vec untuk kamus besar bahasa indonesia pak? terimakasih pak

Tinggalkan komentar