Transcript for:
Streaming Chatbot Generatif dan Prosesnya

Terima kasih. Terima kasih telah menonton Oke, halo semuanya Selamat datang di channel Modding Python Assalamualaikum Wr Wb Salam sejahtera untuk kita semua Selamat pagi Ya, di kesempatan kali ini kita akan Melakukan streaming Untuk Hai kelanjutan dari yang kemarin ya itu tentang chatbot generatif yang mungkin sambil nunggu dia kalau ada teman-teman yang sudah hadir di sini bisa absen dulu dari mana aja boleh saya sambil menyiapkan datanya dulu ya jadi data kita kali ini adalah data hai hai Hai untuk mentraining model sequence to sequence Oke ya mungkin saya coba push dulu ya sebentar ya Hmm mit min m richin ok hai oke kita siapkan dulu ya eh board dan lain sebagainya kita nampaknya masih sepi ya pagi ini ya tapi gapapa akan tetap lanjutkan streaming kita hai hai Oh iya dan buat temen-temen yang belum subscribe channel ini boleh ya di subscribe dulu Sambil menunggu temen-temen yang lain Terus juga kalau temen-temen ingin Apa namanya Ingin membantu channel ini bisa scan QR Code yang ada di Samping saya, samping mana nih? Samping sini ya? Samping sini Oke Udah ada 2 orang kayaknya sih yang support ya, thank you buat supportnya Kalau temen-temen mau support juga boleh, tapi saya gak maksa ya, terserah Oke, sudah kita buka whiteboard dulu Hai Oke emm mungkin gue langsung pindah ke screen coding ya Jadi data yang akan kita gunakan ini adalah data humantext.txt sama robotext.txt gitu Jadi intinya nanti yang menjadi input sequencenya itu adalah si human text.txt seperti ini dan yang menjadi outputnya itu adalah si robot text.txt kita akan melakukan training untuk model sequence sequence to sequence ya jadi yang menjadi input itu adalah sequence dan yang menjadi output itu juga sequence jadi makanya disini kita butuh dua data set nah langkah pertama adalah kita akan mencoba untuk melakukan processing dulu terhadap data teksnya gitu ya terhadap data teksnya hai sekarang kita akan coba langsung aja buka notebooknya create Hai new jupiter notebook terus disini kita save dulu sebelum kita ngeceve disini chatbot generatif.ipy nb Hai Oke select kernel disini gua pakai kernel tfdl kebetulan tfdl ini adalah kernel untuk menjalankan model di dalam GPU jadi kebetulan untuk trainingnya gua enggak pakai device yang gua pakai buat live streamingnya karena terlalu berat gitu jadi ini gua pakai device yang satu lagi yang punya GPU gitu sehingga bisa di training dengan lebih maksimal oke selanjutnya mana nih oke hmm Oke kita langsung aja mulai eksplorasi datanya dulu Jadi... Oh iya sebelum-sebelumnya gue lupa Jadi kan kita kan pengen melakukan pembuatan chatbot dalam bahasa Indonesia ya Kebetulan data kita adalah data bahasa Inggris seperti ini Jadi langkah pertama yang dilakukan adalah Simply tinggal melakukan translate saja ya data-data yang ada di sini jadi ini udah gue translate dengan menggunakan Google Translate API ya jadi gue bikin semacam Apa token untuk akses si Google Translate API itu sehingga nanti gue bisa langsung iterate dan ini bentuknya seperti ini datanya jadinya ini datanya sudah berbentuk bahasa Indonesia walaupun masih banyak seperti ada emoticon seperti itu kita harus coba untuk lakukan preprocessing dulu Nah untuk datanya teman-teman bisa akses di GitHub seperti biasa link di GitHub ada di kolom deskripsi jadi tinggal Hai nah coba dilihat saja Oke kita langsung saja mulai untuk melakukan preprocessing dulu untuk data yang kita punya jadi tadi kita masuk ke sini ya nah terus hal pertama yang kita gunakan adalah pandas ya Jadi ini Oke, supaya lebih lega. Port Pandas SPD. Nah, kebetulan data kita adalah data TXT ya. Tadi kalau misalnya kita lihat TXT dengan 2 file. Jadi kita pengen coba load datanya di dalam bentuk Pandas DataFrame. Terus nanti kita gabungin jadi satu. Oke, jadi pertama Human Data. Human Data sama dengan PD. .readtable terus disini data garis miring nama filenya ya di sini ada auto nggak ada auto complete nya rename aja lah text indo versi 2 txt sekarang kita coba lihat pastikan dulu dia bisa terlalu ya Oke dia sudah ada datanya cuman disini ada mulai dimana mulai ini sebenarnya termasuk dalam data textnya gitu jadi disini kita tambahkan header non dulu ya headernya non terus kita kasih nama column gitu ya rumen data columns Hai sama dengan human ya kita kasih namanya human saja terus kita lakukan hal yang sama untuk data robot yang roboteks jadi robot data nih sekarang oke oke robot di sini roboteks Indo enggak pakai dua roboteks Indo ya roboteks Indo betul Hai eh kalau sudah kita coba jalankan Oke sudah berhasil selanjutnya kita coba gabungkan kedua data ya jadi Data, oh iya sebelumnya kita cek dulu deh human data.shape 2363 kolom dan kalau misalnya kita lihat yang robot data 2363, sama ya? ya sama, jadi kita bisa gabungkan kedua tabel ini ya dengan cara kita langsung aja bikin data gitu ya sama dengan dia dimasukin ke dalam Dictionary human terus disini adalah data human eh human data ya human data terus disini robot lalu kita masukin disini robot data nah terus data frame nya ini adalah pd.data frame si dictionary nya jadi disini kita ketik data terus df head oke mungkin disini saya kasih satu parameter lagi kayaknya masih ada error, gini aja deh hmmm, ya header none terus habis itu koma backend python kita lakukan hal yang sama untuk data yang kedua bukan backend engine engine python nah terus kita lakukan untuk data set yang kedua sama juga oke shape Hai Oke dia masih error apa yang terjadi kecebaliannya data setnya seperti apa sih jadi human data head human ya oke terus yang robot human-human indeksnya sudah sama terus eh sorry robot data head human oke salah dimana nih oh oke kita Masukin, ini dia bentuknya dalam data frame deh Jadi disini kita harus tambahin human dulu Terus disini ditambahin robot Nah, oke Oke, sorry Nah, ini udah bener nih ya Jadi datanya seperti ini Ehm, oke Sebelumnya, saya lihat dulu chat mas Indra Adakah library yang recommended buat processing text bahasa Indonesia selain Paisastra? Sebenarnya yang namanya preprocessing data text itu kan dilakukannya manual ya Dan gak tergantung sama bahasa sebenarnya mostly Jadi kayak misalkan tanda baca Dan lain sebagainya Mungkin pakai NLTK juga cukup Kecuali kalau misalnya nanti pengen melakukan Post tagging atau NER Segala macam Mungkin lebih baik kalau misalnya kita Coba training sendiri Biar lebih akurat Dan lebih Sesuai dengan apa yang kita inginkan Soalnya kalau kita pakai library-library kayak gitu Kadang-kadang suka gak sesuai Sama yang kita inginkan karena biasanya yang Public-publicnya itu kurang bagus juga Jadi makanya Kalau untuk preprocessing aja gitu ya Kayak cash holding blablabla Dia independent terhadap bahasa Jadi gak harus pakai library yang bahasa Indonesia Kalau di Sasrawi kan Yang bahasa Indonesia nya tuh Pai Sasrawi ya Ada stemming sama stop word aja Dimana sebenarnya Ya stemming bisa sih Maksudnya stemming bisa kita gunakan Tapi kalau stop word itu kan Kita bisa bisa pake dari mana aja gitu gak harus dari library kayak gitu sih oke ini datanya sudah seperti ini cuman disini masih banyak hal yang perlu kita tweak dari data ini, ini masih sangat jelek dan kita coba lihat aja kalau misalkan 10 atau 20 data kita lihat apakah responnya udah bagus apa enggak si robotnya dari data ini Mulai, nah ini kayaknya kalau mulai ini kita ganti dengan hai aja gitu ya Terus nanti dia bakal menjawab hai apa kabar gitu ya Oh terima kasih saya baik-baik aja bla bla bla Terus jawabannya ini sudah sore gitu Jadi jangan berekspektasi modelnya bakal bagus ya Tapi intinya kita bisa mengerti lah konsep untuk nge-train data yang sequence to sequence gitu Berapakah umur anda? Saya 22 tahun Saya kurus dengan lambut coklat Oke ini masih oke lah Jika anda seorang manusia Saya pikir obat adalah cari Tidak kamu lucu Betul kan terima kasih Kamu payah Saya meniup pikiran Yang mungkin mind blowing kali ya Gatot lah Pokoknya Seperti itu datanya apa adanya. Jadi kita akan coba melakukan training dari sini. Tapi sebelum melakukan training tentunya kita akan melakukan preprocessing dulu beberapa hal. Yang pertama adalah kita ganti sesuatu yang berada di sini. Kurung siku itu dengan kata hi. Jadi kayaknya kalau kurung siku mulai terus kurung siku apalagi mungkin itu kita ganti aja dengan kata hi. Jadi di df human itu sama dengan df.human.apply lambda x. Kita perlu... regex disini ya jadi disini re dot subs Disini kita bikin pola regexnya Jadi pola regex Bentuknya seperti ini Backslash Kurung siku W itu maksudnya kata Kalau ada kata Di dalam kurung siku Katanya bisa lebih dari 1 Seperti ini bentuknya Maka Kita ganti ini dengan High ya df human bla bla bla terus ini juga kita copy lalu kita paste robot gitu ya disini juga robot ya kita ganti seperti ini kita coba jalanin oke kalau kita coba lihat df nya lagi Nah tadi yang ada kata startnya ini berubah menjadi high. Karena kita sudah menuliskan pola untuk wordnya seperti ini. Oke. Kita delete dulu ini. Lalu selanjutnya kita melakukan konversi huruf kecil. konversi huruf kecil gampang ya kita DF human sama dengan DF human apply disini lambda x x.lower lalu DF robot sama dengan DF.robot .apply lambda x x lower nah selanjutnya setelah kita konversi semuanya ke dalam huruf kecil nih pasti sudah berubah ya ke dalam huruf kecil misalnya kita cek harusnya sudah tidak ada lagi huruf kapital ya sekarang kita mau coba menghilangkan tanda baca dari sini, kita coba hilangkan tanda baca dengan menggunakan cara yang sama kayak kemarin, import string, lalu disini kita coba exclude si set string punctuation oke, setelah kita set, df human sama dengan df human apply Lambda X join CH for CH in X if CH not in exclude Ini caranya sama persis kayak yang kemarin ya Jadi kita mau coba melakukan looping sebenernya ya di dalam string itu Terus ada gak sih yang merupakan tanda baca, kalau ada kita coba hilangkan gitu ya dia akan coba cek, kalau misalnya ada kalau misalnya dia itu adalah tanda baca maksudnya dia tidak akan di join di dalam string ini oke, ini kurang R oke, disini kita lakukan hal yang sama ke robot oke Hai yahni remove punctuation ya jadi hapus tanda baca Oke selanjutnya kita hapus digit ya atau kita hapus angka di dalamnya Ayo kita coba remove digits sama dengan str.mc trans digits punctuation eh sorry string.digits maksudnya Oke lalu disini kita lakukan hal yang sama Pakai lambda juga Lambda x x.translate Si remove digit Lakukan hal yang sama Test Robot maksudnya Untuk data robot Oke, ya kita coba lihat dulu DF headnya Apakah tanda baca dan angka sudah hilang? Oke, tanda baca sudah hilang Terus angka juga sudah tidak ada ya Saya telah berbicara dengan pengguna gitu ya Ini seharusnya kan ada angkanya 143 pengguna seperti itu ya Tapi ini cuma spasi doang Jadinya dia Sudah hilang angkanya Tapi disini masih ada emoticon Sebenernya kalau chatbot ada emoticonnya kan manis sebenernya ya Cuman gak yakin aja bakal bisa dimasukin ke dalam training gitu Jadinya kita hilangin aja lah Oke kita hilangin Disini Gue copy aja bagian ini Terlalu banyak Nulis apply Lambda X Dimana X nya.encode Asci Terus kita ignore Ini maksudnya apa Jadi dia itu Kalau misalnya merupakan karakter Karakter yang bukan karakter asci Di ignore sama dia Jadi kalau Untuk emoticon yang kelihatan gambarnya gitu ya Dia itu bukan karakter asci Karakter asci itu apa sih? Gampangnya karakter asci itu adalah karakter yang ada di keyboard kita Tapi karakter yang normal gitu ya Jadi keyboard-keyboard yang layout US gitu ya Atau layout UK Semua tanda baca atau semua simbol yang ada di dalam keyboard ini adalah asci Yang jadi adalah asci Apa namanya asci? asci karakter ya jadi kita hanya melakukan pemrosesan terhadap karakter-karakter yang bisa dibaca atau yang ada kode asci nya ya asci nya yang utf-8 Oke di sini robot jalanin Oops sebentar ya Bytes Oh di code oke kita lihat apakah data kita sudah cukup rapih ya sudah tidak ada lagi emoticon dan lain sebagainya semuanya sudah di proses dengan baik dan kita siap untuk melakukan modeling setelah ini cuma disini saya mau coba kasih comment untuk setiap preprocessingnya deh biar teman-teman nggak bingung remove digits berarti ini adalah menghapus angka ya terus yang ada disini ini itu adalah menghapus emoji kalau emoticonnya pakai karakter juga sudah dihapus ya sama Si ini ya hapus tanda baca Jadi kalau misalnya pengen tweak gitu ya Maksudnya pengen botnya bisa lebih manis Dengan menghasilkan tanda baca Ini bisa di Hilangkan gitu atau coba dipilih Tanda baca-tanda baca apa aja yang mau dihilangkan gitu Kan biasanya kalo emoji kan pake Kurung buka, kurung tutup Strip, titik dua Titik koma gitu ya Untuk titik koma bla bla bla Kayaknya itu perlu dihapus gitu Selain itu mungkin bisa dicoba Tapi disini saya pake yang standar saja dulu Biar gak terlalu memusingkan gitu Oke Eee Halo, terima kasih Mas Dodik dari Bali Teman-teman yang lainnya dari mana nih pada nih? Boleh dong di komen dulu biar rame Oke, kita lanjut ya Nah, selanjutnya adalah Saya mau coba melakukan splitting data Jadi Untuk melakukan preprocessing kita lakukan barengan gitu ya Tapi untuk langkah-langkah selanjutnya Saya lebih memilih untuk di split dulu Kenapa? Karena untuk pemrosesan NLP ini akan sangat riskan Yang namanya data leakage Saya akan coba jelaskan dulu mengenai data leakage yang dimaksud itu apa Hai Om musik awan ide ya jadi kita berbicara tentang data leakage atau lebih tepatnya fitur leakage kali ya fitur leakage ya Apa itu data leakage dan fitur leakage nah hai hai Feature leakage ini akan terjadi apabila kita melakukan preprocessing sebelum split. Loh tadi kita melakukan preprocessing sebelum split ya. Terus apa maksudnya? Maksudnya preprocessing yang disini adalah preprocessing yang membutuhkan Data Training Membutuhkan data sebagai variable Jadi kalau misalnya tadi menghapus tanda baca Terus menghapus angka dan lain sebagainya Itu kita tidak membutuhkan Data training. Jadi mau itu data training, mau itu data testing, prosesnya sama. Ketemu tanda baca, ilangin. Ketemu angka, ilangin. Ketemu emoji, ilangin. Tapi kalau misalnya preprocessingnya ini membutuhkan data sebagai variabelnya, maka lebih baik di-split dulu sebelum itu. Contoh. Misalkan saya punya data. Punya data tabular aja. Data tabular. tabular data tabular ini kita mau lakukan preprocessing misalkan apa? misalkan minmax scalar misalkan misalnya kita mau melakukan di data tabular ini minmax scalar apa yang dibutuhkan dari minmax scalar ini? minmax scalar ini butuh nilai minimum setiap Kolom sama maksimum setiap kolom. Nah, artinya apa? Artinya si preprocessing ini membutuhkan data untuk dicari nilai minimum sama nilai maksimumnya. Misalkan kita melakukan preprocessing ini sebelum splitting, apa yang terjadi? Oke, misalkan si data ini. Ya si data di scaling ya min max lalu di split. Ada train sama ada testing. Akibatnya dia ini akan ada yang namanya data leakage. Di sini kan dia menentukan nilai minnya berapa untuk setiap kolom dan nilai maksimumnya berapa setiap kolom. Nilai minimum dan nilai maksimum di sini itu kan bisa berada di train, bisa berada di tes. Secara tidak langsung, kita sudah tahu bentuk data tesnya seperti apa jadinya. Ngerti nggak maksudnya? Jadi misalkan nilai minimumnya ini di satu kolom, di kolom A minimumnya itu 2,5 misalkan. Nah si nilai minimum yang 2,5 ini Kalau dilakukan min max scalar sebelum splitting, maka si nilai, si kolom A yang nilainya 2,5 bisa ada di data training, bisa ada di data testing. Sehingga secara tidak langsung kita seolah-olah... yang memberi tau si model tenang aja data yang masuk gak bakal kurang dari 2,5 nih di kolom ini padahal kita pengen si data testing ini adalah data yang kita tidak tau sama sekali sehingga kalau misalnya kita mau cara yang proper atau cara yang bener data ini harusnya di split dulu split ada data training Ada data testing. Nah baru kita lakukan minmax scalar disini. Minmax scalar. Di fit. Di fit dari data training. Nah untuk data testnya gak boleh di minmax scalar. Boleh. Cuma di transform saja. Jadi nanti data-data nilai minimumnya. Misalkan di data training ini nilai minimum untuk kolom A 3,0. Terus di data testing ternyata di kolom A ada yang lebih kecil dari 3,0 yaitu 2,5. Nah nanti kita perhitungan scalingnya pakai minimum yang training apa minimum yang testing. Kita pakai minimum yang training. Karena asumsinya si data testing ini kita nggak tahu bentuknya kayak gimana. Bisa jadi angkanya itu lebih kecil, nilai minimumnya lebih kecil dari nilai minimum yang ada di data training. Dan nilai maksimum dari sebuah kolom yang ada di data test bisa jadi lebih besar dibandingkan dengan data testing. Intinya kita nggak tahu dan kita nggak mau tahu gitu. Karena yang kita perlu tahu itu hanya data trainingnya saja. Nah kalau untuk di NLP biasanya si data training ini akan kita bentuk vocabulary-nya. Kan seperti yang dicontohin kemarin ya ada vocabulary-nya. Nah kemungkinan vocabulary yang dibentuk dari data training itu nggak lengkap sehingga di data testing ada vocabulary yang nggak ke cover. Nggak apa-apa, nggak masalah. Itulah poin kita. Jadi gimana caranya? Hanya dengan menggunakan data training kita bisa melakukan prediksi gitu ya. Atau bisa kita lakukan pemodelan dengan lebih general atau dengan bagus gitu. Seperti itu kira-kira ya. Jadi kita harus splitting datanya sebelum kita membuat vocab dari modelnya Untuk vocab dan lain sebagainya itu sama persis dengan yang kita lakukan di hari kemarin ya Saat membuat chatbot dengan menggunakan intent classification Hai ya nyangkut pen-nya sebentar ya oke sekarang kita coba lanjut lagi ke kodenya sebelumnya saya mau coba baca komen dulu Oh masih Indra di Bandung saya juga di Bandung nih jadi kapan-kapan ketemu lagi oke horas Medan Iya Mas DL Thank you udah nonton. Mas Adi, Bang ada tutorial cara koneksiin VS Code dengan Python. Sebenernya kalau di VS Code tinggal install plugin aja sih. Jadi intinya tinggal klik ini, terus cari extension Python aja. Sudah harusnya sudah terinstall termasuk sama Jupyter Notebooknya. Jadi enggak. Setting di VS Code itu gak terlalu susah seperti di Sublime Text menurut saya ya. Jadi dicoba aja. Nanti coba di klik extension terus coba dicari extension Python seperti itu. Oke kita lanjut ya. Jadi setelah kita preprocessing yang kita lakukan adalah kita split datanya. Hai ya split data di sini bikinnya gini aja deh DF train DF test sama dengan train test split Oh belum belum diimport Oke DF terus test size nya kita bikin 10% saja From sklearn.modelselection import train test split Oke Ya Kita coba lihat dulu shape-nya Dftrain.shape 2126 conversation Lalu dftest-nya Oh headship maksudnya Oke 237 data Lumayan ya Nah nanti untuk melakukan trainingnya Agak sedikit berbeda Jadi nanti kita coba Lihat saja Oke pertama-tama kita Cari dulu Atau kita Buat vocab vocab dari data training jadi kita gak peduli vocab-vocab yang ada di data testing karena yang kita tau disini hanya data training saja jadi vocabulary sama dengan sebuah set karena dia adalah kata-kata yang unik seperti itu selanjutnya kita looping si dftrain nya For index, row in df train it rows, it rows, it rows terus kita gabungkan antara human kolom dengan robot kolom yang dikonket dengan menggunakan spasi saja kan kita pengen lihat vocab nya gitu ya jadi supaya langsung dihitung kita gabungin aja ke dalam satu sentences sentences sama dengan row human kita gabungkan dengan row robot, nah selanjutnya kita bikin vocab nya vocabulary .update Kita update Sentences.split Jadi kita split Kalimatnya ini dengan menggunakan Spasi seperti itu Oke selanjutnya Kita coba lihat disini Kita print ukuran Vocab oke F aja, ukuran vocab oke ukuran vocabnya adalah 3460 vocab 3460 terus selanjutnya kita mau lihat semua kata-kata yang ada di dictionary jadi kalau ini kan kata-kata unik ya yang ada di dalam data ini ada sebanyak 3460 data gitu ya nah sekarang kita mau coba kalau mau hitung semuanya, semua data gitu ya semua token maksudnya alphacab ya sama dengan ini terus kita lakukan hal yang sama jadi copy saja Oke, disini kita ganti vocab.append i for i in sense Oke, seperti ini terus kita print Hai ah jumlah semua token baik itu yang unik ataupun yang tidak Hai semua token yaitu ada len alfokat oke Jumlah semua token atau semua vocab-nya ada 32.150 Ini cuma buat kita simpen aja sih Jadi kalau kita pengen coba lihat All vocab 15 kata Yang tersimpan pertama di dalam all vocab Kita lihat seperti ini ya Hai hai yang disana apa kabar Ini kalau misalnya dia vocab Dia tidak bakal ditulis 2 gini ya Karena kan ingat yang data yang pertama kita kasih kata hi, dia itu akan menjawab hi yang disana gitu kan. Jadi makanya disini ada hi, ada hi lagi. Ini cuma buat data kita saja, nggak perlu dipikirin ya. Kita cuma pengen lihat vocabnya aja disitu ada apa aja. Oke setelah kita lakukan itu Sekarang kita mau menghitung frekuensi untuk setiap kata. Kemarin kan kalau pakai text factorization secara otomatis, pertama dia akan membuat vocab yang unik, terus yang kedua dia akan menghitung frekuensinya, dan dia akan memberi threshold gitu. Jadi misalkan vocabnya itu kita maunya cuma seribu doang. Kita maunya cuma seribu doang, jadi vocab ke seribu satu ke bawah itu nggak bakal dimasukin ke dalam vocab. Nah ini juga kita akan lakukan hal yang sama. sama ya tapi secara manual kalau kemarin kan kita melakukannya secara otomatis ya kita pakai hitung frekuensi vocab dan hapus yang tidak perlu atau yang sedikit Oke jadi pertama adalah import collection terus selanjutnya counter Ini untuk penghitungnya, kita kebetulan pakai Apa namanya? Modul counter yang ada di dalam collection Mungkin gini aja lah, importnya From collections import counter Kita pakai modul counter Counter all vocab Terus kita bikin dictionary-nya Dictionary sama dengan Oke sekarang kita Lihat dulu si Dictionary nya Kita sudah berhasil Melakukan perhitungan terhadap vocab-vocab yang ada di dalam all vocab ini jadi gunanya si all vocab ini ya selain buat data kita, kita bisa menghitung karena kan kalau yang dari token unique kita gak bisa menghitung jumlahnya tapi kita harus simpan dulu ke dalam all vocab jadi all vocab yang ada disini perlu diingat ini adalah kombinasi antara data human dan data robot, ya jadi bukan cuma human saja Ya, gak apa-apa karena dia ada di dalam data training. Jadi, kita lakukan hal itu gak masalah. Oke, terus selanjutnya kita bikin threshold. Bikin threshold, dia itu minimal ada berapa vocab. Baru bisa kita list ke dalam vocab kita. Jadi, kita bikin threshold misalkan 3. Jadi, kalau misalnya si vocab ini kurang dari 3, maka dia gak akan kita... pakai untuk proses selanjutnya ini adalah cara yang bagus untuk melakukan eliminasi dari vocab-vocab yang kita mau proses kalau kita bisa mengeliminasi vocab yang kita pengen gunakan di dalam pemodelan maka ini selain bisa lebih ringan terus pas masukin ke dalam word embeddingnya itu bisa lebih kecil dimensinya jadi Ingat-ingat kemarin kenapa kita butuh jumlah vocab Karena jumlah vocab ini akan digunakan untuk one hot encoding Sebelum masuk ke dalam embedding layer Jadi kita lakukan itu Terus disini pakai sorted dictionary Sama dengan sorted dari si dictionary underscore ya Saya kasih namanya dot items Terus reverse sama dengan true. Kenapa? Karena secara otomatis dia melakukan sortir dari kecil ke besar. Sedangkan yang kita mau lakukan adalah dari besar ke kecil gitu kan. Jadi reverse true terus keynya adalah lambda x posisi ke satu ya. Dictionary itu kalau misalnya kita ambil itemsnya, maka dia akan membentuk sebuah list di dalam list. Atau list di dalam tuple atau tuple di dalam list. Pokoknya dua dimensi array. Dimana masing-masing elemen yang ada di dalam array tersebut atau list tersebut itu ada array lagi. Yang mana untuk elemen pertamanya itu adalah key-nya dan elemen kedua itu adalah value-nya. Kebetulan disini kita lihat key-nya itu adalah si vocab-nya dan value-nya itu adalah si jumlah elemen atau jumlah frekuensi dari si vocab tersebut. Jadi disini kan kita pengen melakukan sortir terhadap ini kan, terhadap yang... items nya atau terhadap value nya ini bukan i, 1 jadi bukan melakukan sortir terhadap key nya tapi terhadap jumlah nya oke, nah setelah kita lakukan ini baru kita masukin ini ya masukin si threshold nya jadi x for x in sorted Dictionary if x1 lebih besar dari threshold. Jadi yang kurang atau sama dengan 3 kita take out si vocabnya. Ya terus all vocab sama dengan x0 for x in sorted. Oke sekarang jumlah vocab kita tinggal 923 dari all vocab berarti dari 32.150 Ya dia itu 923 dan ini perlu diketahui ini sudah unik. Kenapa? Karena kalau misalnya kita lihat dari sini kan dia sudah melakukan agregasi. Terus di sini kita lihat dia itu cuma mengambil X0 nya. Berarti dia hanya mengambil elemen-elemen Dictionary dari sorted dig Itu hanya keynya saja Dimana keynya itu pasti yang unik Ya saya ulangin lagi Jadi awalnya kan Kita melakukan perhitungan Perhitungan token dimasukin ke dalam all vocab, lalu di dalam all vocab ini kita counter otomatis dia membentuk sebuah dictionary, ya sebuah dictionary yang keynya itu adalah vocabnya dan value-nya adalah jumlah atau frekuensi vocabnya itu nah terus di sort terus di setelah Ambil yang lebih dari threshold. Nah, terus di sini kita ambil X0, yaitu key-nya si sorted dig. Key-nya sorted dig itu pasti unik. Nggak mungkin nggak unik, karena kan dia hasil perhitungan. Vocab A ini, vocab B ini, vocab C ini, dan seterusnya. Jadi, makanya di sini... Learn all vocab adalah 923 Perbandingannya adalah si vocabulary yang ini 3460 ini Jadi dari 3000 sekian vocabulary Kita bisa mereduksi jadi tinggal 923 vocab Dan ini tergantung dari kita melakukan Ininya ya melakukan splittingnya ya Jadi ini kan kita melakukan splitting dan kebetulan dia ini tidak menggunakan random state ya kebiasaan saya sih gak menggunakan random state biar yaudah natural aja kita mendapatkan hasil yang beda ya gak apa-apa karena semuanya ini random gitu kan oke seperti itu ya, df train, df train, betul ya oke deh, sekarang kita lanjut ke langkah selanjutnya, yang langkah selanjutnya adalah kita bikin dictionary word to index dan secara bersamaan kita juga butuh index to word jadi kita bikin dua-duanya, ya oke, jadi buat dictionary word to index dan index to word Buat apa kalau misalnya ditanya? Ini buat nanti sebelum masuk ke word embeddingnya. Ingat, model machine learning tidak bisa dimasukin sesuatu yang bukan angka. Sehingga data-data, kata-kata atau token-token yang ada itu kita... Ubah dulu ke dalam sebuah angka. Nanti direpresentasikan ke dalam one hot encoding. Baru bisa masuk ke embedding layer. Nah untuk mengubah ke angka-angkanya itu. Karena kemarin saya sudah bilang kita akan lakukan hari ini secara manual. Kita bikin secara manual word to index dan index to word. Sekarang kita coba lihat. Misalnya indexnya mulai dari satu saja. Terus kita bikin. Word to index adalah sebuah diksineri kosong dan index to word itu juga sebuah diksineri kosong. Oke, for e, saya naikin takut nggak kelihatan. For e in all vocab, ya ini adalah vocab-vocab yang sudah dikumpulkan di langkah sebelumnya. Kita lakukan word to index Ini adalah si indexnya Sorry, word to index E Ingat, E itu adalah kata Word to index, berarti keynya kata Ix itu index Jadi ini kata keberapa, ini kata keberapa, kata keberapa gitu Kalau index to words Kebalikannya Ini berarti indexnya, mana ini adalah si wordnya. Nanti kita akan main-main sama ini lah, sebelum kita masuk ke modeling yang lebih ribet. Nah, jangan lupa kita update si indexnya. Oke? Nah, sekarang kita coba lihat. Misalkan saya mau tahu kata hi. Word to index kata nama. Nama itu ada di index keberapa sih? Oke, nama itu ada di index 102. Sekarang kalau misalnya kita lakukan sekebaliknya, index to word, lalu kita masukin index 102, maka 102 itu isinya nama. Jadi sebenarnya, kalau ada tipe data yang bisa komutatif, jadi kita manggil key keluarnya value kita manggil value kalau nanya if mending pakai itu tapi ya biar teman-teman lebih paham ya saya bikin dua kayak gini walaupun ini kelihatannya kurang apa ya kurang optimal optimal optimal tapi nggak papa ya yang penting teman-teman bisa paham intuisinya misalkan kata ke 100 apa sih melihat Apa kita lihat disini kalau misalnya kita kasih kata melihat dia ngeluarin angka 100 juga? Yes, betul. Jadi karena logiknya seperti itu maka kita lakukan hal ini. Oke ya, itu yang kita lakukan. Nah selanjutnya kita tambahin penanda. Kita tandain penanda karena di dalam model sequence to sequence ini kan outputnya sequence. Ya outputnya sequence dan... Kita harus kasih tanda mana yang menjadi awal kalimat dan yang mana menjadi akhir kalimat. Dan kita akan mencari string yang depannya itu, depannya si karakter khusus untuk mengawali kalimat dan berakhirnya di string yang untuk mengakhiri kalimat. Nah nanti kita melakukan for loopnya secara manual sebenarnya. untuk melakukan prediksinya jadi disini saya pakai string start sec start sequence sama end sec jadi di dalam word to index kita masukin si start sec ini masuk ke berapa? kita lihat Jumlah vocab-nya berapa? Ini setiap orang beda ya. Kalau di sini jumlah vocab saya adalah 923. Sehingga di sini saya akan masukin starseq itu di 924. Dan yang end sequence adalah 925. Manual banget memang. Tapi nggak apa-apa, buat belajar jadi kita lebih paham. Gimana sih cara memprosesnya seperti itu? Oke, sekarang yang Index to word Ya, ini Berarti indexnya adalah 924 Dan katanya Adalah start Sequence, seperti ini Lalu yang end sequence Sama disini, 925 Oke, jadi di dalam Apa namanya, di dalam Dictionary kita, baik yang Word to index dan index to word Sekarang sudah mengandung Start sec sama end sec Ya, tapi disini Belum ditambahin ke datanya kan Ya, belum ditambahin ke datanya Oh iya, terus kita coba Update vocab size nya Vocab size Sama dengan land dari index to word ya terus ditambah 1 ya terus kita coba lihat vocab size Ada 926. Kenapa ada 926? Karena kita mulai indexnya itu. Sebenarnya dari 1 sih sebenarnya ya. Cuman gak apa-apa kita tambahin 1 aja biar lebih aman lah. Daripada kurang kan mending lebih gitu ya. Jadi ada 926. Index to worthnya itu sebenarnya 925. Cuman kita tambah 1. Jadi 926. Oke. Selanjutnya. Ayo kita tambahkan start sequence dan n-sequence di dalam data training ya jadi tambahkan start set dan n-sec di data training tapi untuk yang robot saja ya karena ini kan yang menjadi labelnya Berarti kalau mau nambah vocab harus nambah text miningnya? Iya bener. Enggak, nambah vocab itu berarti kan harus dari datanya. Karena kan kita melakukan generate vocab itu kan dari data. data train kan jadi kita coba potong-potong dan lain sebagainya Nah kalau misalnya mau nambah secara manual kita lakukan ini ya kita append ke dictionary nya gitu berarti ini adalah vocab yang tidak ada di data training kalau kita nambahin secara manual kayak gini boleh gak? ya terserah boleh-boleh aja, cuman yang perlu jadi catatan adalah kita tidak melakukan penambahan vocab itu dari data testing, karena data testing adalah sesuatu hal yang kita sama sekali tidak boleh tahu di awal jadi ya kalau nambah vocab harus ditambah lagi teksnya seperti ini Oke ya, kita lanjut. Setelah ini kita lakukan dftrain robot sama dengan df robot.apply lambda x kita tambahin start sequence, start sec di depan. Terus spasi, terus ditambah x, ditambah spasi di awal, terus end sequence. Untuk data testingnya perlu nggak? Tidak usah. Karena data testing tidak masuk ke dalam proses training dan proses evaluasinya adalah proses evaluasi yang sifatnya linguistik. Jadi bukan evaluasi yang dari modelnya secara sendiri gitu ya. Kayak akurasi gitu kan dari modelnya sudah disediakan perhitungannya. Tapi kalau misalnya untuk kasus ini kurang bagus dengan menggunakan akurasi yang sudah ada jadi kita akan melakukan evaluasi dengan suatu metrik nanti saya akan jelaskan metrik apa yang dimaksud ya terus kita lihat DF train ya Di sini kita lihat ya di dalam robot ini. Jadi bukan hanya Hai yang di sana apa kabar gitu ya. Seperti yang di atas. Tapi ada StarSec di depan. Dan ada Nsec di belakang. Ini untuk memberi informasi kepada modelnya. Bahwa StarSec ini adalah sesuatu yang selalu digunakan di awal kalimat. Dan Nsec ini adalah yang selalu digunakan di akhir kalimat. Kita harus kasih dia pembelajaran seperti itu. Ya supaya dia nanti. Nanti bisa mengenerate kata dengan lebih baik. Gak kayak kita. Sebagai manusia kan bisa. Belajar sendiri Awal kalimat pake huruf besar Kalau si robot ini Harus di Dikte Jadi setiap Ini dikasih starseq Dan di akhir dari respon Dikasih nseq Untuk yang human perlu gak? Gak perlu Karena kan human ini kan Inputnya Jadi ini adalah Yang dari manusianya Jadi gak perlu di Kasih starseq Starsec dan Nsec Oke Sekarang kita akan masuk ke modeling Tapi sebelum modeling Saya akan kasih tau bentuk modelnya seperti apa Model generatif Untuk text ini Jadi bentuk model generatif Dari LSTM Bentuknya seperti ini Jadi Model generatif Ish Model generatif Ya Berbeda dengan model yang kemarin kita pelajari Yang kita pelajari Kalau kemarin itu modelnya ini Eh kok Ternyata Bentar, bentar, bentar. Kayaknya dia nggak beres nih. Jalan-jalan terus nih. Oke. Model yang kemarin, ya. Model yang kemarin, dia mengeluarkan klasifikasi. Ya, jadi dari data Model terus klasifikasi Klasifikasinya apa? Misalkan salam Atau misalkan pesan Atau misalkan kemarin ada nge-loading python Apa segala macem Dia klasifikasi Nah model yang sekarang kita mau buat Dia bakal mengenerate sebuah data Jadi model Jadi model yang dibuat ini Keluarannya adalah data Atau sampel sampel data namanya model generatif, itu yang membedakan ya, itu satu nah, gimana skemanya, skema modelnya itu bentuknya kayak gimana, jadi bentuknya seperti ini jadi misalkan kita punya input sorry inputnya kotak kita punya input masuk ke dalam model ya, terus informasi dari hasil model sebelumnya dibawa ke proses selanjutnya, ditambahkan dengan data sekuensi selanjutnya, dan seterusnya. Jadi ini sebenarnya adalah neural network. yang dijajarin gitu dan masing-masing output neural network yang ada dari waktu sebelumnya itu dijadikan input lagi di neural network yang sekarang gitu. Jadi ini kayak ada informasi-informasi yang dibawa gitu. Jadi misalkan saya pergi ke pasar gitu kan. Jadi... Informasi-informasi sebelumnya tuh dibawa terus gitu Dari sini oh ini saya Saya ngapain? Saya pergi Pergi apa? Pergi ke mana disini? Ke pasar Jadi siapa kalau misalnya disini ditanyain gitu ya Siapa yang pergi ke pasar? Saya Tau dari mana? Ya tau dari informasi yang dibawa dari Apa namanya? Age ini gitu ya Dan jangan dibayangkan Ini tuh neural network yang cuma satu unit doang. Yang ada di sini itu bisa jadi adalah fully connected layer yang banyak juga sebenarnya. Jadi yang neural network yang biasa kita pelajari. Jadi ini hanya bentuk simplifikasinya saja. Karena kalau kita gambarkan seperti itu akan membingungkan sekali si arsitektur si RNN ini. Ini yang menjadi inputnya. ya terus nanti akan dibawa ke dalam output ya misalnya saya pergi ke pasar I go to market ya misalnya nih modelnya masih belum belajar grammar yang bener lah misalnya gitu ya jadi seperti ini arsitekturnya ya ini arsitektur yang Teman-teman sudah sering lihat Ketika belajar RNN atau LSTM Jadi yang bagian ini Adalah bagian encodernya Dan yang bagian ini Adalah bagian decodernya Cuman Kalau secara teori sih kita ngeh ya Cuman implementasinya gimana Gimana caranya si Model LSTM ini Mengeluarkan sequence lagi Nah Disini tantangannya Jadi, idenya kayak gini Misalkan kita pengen Melatih sebuah Neural Network itu Misalkan kita mau latih Kedalam satu set Conversation seperti ini Halo, selamat pagi Nah, misalkan Pagi juga jawabannya. Nah ini gimana cara nge-trainnya? Ya sekarang kita coba lihat secara detail. Gimana cara nge-trainnya? Jadi nge-trainnya seperti ini. Seperti biasa pertama encoder. Encoder tidak ada yang sulit. Karena kemarin kita juga melakukan encoder. Cuma hasilnya itu cuma satu kelas gitu kan. Hai yang berbeda dalam nanti bagian decodernya jadi untuk Halo selamat pagi sama ya jadi Halo dimasukin ke dalam layer word embedding ya terus neural network sama disini juga selamat Oh ya dimasukin ke embedding Aduh Nah, gitu. Pagi. Ya. Ini encoder yang kemarin kita lakukan ya. Tinggal masukin aja ke LSTM. Masing-masingnya itu direpresentasikan ke dalam word embedding dan lain sebagainya. Nah, yang menjadi output gimana nih? Jadi kita akan melakukan yang namanya recurrency. Atau semacam recurrent. Jadi... Nanti yang pertama kita pengen coba prediksi adalah kata pertama dulu. Misalkan start sec gitu kan. Ini kan harus di upit sama start sec sama end sec ya. Start sec. Ya jadi misalnya yang pertama diprediksi start sec dulu. Nah nanti untuk yang selanjutnya. Saya coba gambarin lagi nih ya. Hai Oke saya copy ini Ups tasmenta Oke saya copy lalu saya pindahkan ke ini enak banget ya copy sini ya Oke, start sec. Nah, setelah itu kita fit lagi modelnya dengan tambahan input di sini. Start sec. Terus kita kasih tahu bahwa ini harusnya keluarannya adalah selamat. Nah, setelah kita lakukan itu kita ulang lagi. Kita ulang lagi. Hai nah jauh banget nih Nah di sini berarti kita tambahin selamat di sini ya terus dimasukin ke dalam sini nanti yang keluar adalah pagi Hai terus selanjutnya sampai nsek ya Jadi kita melakukan looping terus sampai dia ketemu NSEC baru nanti data yang selanjutnya gitu. Jadi dalam satu set conversation ya. Satu set ya ada input ada jawaban. Itu di fit berkali-kali ya. Dapat kata pertama di fit lagi bersama kata pertama si responnya ya. Nanti keluar kata kedua. Nanti kata kedua diambil di fit lagi ke situ ya. Dan seterusnya dan seterusnya kayak gitu. Nah pertama yang perlu kita buat disini. Ini adalah data generator dulu. Jadi dari data-data yang tadi. Kita ubah. Kedalam bentuk representasi. Index. Dan ditambah padding. Jika perlu. Kita akan coba lihat. Nanti hasilnya seperti apa. Tapi disini kita bikin data generator nya dulu. Biar lebih dapat. Intuisinya seperti apa. Jadi kita bikin data generator. f word to index max length sama number conversation Oke, jadi kita bisa tentukan juga berapa panjang kalimat yang mau kita masukin Sama berapa jumlah conversation yang mau kita training dalam satu epoch Jadi bisa gak semua data train kita training sebenarnya Tapi kalau misalnya mau semuanya ya boleh-boleh aja Jadi kita bikin ada X1, X1 ini adalah si input X2 ini adalah si input Hai output tapi yang mau dimasukin ke input juga nanti kita lihat deh gimana Terus yang ada y yaitu adalah si output dari si neural networknya jadi akan ada 3 list seperti ini nah selanjutnya kita bikin inisiasi dulu misalkan n sama dengan 0 oke selanjutnya while true ya terus kita lakukan iterasi for index, row in train df iterows yang kita lakukan adalah pertama kita bikin sequence si inputnya sequence human sama dengan word to index dari si word for Word in row human dot split If word in word to index Jadi kita ekstrak si input yang di input oleh si human Bukan input yang di input oleh human Input yang berasal dari kolom human Kita lihat disitu Kita iterasi, terus masing-masing kalimat atau conversation kita split menjadi perkata. Nah, terus masing-masing kata di convert ke dalam bentuk index. Kalau misalnya ada di dalam word to index. Gitu ya. Jadi, pertama itu yang perlu dilakukan. Lalu yang kedua, if human, kita padding. Kita padding dengan menggunakan pad sequences. Jadi, disini kita harus import dulu pad sequence jadi kita import disini aja ya from tensorflow.keras.preprocessing.sequence import pad sequence ya jadi kita import si pad sequence nya untuk mem padding kalau misalkan si jumlah katanya itu tidak atau kurang dari si maxlens ya kayak gitu terus di sini kita tinggal tambahin pad sequences ya pad sequences dari si sequen human dengan Max lengthnya adalah max length. Dan dia pad sequence ini bukan hanya untuk padding juga. Tapi dia akan otomatis memotong sequence yang lebih dari max length. Jadi ini sangat praktikal sekali untuk NLP yang kita kerjakan maksudnya. Value sama dengan 0. Ini untuk nilai paddingnya. Terus paddingnya kita lakukan pause. Jadi di akhir katanya. Ada pray. Kalau pray itu di awal kata. Di awal sequence. Jadi di padding dulu. Terus baru katanya. Ada pause. Pause itu katanya dulu semuanya sampai habis. Baru di padding. Kita lakukan paddingnya itu ya. Make sense. Oke selanjutnya. Yang terakhir adalah sequence robot. Ini juga kita lakukan hal yang sama. Kita copy aja dari sini. Ya kita copy sama dengan ini terus disini diganti jadi robot Nah terus dia paddingnya pas kapan? Nah ini triknya disini Kita akan melakukan padding tapi pakai for loop dulu ya kita looping dulu Ya gini loopingnya kita coba lihat ya Semoga dengan membaca kode teman-teman paham maksudnya seperti apa gitu Kalau misalnya Dirasa penjelasan saya kurang jelas gitu ya. Jadi 4E in range dari 1 sampai land sequence robot. Oke. Sequence robot berarti ini adalah kata yang dibentuk oleh sequence robot ya. Dia belum di padding. Jadi dia apa adanya. Kalau misalnya katanya cuma ada 1 gitu ya. Dari responnya dia cuma ada 1. Kalau ada 2, ada 3, ada 4 ya tergantung. Jadi bukan sebanyak MaxLen. Tapi sebanyak si sekuens robot itu sendiri. Jadi in sequence ini sama dengan sekuens robot dari 0 dari yang awal sampai ke i. Jadi gini, jadi misalkan tadi ya selamat pagi juga gitu ya. Maka pertama-tama kita lihat nih dari 1 kan, dari 1 sampai ke sekuens robot. Berarti 1, misalnya kalau 1 berarti. apa namanya kosong dulu ya kosong dulu eh iya kosong dulu ya jadi bingung saya jadi kosong dulu terus start sequence ya terus baru kata kedua kata ketiga kata keempat kata kelima gitu ya nah out sequence nya adalah sisanya bukan sisanya ah sekuen robot ke i kita simulasikan di bawah dulu deh sebelum kita lebih jauh di dalam padding ya, jadi misalkan kalimat sama dengan halo start sequence dulu halo Selamat pagi and sequence nah terus kita mau coba lihat si X sama Y nya yang apa yang jadi in sec sama yang jadi out sequence selama di proses for loop ya for oh ini di split dulu split dulu kalimat oh ini aja deh dot split Nah gitu ya. Nah selanjutnya setelah kita split disini. Kita looping. For i in range. Dari 1 sampai len kalimat. Nah. Kita print aja. Biar kelihatan. Ya. In sec. Ini adalah si. Kalimat. Sampai ke i. Dan. Print. Foutsec Ini adalah Kalimat ke I Ya gitu Biar keliatan maksudnya apa Jadi dari Kalimat yang di atas Keluarnya jadi apa Jadi Pertamanya start seg dulu Jadi start seg gak dimasukin ke dalam outputnya Jadi dia adalah Sebagai triggernya gitu Start seg, out segnya halo Terus ketika in segnya kita Masukin start seg halo Maka out segnya selamat Start seg hello selamat Out segnya pagi Start seg halo selamat pagi end sequence Nah kalau udah nyampe end sequence Berhenti udah dia Gitu Ya nanti di dalam modelnya juga dimasukinnya kayak gitu Sama seperti apa yang tadi saya contohin ya Jadi ketika dapet satu output gitu ya Nanti outputnya itu akan jadi input lagi di iterasi selanjutnya Mengeluarkan kata selanjutnya Nanti kata selanjutnya dimasukin lagi ke input Dapet kata selanjutnya Sampai dapet nsec Semoga jelas ya Jadi dari sini bentuknya seperti itu Oke. Nah terus kita lakukan berarti. In sequence. Berarti kita pad sequence aja. Ya kan. Jadi si in sequence nya. Misalkan star sec doang. Yaudah sisanya padding sampai habis. Sampai max length. Terus yang kedua. Star sec halo. Terus padding semua. Sampai max length. Dan seterusnya. Jadi disini pad sequence. Copy lah. Copy disini. Ya ini sequence Insect ya Max length, max length Value 0, padding post 0 ya Sama Terus selanjutnya yang di out sequence diapain Ya jadi yang di Out sequence Kita lakukan to categorical Jadi ibaratnya sama kayak kita melakukan multi-class classification aja. Jadi to categorical si outsec, outsequence. Terus jumlah kelasnya adalah jumlah vocab. Ya kan? Karena dia one hot encoding. Oke, sama ya kayak gitu. Oke, to categorical belum di-import. Jadi kita import dulu to categorical. .keras.utils import to kategorical Oke, udah ya Jadi kira-kira kode-kode yang ada disini Tiap barisnya paham ya Jadi kita membuat sebuah generator Intinya seperti itu Jadi setelah sudah dapet In sequence, out sequence apa Yaudah kita append aja Berarti si x1.append Si sequence human Jadi si inputnya ini Nggak kita iterasi seperti In sequence ya Jadi yaudah kita masukin apa adanya Nah yang X2 nya adalah Si sequence robot yang Dijadikan input dimana dia harus bertahap Ya jadi X2 Append terus in Sequence Nah selanjutnya yang Y ini kita append Si out sequence nah kayak gitu jadi ada x1, x2, x3 terus disini kita terminate kita break kita tampilkan hasilnya jadi jika n sama dengan number conversation maka kita bikin u sama dengan NP array Atau kita langsung aja gini aja deh Kita langsung yield Si NP array X1 Koma NP array X2 Koma Y Ingat ya, masukinnya begini. Jadi disini saya kasih komen. Jadi outputnya adalah X1, X2, Y. Jadi yang X ini kan input ya. Nanti model LSTM-nya itu ada dua input. Input dari human sama input dari output yang di-generate di iterasi sebelumnya. Jadi ada 2 nanti dijadikan 1 Terus nanti keluarnya adalah si kata selanjutnya Harusnya gitu Jadi makanya disini NPRX1, NPRX2, sama NPRY NPR belum di import Import sampai SNP Oke Nah setelah itu Kita refresh si X1 X2 sama Y jadi Data kosong lagi Terus endnya dimulai dari 0 lagi. Dia akan lakukan itu berulang. Yang ada di atas. Jadi 1 set itu tergantung jumlah max lengthnya berapa. Misalkan 10 conversation. Berarti 1 set itu ada 10 percakapan di dalam situ. Ini adalah generatornya. Yield itu untuk apa? Yield ini sama seperti return. Cuman dia berbeda. Berbedanya dia itu yield itu akan menghasilkan generator sedangkan return itu kan hasilnya ya. Yield ini akan lebih memory friendly dibandingkan dengan return. Karena return itu kita istilahnya memasukkan apa namanya langsung menyimpan nilainya saat itu juga. Tapi kalau misalnya yield ini enggak. Dia cuma kayak ngasih instruksi dulu. Baru nanti ketika dia diiterasikan baru dia muncul. Saya contohin kayak gini. Jadi misalkan gini. Def misalnya jumlah si X1 sama X2. X1 sama X2 nya itu kita anggap berupa list gitu ya. Jadi for i. in range length x1 ya jadi disini kita lakukan apa saya lupa jadi yield x1i tambah x2i ya misalnya lakukan ini ya kalau misalnya kita mau menjumlahkan 123 123 sama 111 Dia hasilnya generator Kecuali kalau kita paksa dia untuk jalan baru dia menjalankan jadi dia belum menghasilkan sesuatu disini dia belum menghasilkan sesuatu dia berupa generator kecuali kita lakukan ini next begini nah baru dia dijalankan seperti itu kalau misalnya kita coba next lagi oh harusnya ini si jadi jumlahnya ini kita masukin ke dalam variable iter jadi kalau misalnya kita next ether hasilnya 2, kita next lagi ether, baru keluar yang kedua 3 gitu ya, jadi dia kalau di trigger baru jalan, tapi kalau misalnya nggak di trigger untuk jalan maka dia nggak bakal ngejalanin, jadi dia cuman pas udah di definisikan kayak gini yaudah, oh ini harus ngejumlahin antara vektor 1 sama vektor 2 jadi ini dia ngejalaninnya setelah dia itu dipanggil gitu jadi ibaratnya apa ya kayak lazy evaluation ya kayak gitu mirip sama return tapi beda Bang tutorial tensorflow untuk pemula di mana ya saya nggak bikin tutorial tensorflow pemula saya bikinnya pytorch kalau teman-teman mau tutorial tensorflow pemula komen ya Saya takutnya kalau bikin gitu tapi demandnya udah banyak gitu sama kayak tensorflow kemarin makanya saya nggak agak kurang semangat gitu ngelanjutinnya karena nggak tau dari penontonnya juga kurang gitu mungkin saya coba bikin yang practical-practical dulu baru nanti wah nih kayaknya perlu dibikin tutorialnya baru saya bikin tutorialnya jadi kalau approach saya beberapa waktu yang lalu itu bikin dulu tutorial TensorFlow tutorial, eh sorry tutorial PyTorch tutorial OpenCV tapi belum ada prakteknya mungkin jadi belajar cuman nggak tahu nih gunanya buat apa gitu jadi makanya saya belum bikin jadi nantilah kalau saya bikin ini saya bikin nanti kalau misalnya tertarik oke dah kita sudah bikin generatornya kita mau coba generatornya ya mau coba generatornya sekali jadi misalkan disini kita bikin data gen ini adalah data generator Hai terus kita bikin misalkan DF train tapi kita sampel saja begini aja deh biar kelihatan datanya gitu ya di sini saya lakukan data sampel sama dengan DF train sampel 2 terus ini kita bikin data sampel dari sini wuih Data Sample, Word to Index, sama misalkan 50 kata gitu ya. Terus Conversation-nya DF Sample, sejumlah sampelnya. Oke, DF Data Sample. Oke. Hai kita lihat ya data sampelnya adalah ini Xiaobing anang Xiaobing Xiaobing adalah buat hiburan dari Microsoft juga tepatnya sangat populer di Cina Oh ini data Cina ya Oke kita lihat isi dari data gain ya kita langsung aja next data gain ingat data gain bentuknya generator jadi kita harus trigger dulu supaya dia jalan ya Wah nih Kayaknya saya salah nih agak-agak lama nih ternyata. Oke ini saya terminate dulu deh ya. Kita tidak bisa melihat karena terlalu lama. Ya kita terminate aja gak apa-apa. Intinya bentuknya seperti itu nanti. Jadi ada X1, ada X2, ada X1, ada X2 gitu. X2 nya ada banyak. Jadi kalau misalnya tepatnya sangat populer di Cina. Jadi bayangannya nanti untuk X1, Xiaobing itu angka berapa adalah angka berapa buat... Dari Microsoft juga, terus dia dipading sampai 50 panjangnya. Nah, terus untuk set yang pertama, starseq dulu. Starseq, terus outputnya tepatnya. Nah, nanti untuk data yang kedua, baru X2-nya starseq tepatnya. Nanti si Y-nya itu adalah sangat. Nanti untuk iterasi ketiga, atau data ketiga. Jadi nanti itu dibikin satu data, satu data. Dibikin satu data, satu data. Jadi istilahnya nanti ya, ujung-ujungnya kita melakukan klasifikasi. Multiklas aja sebenernya Cuman kita akalin supaya dia itu bisa Dapet Atau bisa nge-generate Seolah-olah nge-generate data gitu Jadi Bentuknya ginilah Biar Tau lah Jadi halo Selamat pagi terus outputnya startsec, pagi juga nsec ya jadi nanti hasil dari jatah generator nya itu adalah x1 disini x2 disini y jadi halo, selamat, pagi ya misalkan cuman ada 3 lane nya 3 gitu ya jadi disini startsec ya startsec 0 0 ya terus y nya adalah pagi Nah nanti data kedua Halo selamat pagi Nah nanti x2 nya start sec Terus pagi 0 ya padding Terus ini disini juga ya Terus data ketiga Halo selamat pagi Nah nanti x2 nya start sec Pagi juga. Nanti outputnya adalah NSEC. Nah ini jadi dari satu conversation ini. Bisa jadi 3 data. Ini kalau max lengthnya 3. Kalau max lengthnya 50. Terus datanya terus bertambah. Ya bisa jadi 1 data jadi ada 50 kata. Kira-kira seperti itu. Oke kita lanjut. Aduh biasaan nih. Mouse nya. Hai macet Oke hmm Oke kita lanjut ke training ya nih sudah mulai training ya training pertama kita bikin konfigurasi trainingnya dulu ya jadi ada Max Lens kita bikin Max Lens 50 saja ya atau kalau misalnya merasa kegedean bisa dikurangin ya terus input chat ya Hai ini adalah input shape sama dengan Max Lens Oke oke nya kita perlu eh diapas aja kelihatannya ada error sini kita import dulu apa aja perlu kita importnya dari tensorflow disini Oke di pertama from tensorflow.keras.layers import ada input ada input ada dance ada drop out yang kita pakai drop out juga terus embedding terus lstm terus disini from tensorflow .keras.models import model Sama mungkin nanti kita coba load model Hai nah disini kita tambahin ad juga deh untuk menambahi si input dari X1 sama si X2 ya oke ya itu aja kayaknya kita coba langsung melakukan training dari di data gen kita jadi ada input chat nanti itu kita jadikan x aja, eh sorry input x deh input x sama dengan embedding dimana input dimension nya adalah ukuran vocab nya terus output dimension nya adalah kita bikin misalkan 50 ya Mas zero sama dengan true. Terus ini kita masukin si input chat. Oke terus selanjutnya kita bikin input x sama dengan drop out. Drop out supaya tidak over fit. Kita bikin misalnya 0,3 dulu. Nanti kalau misalnya dirasa kurang bisa ditambahkan lagi. Jadi drop out terus. input X sama dengan LSTM LSTM 256 misalkan si input X oke ya jadi untuk data inputnya kita masukin ke layer embedding terus di drop out 30% lalu dimasukin ke dalam LSTM drop out itu ibaratnya kita mau aktifkan beberapa age gitu ya supaya informasi penting tuh nggak lewat dari satu age saja tapi bisa terdistribusi ya biasanya kalau misalnya informasi hanya lewat dari satu age itu yang membuat data apa modelnya itu jadi overfeed ibaratnya kayak kita lagi nge-gym nih ya nge-gym angkat beban gitu ya kita cuma pakai tangan kanan doang ya tangan kanan doang akibatnya apa? Nanti tangan kanannya gede sebelah Tangan kirinya Gak ikutan gede Oke, ini ada error Kita lihat errornya itu apa File to allocate memory Oke Kita coba lagi deh Biasa kalau kita pake Hai judah memang seperti itu ya oke ini udah udah oke ya Jadi tadi cuman masalah memori saja Oke sekarang kita masuk ke yang output chat ini kita bikin sama saja ya kita bikin sama ini kita ganti jadi output chat ini maksudnya si x2 ya maksudnya x2 yang menjadi apa namanya menjadi output dari Note yang ada sebelumnya Nah dari sini Kita ganti ini input-inputnya jadi output X Oke Semuanya kita bikin sama aja Ini sama semua Kita jalanin Yang perlu kita pastikan adalah outputnya itu harus sama Antara yang dari input sama yang dari output Kenapa? Karena disini kita mau bentuk penambahannya itu di add atau ditambahkan Ditambahkan Kenapa nih out of memory lagi? Oh iya, failed to allocate memory lagi. Saya nggak tau nih kenapa ya. Oke, coba kita jalanin lagi. Hai coba di-restart dulu ya udah restart dulu sebentar Oke, kita jalanin dulu dari awal ya. Biasalah kalau GPU-nya seadanya ya memang begitu. Jadi harus pandai-pandai mengalokasikan memori supaya tidak butan. Oke bisa nih harusnya Oke bisa Jadi memang harus di restart dulu Oke sekarang adalah proses penyatuan modelnya Ya Decoder Sama dengan add Kita tambahin Dari layer input dengan output sebenarnya penambahan apa namanya penggabungan kedua input gitu ya, dua input itu bisa dilakukan dengan cara apapun kalau saya disini menggunakan penjumlahan supaya dimensinya nggak lebar gitu. Bisa juga di-concate sebenarnya. Tapi kalau di-concate kan jadi hasil outputnya jadi 2 kali lebih gede gitu kan. Jadi makanya disini saya pakai add. Tapi bisa dicoba juga kalau dengan menggunakan merge atau dengan menggunakan concate hasilnya seperti apa. Terus nanti tinggal lakukan decoder. Sama dengan dense. Ya 256. Activation. Hai sama dengan relu relu terus disini dibikin decoder terus decode sorry output Hai sama dengan dance layer dengan outputnya adalah sifo cap size karena hasilnya adalah one hot encoding ya terus activation nya adalah softmax ya Ayo kita masukin dari si decoder Yaudah dari sini kita gabungkan modelnya ya sama dengan model terus input sama dengan input chat selanjutnya output chat ya terus disini output sama dengan output Oke, jadi inputnya adalah input chat sama output chat, X1 sama X2. Nah, yang menjadi outputnya itu adalah labelnya. Oke, kita jalanin. Oke, kalau kita lihat model summary. Oke, model summary ini. Jadi ada input 1, input 2, di embedding, dropout, LSTM, blablabla. Ini semuanya ada totalnya 1 juta sekian. parameter yang bisa di training termasuk embeddingnya kita enggak pakai embedding yang custom jadinya bentuknya seperti itu Oke kita compile aja langsung model compile si lossnya itu adalah kategorical cross entropy ya dengan optimizer nya Adam ya lagi-lagi optimizer apa-apa itu adalah pilihan jadi silahkan di sesuaikan dengan data yang dimiliki ya Nah terus baru kita konfigurasi training ya jadi ipo nya 10 itu ya Hai number Conversation sama dengan 25. Jadi kita akan melakukan training per 25 conversation. Dalam satu dataset. 25, 25, 25, 25, 25. Karena ingat dari satu conversation aja bisa jadi 3 baris. Itu kalau sequenya sedikit. 25 itu udah lumayan banyak. Dan kita perlu menggunakan. GPU untuk itu. Oke kita konfigurakan stepnya. Stepnya itu adalah sejumlah DF train ya dibagi number conversation. Oke jadi dalam satu epoch akan terdapat 85 steps. Sekarang kita mau coba bikin Data Generator nya dulu ya jadi generator train sama dengan data generator Dftrain, word to index terus max length nya tadi udah kita tentukan sama number conversation ya terus baru kita lakukan fit kebetulan di API yang baru Untuk nge-fit model ini bisa langsung dengan menggunakan fit. Tidak perlu lagi dengan menggunakan model.fit generator. Jadi kita bisa langsungkan begini. Model.fit. Terus si generator-nya. Jadi tidak harus X, Y lagi. Tapi bisa berupa generator. Makanya tadi kita bikin generator. Supaya lebih memory friendly. Setelah kita bikin generator. Kita bikin epo nya. Sebenarnya epo nya nanti kan ada 10 yang di atas ya. Cuman disini kita bikin 5 dulu ya untuk ngeliat dia bisa training apa enggak. Atau 3 aja dulu deh. 3 dulu. Nah terus step per epo. Kita bikin steps ya sejumlah steps. Udah begini aja dulu. Kita mau liat dulu apakah modelnya bisa di training apa enggak. Coba jalanin Indeks 925 Oh sorry sorry Tadi kita sempat ngejalanin Ulang terus Jumlah Vocab nya berubah Kita jalanin lagi dari ulang Kita harus perhatikan jumlah Vocab nya tadi yang keluar Karena kan dia random ya Jadi beda, kita coba jalanin lagi Jalanin, jalanin, jalanin Jalanin, jalanin, jalanin Oke 910 ya Jadi kalau disitu 910 berarti ini 911 Ini 912 912 Disini juga sama Disini 911 berarti disini 911 Lalu disini 912 Gitu ya Jadi harus disesuaikan dengan jumlah vocab yang di atas oke kita jalanin semua jalanin semua tadi input output model compile step dan kita coba jalanin oke kita tungguin ya apakah dia bisa nge fit Hai keknya dia enggak keluar lognya yang tapi harusnya keluar sih karena kita enggak enggak tentuin verbose gitu kan pas secara default feed generator ini gak keluar ya verbose nya kita coba tungguin dulu ya sampai 2 menit lah paling gak dia keluar sesuatu atau gak oke kita lihat dulu di chat ada Data scientist perlu gak bang bisa tableau atau tableau atau power BI? Kalau bisa bagus gitu. Jadi kalau misalnya dirasa ada skill-skill yang bisa dipelajari dan berkaitan dengan data. Itu bagus banget kalau kita bisa gitu ya. Tableau, power BI, atau misalnya kayak tools-tools seperti Rapid Miner, Google Data Studio. Itu bagus banget kalau bisa. Jadi. Jadi belajar aja gak apa-apa. Cuman biasanya sih. Kalau untuk data scientist yang lebih beratnya itu lebih ke programming ya. Dan lain sebagainya. Jadi python gitu ya. Sama library-library yang lainnya gitu. Kayak numpy, pandas, pyspark gitu ya. Itu kalau bisa bagus. Gitu. Hai kayaknya enggak jalan entah kenapa ya enggak jalan eh kita tambahin verbose zaman sama dengan satu coba ya dia bakal kelihatan Oke, masih gak keliatan ya trainingnya. Oke, kita stop dulu deh. Kita stop. Saya coba restart dulu ya. Saya coba restart dulu mesin saya. Jadi, kita coba dulu ya. SSH file sudo shutdown now eh kok shutdown sih? reboot oke eh udah di save kan ya? oke udah di save Oke, kita tunggu dulu ya sebentar Ya, kita tunggu dulu Oke Biasa ya kalau berhubungan dengan deep learning memang seringkali kita bermasalah dengan research dan lain sebagainya. Jadi wajar kalau misalnya ada kejadian-kejadian begini. Oke, kita coba lihat apakah sudah up mesinnya. Mesinnya belum up. Oke, kita tungguin dulu. Hai kalau ada yang mau ditanya dulu boleh ya kita kayaknya sebentar lagi nih ya Nah sudah siang sekali Oke sudah up saya buka lagi VS Code nya hai hai new file open file oke hmmm sebentar ya hmmm hmm Oke sudah nyala lagi So kita lanjut lagi kesini ya Kita coba buka lagi Kenapa nggak keluar ya? Hai ah ternyata tidak keluar rininya eh layar saya kenapa ini Oke kita coba lihat dulu deh Mas untuk parameter return state sama initial state di LSTM itu mengartikan menunjukkan apa ya? Jadi initial state itu adalah initial parameter ya sebenarnya. Jadi biasanya kan kalau kita melakukan neural network dan lain sebagainya, dia itu perlu yang namanya parameter seperti itu kan. Jadi... Kita bisa menentukan parameter apa yang bisa dimasukin ke situ Jadi sebagai contoh Misalkan Misalkan kita mau menggunakan padding untuk model kita gitu ya Sorry, embedding gitu ya Embeddingnya misalnya embedding word to fact atau embedding apa gitu ya Itu bisa, apa namanya, bisa menggunakan initial state Tapi kalau misalnya kita pengen yaudah random aja gitu Kita gak perlu melakukan initial state Oh ya oke, oh ini nyata disini kecil sekali ya Bentar saya set display nya dulu ya Display setting nya kayaknya berantakan juga nih setelah Aplikasi desktop 1 dan 2 Change oke ya Esc malah gak muncul sebentar ya Hai jadi enggak muncul nih saya nggak tahu kenapa nih Oke saya balikin dulu sini Wah saya nggak tahu nih ternyata streaming kita Rusak hari ini Jadi mohon maaf nih Karena streamnya rusak Tapi nanti saya akan coba Kasih hasil dari Trainingnya ya Mohon maaf banget nih Ternyata di luar perkiraan Semoga nanti untuk Yang besok Tidak rusak seperti ini Untuk kodenya Nanti silahkan lihat aja Di github Yang ada di dalam kolom deskripsi Terima kasih Semoga walaupun hasil chatbotnya ini Belum kelihatan Nanti teman-teman bisa oprek sendiri Kalau misalnya nanti Akses kodenya yang ada disitu Setelah saya push Dan ya kita ketemu lagi deh Untuk minggu depan Di aplikasi Apa namanya Image Caption Generator Sorry banget untuk hari ini Kita streamingnya kurang sukses Tapi semoga untuk streaming besok-besok Tidak seperti ini lagi Oke thank you semuanya Saya undur diri dulu ya Karena sudah siang Terima kasih atas waktunya di weekend ini Semoga bermanfaat Dan sampai jumpa di pertemuan minggu depan Thank you