Melatih Mesin Menulis Lirik Lagu

Bisakah mesin menulis lagu seindah lagu Linkin Park?

Satria Adi Putra
UNIKOM Codelabs
6 min readJul 21, 2019

--

Pembukaan

Jarvis dan Friday merupakan Artificial Intelligence (AI) ciptaan Tony Stark yang kita cintai 3000. Kedua AI tersebut dibangun dengan Natural Language Processing (NLP).

NLP memungkinkan komputer dapat mengerti bahasa manusia. Banyak aplikasi dunia nyata yang mengimpelmentasikan NLP seperti pada Chatbot Rinna, pendeteksian email spam atau bukan spam pada aplikasi email, dan fitur quick reply dari Gmail.

Di artikel ini, saya akan mencoba mengaplikasikan NLP dan melatih mesin untuk menulis lirik lagu berdasarkan lagu-lagu dari Linkin Park.

Tl;dr

Tepat 2 tahun yang lalu, vokalis dari band rock Linkin Park, Chester Bennington ditemukan meninggal gantung diri di rumahnya. Saya sangat menghormati Chester, karena Chester merupakan salah satu contoh nyata kalau masa lalu seseorang tidak menentukan masa depan mereka.

Sings like an angel and screams like a devil

Suara dan lagu ciptaan Chester telah menyelamatkan banyak orang mungkin termasuk saya.

Saat mendengar berita kematiannya, saya merasa terpukul. Hanya mendengarkan semua lagunya lewat Joox yang bisa saya lakukan. Selain itu saya memilih untuk tidak melakukan apa-apa hari itu.

Saya ingin memberikan tribute kepada Chester seperti layaknya fans yang lain, sayangnya bernyanyi bukanlah bidang yang saya tekuni. Musik bukan sesuatu yang saya pahami. Jadi yang saya lakukan hanya berusaha terus belajar dan selalu percaya suatu hari saya akan dapat memberikan tribute kepada Chester.

Dan sekarang adalah hari tersebut. Bukan dalam bentuk musik, tapi sebuah mesin yang akan dilatih untuk meniru cara Chester dan Linkin Park menciptakan lagu.

Memang belum sempurna, tapi tidak ada yang bilang mesin ini akan berhenti latihan sampai sini saja kan? :)

Let’s Build It

Data yang akan digunakan dapat diunduh di sini. File tersebut berisikan lirik lagu Linkin Park dari album Hybrid Theory, Meteora, Minutes to Midnight, A Thousand Sun, Living Things, The Hunting Party dan One More Light

Model yang akan kita bangun akan menerima input berupa 50 karakter alphabet, lalu akan memprediksi karakter berikutnya hingga akhirnya tercipta kata-kata yang akan menjadi lirik lagu kita.

Seperti biasa, hal pertama yang dilakukan adalah mengimport semua library yang akan digunakan

Kita akan menggunakan Keras untuk membangun Artificial Neural Network (ANN) kita. Selain itu juga kita akan menggunakan layer LSTM (Long Short-Term Memory) yang berguna agar ANN yang akan kita bangun dapat mengingat karakter sebelumnya.

Selanjutnya adalah mendeklarasikan konstanta batasan jumlah karakter yang akan kita gunakan dalam model. Konstanta ini juga menentukan jumlah input layer pada ANN yang akan kita bangun.

Lalu kita akan membaca data dari file sebelumnya dan menyimpannya di variabel lirik. Jangan lupa untuk memanggil fungsi .lower() untuk memastikan model yang kita bangun Case Insensitive.

Kita akan ekstrak karakter apa saja yang terdapat pada data latih lirik yang kita miliki. Ini untuk mempermudah merepresentasikan sebuah karakter sebagai sebuah vektor. Representasi karakter menjadi vektor ini dibutuhkan agar komputer dapat mengenal karakter tersebut. Pada dasarnya komputer hanya mengenal bilangan biner 0 dan 1.

Karakter yang kita miliki mencakup huruf a-z, angka 1–8, beberapa tanda baca serta beberapa huruf bukan inggris. Sampai sini kita bisa memutuskan untuk melakukan Data Cleaning dengan menghapus semua huruf bukan inggris dan tanda baca. Untuk artikel ini saya tidak akan menghapusnya untuk melihat seberapa hebat mesin yang akan dilatih dalam penggunaan tanda baca.

Di sini kita akan membangun dataset dari data yang kita miliki. Dataset yang akan dibangun memiliki 2 kolom, kalimat yang diketahui dan karakter selanjutnya dari kalimat tersebut.

Setelah itu kita akan memetakan setiap karakter dengan indexnya dalam vektor begitu juga sebaliknya. Ini untuk memudahkan merubah kalimat menjadi vektor untuk diprediksi serta memudahkan dalam merubah hasil prediksi menjadi kalimat.

Langkah terakhir adalah merubah dataset yang sudah kita bangun menjadi vektor agar komputer dapat mengenalinya. Dataset kita sudah siap untuk dilatih ke dalam model ANN.

Sebelum melatih ANN, kita harus mendefinisikan ANN yang akan dilatih terlebih dahulu.

Itulah ANN yang akan kita latih. Waktunya latihan!

Seperti pada artikel sebelumnya, untuk melatih ANN kita hanya perlu menambahkan satu baris tersebut. Tunggu beberapa menit. Saya butuh waktu kurang lebih 1 jam untuk melatih ANN tersebut. Setelah latihan selesai waktunya kita melakukan penulisan lirik lagu.

Karena kita menggunakan fungsi aktivasi softmax, maka hasil prediksi merupakan array dari kemungkinan tiap karakter muncul. Jika semua kemungkinan dijumlahkan, maka hasilnya sama dengan 1.

Untuk mengetahui karakter yang paling cocok untuk kalimat yang kita masukkan adalah dengan mencari index kemungkinan terbesar. Itu merupakan fungsi dari get_highest_index.

Kita membutuhkan variabel generated untuk menyimpan lirik yang dihasilkan oleh ANN. Variabel sentence merupakan kalimat awal yang kita berikan kepada ANN dan selanjutnya ANN akan memprediksi karakter berikutnya hingga 400 karakter. Perlu diketahui, panjang sentence harus sama dengan konstanta SEQUENCE_LENGTH. Lirik yang dihasilkan adalah sebagai berikut:

Wow cukup bagus kan? Ada beberapa kata yang kacau seperti screat, tunsion, edg dll. Selain itu juga kita dapat melihat bahwa ANN yang kita bangun belum terlalu pintar dengan tanda baca, karena ada kurung buka yang tidak ia tutup.

Kita akan coba mengganti sentence dengan kalimat “I’m trying to tell you something to shut yourself ”.

Wow lumayan bagus ya.

Masih banyak pengembangan yang bisa dilakukan untuk model ini. Seperti menghapus kurung, kurung siku dan angka. Selain itu juga mungkin model ini akan lebih baik jika menggunakan arsitektur Seq2Seq.

Terakhir ada 2 pelajaran yang bisa kita dapatkan dari vokalis Linkin Park, Chester Bennington. Pertama seburuk apapun masa lalu kamu, tidak akan mengubah hak kamu untuk sukses di masa depan. So forgive your past and move on. Dan yang terakhir uang bisa membelikan kamu kebahagiaan, tapi menjadi bahagia belum tentu menyelesaikan masalah yang kamu punya kan?

Okay, stay positive and see you again next time :)

--

--