2 Background

The Office adalah suatu acara TV series America pada tahun 1995 yang menceritakan kehidupan sehari-hari yang dialami oleh karyawan kantoran di Scranton, Pennsylvania. Acara ini sudah tayang hingga Season 9 dan memiliki peringkat 8.9/10 berdasarkan IMDb. Banyaknya orang yang tertarik terhadap serial televisi ini menyebabkan banyak orang yang tertarik untuk melakukan analisis terhadap script dialog dari series The Office. Oleh karena itu, pada kesempatan kali ini, pada artikel ini akan mencoba untuk melakukan analisis text generation pada script dialog series The Office menggunakan markov chain. Tujuan dari analisis ini adalah untuk mendapatkan suatu kalimat baru yang diperoleh dari data script The Office dengan menggunakan metode text generation markov chain.

3 Data Pre-Processing

3.1 Import Data

Dataset yang akan digunakan adalah script The Office dari package schrute. Pada artikel ini, hanya akan menggunakan script pada Season 9 untuk seluruh episode yaitu Eps 01 - 06 dikarenakan banyaknya kata yang perlu dilakukan pre-processing dan akan menyebabkan waktu untuk memprosesnya. Oleh karena itu, akan dilakukan step filtering data hanya pada Season 9 saja.

Data yang digunakan The Office Season 9 Eps 01-06 sebanyak 1,495 data dengan penjelasan setiap kolom data sebagai berikut:

  • index: index baris
  • season: index season
  • episode: index episode
  • episode_name: nama episode
  • director: director dari episode
  • writer: script writer dari episode
  • character: karakter yang membacakan dialog
  • text: teks dialog
  • text_w_direction: teks dialog dari director
  • imdb_rating: IMDb rating untuk episode
  • total_votes: total votes yang diberikan untuk episode
  • air_date: tanggal publikasi episode

3.2 Text Pre-processing

Tujuan dari artikel adalah membuat kalimat baru berdasarkan script dialog yang ada, oleh karena itu kita akan fokus pada kolom text yang berisi script dialognya. Sebelum mendapatkan text generation, kita perlu melakukan pre-processing pada kolom text. Pre-processing yang akan dilakukan pada script dialog ini diantaranya yaitu :

  • membuat semua text menjadi lowercase
  • mengubah word contraction
  • menghapus punctuation keculai tanda titik (.), koma (,), tanda seru (!), dan tanda tanya (?).
  • menghapus seluruh angka
  • menghapus double spasi (whitespace)

Setelah selesai dalam melakukan text pre-processing, selanjutnya kita perlu mendapatkan setiap kata dari kalimat yang ada. Kita akan menggunakan strsplit() untuk menjadikan kalimat yang ada menjadi satu kata pada kolom text. Selanjutnya kita akan menggunakan fungsi unlist() untuk membuat setiap kata menjadi vector.

##  [1] "all"         "right"       "jim"         "your"        "quarterlies"
##  [6] "look"        "very"        "good"        "how"         "are"

3.3 Membuat Text Generator Menggunakan 1-Gram dan Bigram

Setelah model markov chain sudah terbuat, langkah selanjutnya yaitu membuat fungsi untuk memprediksi teks yang akan muncul pada kata selanjutnya. Pada step ini, agar prediksi teks yang dihasilkan tidak hanya melihat satu kata terakhirnya, maka kita akan menggunakan 1-gram dan bigram agar prediksi kata yang dihasilkan mempertimbangkan 1 dan 2 kata terakhir sehingga kata yang akan dihasilkan atau kalimat yang akan diperoleh dari hasil text generation lebih masuk akal. (Psss…Selain itu dikarenakan komputasi yang cukup besar sehingga menggunakan 1-gram dan bigram)

3.3.1 1-Gram Teks Prediktif

##  [1] "all"         "right"       "jim"         "your"        "quarterlies"
##  [6] "look"        "very"        "good"        "how"         "are"

3.3.2 Bigram Teks Prediktif

##  [1] "all right"        "right jim"        "jim your"         "your quarterlies"
##  [5] "quarterlies look" "look very"        "very good"        "good how"        
##  [9] "how are"          "are things"

4 Model Fitting

Kata yang kita butuhkan sudah siap untuk membuat text generation. Selanjutnya kita akan membuat model markov chain menggunakan markovchainFit() menggunakan vector kata sepagai input kata dan akan kita simpan pada object fit_theoffice untuk model yang menggunakan 1-gram dan fit_theoffice2 untuk model yang menggunakan bigram.

4.1 Model Fitting 1-Gram Tokenization

Berdasarkan kata yang diperoleh dari onegram_theoffice, kita dapat memvisualisasikan hubungan dari masing-masing kata tersebut menggunakan Markov Chain Network.

Karena banyak sekali kata yang ada, sehingga network dari masing-masing kata tidak terlihat, namun dari hubungan ini kita bisa menghasilkan prediksi kata yang bisa menjadi penghubung kata selanjutnya dari kata yang kita definisikan pertama kali.

4.2 Model Fitting Bigram Tokenization

5 Prediksi Kata

Selanjutnya kita akan membuat fungsi yang nantinya akan digunakan untuk menemukan prediksi kata yang akan dihasilkan dari kata yang kita sebutkan diawal. Kita akan simpan fungsi untuk prediksi kata menggunakan 1-gram dalam objek predictive_text sedangkan untuk fungsi prediksi kata menggunakan bigram akan disimpan dalam objek predictive_text_bigram

6 Membuat Text Generation

Model untuk menjalankan algoritma markov chain telah terbuat dan fungsi untuk mendapatkan prediksi kata juga sudah kita buat menggunakan 1-gram dan bigram. Oleh karena itu, pada tahap selanjutnya adalah membuat text generation dengan cara melakukan prediksi kata yang akan muncul dari kata yang sudah kita berikan.

6.1 1-Gram Text Generation

Pertama kita akan coba menggunakan model 1-gram yang kita miliki. Kita akan menemukan prediksi kata yang diperoleh dari kata awal “you”.

##  [1] "know"   "are"    "can"    "have"   "do"     "want"   "guys"   "should"
##  [9] "just"   "think"

Selanjutnya kita akan coba buat 10 kalimat yang terbentuk dari prediksi kata diatas menggunakan fungsi text_generation dibawah ini.

## [1] "You have you got big surprise where time go this is the cards get any heart"
## [1] "You are attracted to the beat me in some colored greens what you believe this is"
## [1] "You are fake uh well we could be fun everybody say for my decision that goes"
## [1] "You ok i can i uh who are usually hit a stall you know uh me"
## [1] "You are coming down into the check thoroughness is worse than you will be an office"
## [1] "You wanna be great um mostly watercolor a bit about the phones you know i take"
## [1] "You felt the workplace ok all i am against the earth grumbling all spilling over there"
## [1] "You need to how much easier in a young guatemalan guy for a workspace same thing"
## [1] "You are you are not get the prettiest girl around i think i have been with"
## [1] "You did not need somebody gets it is that that you cannot screw this morning uh"

Nah beberapa kalimat diatas adalah 10 kalimat baru yang terbentuk apabila kita menggunakan 1-gram tokenization. Beberapa kalimat mungkin ada yang masih rancu susunannya, hal ini dikarenakan dengan menggunakan 1-gram, markov-chain akan memperhatikan satu kata terakhir untuk memprediksi kata berikutnya yang akan muncul.

6.2 BiGram Text Generation

Selanjutnya dengan menggunakan model bigram, kita akan menemukan prediksi kata yang diperoleh dari kata awal “you will”.

Beberapa prediksi kata yang terbentuk cukup lebih sinkron dengan kata “you will” yang sudah didefinisikan diawal. Kita akan coba buat text generation dari kata “you will” menggunakan fungsi text_generation_bigram dimana banyak kata yang akan dimasukkan sebanyak 20 kata dan kita akan membuat 10 kalimat baru dari kata “you will”.

## [1] "You will not be gloomy here man we are gonna run us"
## [1] "You will not i did not use um oh where is that"
## [1] "You will not promise me that several times but you are assistant"
## [1] "You will know it is just it it is only twenty past"
## [1] "You will not come out sometime to go upstairs to the regional"
## [1] "You will know it is the best jan i deserve a raise"
## [1] "You will really let the temp agency daniqua sent me down to"
## [1] "You will give more than three dollars people out there and find"
## [1] "You will not be covered sound fair good i would have to"
## [1] "You will give more than three dollars a mile it is an"

7 Kesimpulan

Markov chain dapat digunakan sebagai salah satu metode untuk membuat text generation dengan melihat network setiap kata yang kita miliki. Markov chain akan berusaha memetakan setiap hubungan dari kata yang ada dan memberikan nilai peluang untuk hubungan antar katanya sehingga dapat diperoleh prediksi kata yang rasional ketika membuat text generation. Markov chain juga dapat memprediksi kata berdasarkan n-gram kata yang digunakan tergantung pre-process yang kita definisikan diawal. Semakin besar n-gram yang digunakan dan semakin banyak data (kata) yang ada, maka akan semakin membutuhkan waktu yang lama dan semakin berat komputasinya.