Important Announcement
PubHTML5 Scheduled Server Maintenance on (GMT) Sunday, June 26th, 2:00 am - 8:00 am.
PubHTML5 site will be inoperative during the times indicated!

Home Explore Kecerdasan buatan dengan Python

Kecerdasan buatan dengan Python

Published by alimulyanto.psub, 2023-08-14 06:28:14

Description: Kecerdasan buatan dengan Python

Keywords: kecerdasan buatan,python

Search

Read the Text Version

Kita dapat melihat bahwa peningkatan jumlah pohon menghasilkan hasil yang lebih baik. Selain itu, meningkatkan jumlah fitur menghasilkan hasil yang lebih baik jika Anda dapat melihat lebih banyak fitur, tetapi pada akhirnya, jika Anda memiliki sekitar 20 hingga 30 fitur dan Anda memiliki sekitar 75 hingga 100 pohon, itu sama baiknya dengan yang Anda lakukan untuk mendapatkan akurasi 45%. [ 46 ]

Ringkasan Dalam bab ini, kita belajar tentang random forests dan mengklasifikasikan spesies burung . Kemudian, kita membahas matriks kekeliruan dan grafik berbeda yang memberi kita output berdasarkan random trees, decision trees, dan SVM. Pada bab berikutnya, kita akan melihat klasifikasi komentar menggunakan model bag-of-words dan model Word2Vec. [ 47 ]

3 Applikasi untuk Klasifikasi Komentar Dalam bab ini, kita akan meninjau model bag-of-words untuk klasifikasi teks. Kita akan melihat memprediksi spam komentar YouTube dengan bag-of-words dan teknik hutan acak. Kemudian kita akan melihat model Word2Vec dan prediksi ulasan positif dan negatif dengan pendekatan Word2Vec dan k-nearest neighbor classifier. Dalam bab ini, kita akan secara khusus berfokus pada teks dan kata-kata dan mengklasifikasikan komentar internet sebagai spam atau bukan spam atau untuk mengidentifikasi ulasan internet sebagai positif atau negatif. Kita juga akan memiliki gambaran bag of words untuk klasifikasi teks dan model prediksi untuk memprediksi komentar YouTube adalah spam atau tidak menggunakan bag of words dan teknik random forest. Kita juga akan melihat model Word2Vec sebagai k-nearest neighbor classifier. Tapi, sebelum kita mulai, kita akan menjawab pertanyaan berikut: apa yang membuat klasifikasi teks menjadi masalah yang menarik? Klasifikasi teks Untuk menemukan jawaban atas pertanyaan kita , kita akan Menggunakankumpulan data bunga iris yang terkenal sebagai contoh kumpulan data. Gambar berikut adalah spesies iris versicolor. Untuk mengidentifikasi spesies, kita memerlukan beberapa informasi selain hanya gambar spesies, seperti panjang kelopak bunga, lebar kelopak, panjang kelopak, dan lebar kelopak akan membantu kita mengidentifikasi gambar dengan lebih baik:

Dataset tidak hanya berisi contoh versicolor tetapi juga berisi contoh setosa dan virginica juga. Setiap contoh dalam kumpulan data berisi empat pengukuran ini. Dataset berisi sekitar 150 contoh, dengan 50 contoh untuk setiap spesies. Kita dapat menggunakan decision trees atau model lain untuk memprediksi spesies bunga baru, jika disediakan dengan empat pengukuran yang sama. Seperti yang kita ketahui spesies yang sama akan memiliki ukuran yang hampir sama. Karena kesamaan memiliki definisi yang berbeda secara keseluruhan tetapi di sini kita menganggap kesamaan sebagai kedekatan pada grafik, jika kita menganggap setiap titik adalah bunga. Grafik berikut adalah perbandingan antara lebar sepal versus lebar petal: [ 49 ]

Jika kita tidak memiliki cara untuk mengukur kesamaan, jika, katakanlah, setiap bunga memiliki ukuran yang berbeda, maka tidak akan ada cara untuk menggunakan pembelajaran mesin untuk membuat pengklasifikasi. Seperti yang kita ketahui bahwa bunga dari spesies yang sama memiliki ukuran yang sama dan itu membantu kita untuk membedakan spesies yang berbeda. Pertimbangkan bagaimana jika setiap bunga memiliki ukuran yang berbeda, tidak ada gunanya membangun pengklasifikasi menggunakan pembelajaran mesin untuk mengidentifikasi gambar spesies. Teknik pembelajaran mesin Sebelum kita Menggunakangambar, sekarang mari kita pertimbangkan teks. Misalnya, perhatikan kalimat berikut dan coba temukan apa yang membuat pasangan frasa pertama mirip dengan pasangan kedua: [ 50 ]

Saya harap Anda mendapatkan jawaban untuk pertanyaan itu, jika tidak, kita tidak akan dapat membangun decision trees, hutan acak, atau apa pun untuk memprediksi model. Untuk menjawab pertanyaan, perhatikan bahwa pasangan frasa teratas mirip karena mengandung beberapa kata yang sama, seperti berlangganan dan saluran, sedangkan pasangan kalimat kedua memiliki lebih sedikit kata yang sama, seperti untuk dan itu. Pertimbangkan setiap frasa yang mewakili vektor angka sedemikian rupa sehingga pasangan teratas mirip dengan angka pada pasangan kedua. Baru setelah itu kita dapat menggunakan hutan acak atau teknik klasifikasi lain, dalam hal ini, untuk mendeteksi spam komentar YouTube. Untuk mencapai ini, kita perlu menggunakan model bag-of-words. Bag-of-words Model bag-of-words melakukan persis seperti yang kita inginkan yaitu mengonversi frasa atau kalimat dan menghitung berapa kali kata serupa muncul. Dalam dunia ilmu komputer, tas mengacu pada struktur data yang melacak objek seperti array atau daftar, tetapi dalam kasus seperti itu urutannya tidak masalah dan jika objek muncul lebih dari sekali, kita hanya melacak menghitung bukan kita terus mengulanginya. Misalnya, perhatikan frasa pertama dari diagram sebelumnya, ia memiliki sekantong kata yang berisi kata-kata seperti saluran, dengan satu kemunculan, plz, dengan satu kemunculan, berlangganan, dua kemunculan, dan seterusnya. [ 51 ]

Kemudian, kita akan mengumpulkan semua hitungan ini dalam sebuah vektor, di mana satu vektor per frase atau kalimat atau dokumen, tergantung pada apa yang Anda kerjakan. Sekali lagi, urutan kemunculan kata-kata awalnya tidak penting. Vektor yang kita buat juga dapat digunakan untuk mengurutkan data berdasarkan abjad, tetapi perlu dilakukan secara konsisten untuk semua frasa yang berbeda. Namun, kita masih memiliki masalah yang sama. Setiap frasa memiliki vektor dengan kolom yang berbeda, karena setiap frasa memiliki kata yang berbeda dan jumlah kolom yang berbeda, seperti yang ditunjukkan pada dua tabel berikut: Jika kita membuat vektor yang lebih besar dengan semua kata unik di kedua frasa, kita mendapatkan representasi matriks yang tepat. Dengan setiap baris mewakili frasa yang berbeda, perhatikan penggunaan 0 untuk menunjukkan bahwa frasa tidak memiliki kata: [ 52 ]

Jika Anda ingin memiliki sekantong kata dengan banyak frasa, dokumen, atau kita perlu mengumpulkan semua kata unik yang muncul di semua contoh dan membuat matriks besar, N x M, di mana N adalah jumlah contoh dan M adalah jumlah kejadian. Kita dapat dengan mudah membandingkan ribuan dimensi dalam model empat dimensi untuk dataset iris. Kantong matriks kata cenderung jarang, yang berarti sebagian besar nol, karena sebagian besar frasa tidak memiliki sebagian besar kata. Sebelum kita mulai membuat model bag of words, kita perlu memperhatikan beberapa hal, seperti berikut ini:  Huruf kecil setiap kata  Jatuhkan tanda baca  Jatuhkan kata-kata yang sangat umum (stop words)  Hapus bentuk jamak (misalnya, bunnies => bunny)  Lakukan lemmatisasi (misalnya reader => read, reading = read)  Gunakan n-gram, seperti bigrams (pasangan dua kata) atau trigram  Simpan hanya kata-kata yang sering (misalnya, harus muncul di >10 contoh)  Simpan hanya kata M yang paling sering (misalnya, simpan hanya 1.000)  Catat jumlah biner (1 = ada, 0 = tidak ada) daripada jumlah sebenarnya Ada banyak kombinasi lain untuk praktik terbaik, dan menemukan yang terbaik yang sesuai dengan data tertentu memerlukan penelitian. Masalah yang kita hadapi dengan dokumen panjang adalah bahwa mereka akan memiliki jumlah kata yang lebih tinggi secara umum, tetapi kita mungkin masih ingin Menggunakandokumen panjang tentang beberapa topik untuk dipertimbangkan, mirip dengan dokumen pendek tentang topik yang sama, meskipun jumlah kata akan berbeda secara signifikan. Selanjutnya, jika kita masih ingin mengurangi kata-kata yang sangat umum dan menyoroti yang langka, yang perlu kita lakukan adalah mencatat kepentingan [ 53 ]

relatif dari setiap kata daripada jumlah mentahnya. Ini dikenal sebagai term frequency inverse document frequency (TF-IDF), yang mengukur seberapa umum sebuah kata atau istilah dalam dokumen. Kita menggunakan logaritma untuk memastikan bahwa dokumen panjang dengan banyak kata sangat mirip dengan dokumen pendek dengan kata-kata yang mirip. TF-IDF memiliki dua komponen yang mengalikan, yaitu ketika TF tinggi, hasilnya tinggi tetapi IDF mengukur seberapa umum kata di antara semua dokumen dan itu akan mempengaruhi kata-kata umum. Jadi, sebuah kata yang umum di dokumen lain akan memiliki skor rendah, terlepas dari berapa kali kata itu muncul. Jika suatu dokumen memiliki skor rendah berarti kata tersebut jarang muncul dan jika skor tinggi berarti kata tersebut sering muncul dalam dokumen. Tetapi jika kata tersebut cukup umum di semua dokumen maka menjadi tidak relevan untuk mencetak gol pada dokumen ini. Hal ini bagaimanapun dianggap memiliki skor rendah. Ini menunjukkan bahwa formula untuk TF-IDF menunjukkan model yang kita inginkan. Grafik berikut menjelaskan teori kita : [ 54 ]

Mendeteksi spam komentar YouTube Di bagian ini, kita akan melihat teknik untuk mendeteksi spam komentar YouTube menggunakan sekumpulan kata dan hutan acak. Datasetnya cukup sederhana. Kita akan menggunakan kumpulan data yang memiliki sekitar 2.000 komentar dari video YouTube populer (https://archive.ics.uci.edu/ml/datasets/YouTube+Spam+Collection). [ 55 ]

Dataset diformat sedemikian rupa di mana setiap baris memiliki komentar diikuti dengan nilai yang ditandai sebagai 1 atau 0 untuk spam atau bukan spam. Pertama, kita akan mengimpor dataset tunggal. Dataset ini sebenarnya dibagi menjadi empat file yang berbeda. Kumpulan komentar kita berasal dari video PSY-Gangnam Style: Kemudian kita akan mencetak beberapa komentar sebagai berikut: [ 56 ]

Di sini kita dapat melihat bahwa ada lebih dari dua kolom, tetapi kita hanya membutuhkan kolom konten dan kelas. Kolom konten berisi komentar dan kolom kelas berisi nilai 1 atau 0 untuk spam atau bukan spam. Misalnya, perhatikan bahwa dua komentar pertama ditandai sebagai bukan spam, tetapi kemudian komentar berlangganan saya untuk video call of duty adalah spam dan hai teman-teman tolong unduh editor foto android saya yada yada juga spam. Sebelum kita mulai menyortir komentar, mari kita lihat berapa banyak baris dalam dataset yang merupakan spam dan berapa banyak yang bukan spam. Hasil yang kita peroleh masing-masing adalah 175 dan 175, yang menjumlahkan hingga 350 baris secara keseluruhan dalam file ini: Dalam scikit-learn, teknik bag of words sebenarnya disebut CountVectorizer, yang berarti menghitung berapa kali setiap kata muncul dan dimasukkan ke [ 57 ]

dalam vektor. Untuk membuat vektor, kita perlu membuat objek untuk CountVectorizer, lalu melakukan fit dan transform secara bersamaan: Ini dilakukan dalam dua langkah berbeda. Pertama datang langkah fit, di mana ia menemukan kata mana yang ada dalam dataset, dan kedua adalah langkah transformasi, yang memberi Anda kantong matriks kata untuk frasa tersebut. Hasil yang diperoleh pada matriks tersebut adalah 350 baris dengan 1.418 kolom: Ada 350 baris, yang berarti kita memiliki 350 komentar berbeda dan 1.418 kata. 1418 kata tampaknya adalah kata yang muncul di semua frasa ini. Sekarang mari kita cetak satu komentar dan kemudian jalankan penganalisis pada komentar itu sehingga kita dapat melihat seberapa baik frasa memecahnya. Seperti yang terlihat pada tangkapan layar berikut, komentar telah dicetak terlebih dahulu dan kemudian kita menganalisisnya di bawah, yang hanya untuk melihat bagaimana ia memecahnya menjadi kata-kata: [ 58 ]

Kita dapat menggunakan fitur vectorizer untuk mengetahui kata mana yang ditemukan dataset setelah melakukan vectorizing. Berikut ini adalah hasil yang ditemukan setelah vektorisasi yang dimulai dengan angka dan diakhiri dengan kata biasa: [ 59 ]

Jalankan perintah berikut untuk mengocok dataset dengan pecahan 100% yaitu menambahkan GSBD: Sekarang kita akan membagi dataset menjadi training dan testing set. Mari kita asumsikan bahwa 300 yang pertama akan untuk pelatihan, sedangkan 50 yang terakhir akan untuk pengujian: [ 60 ]

Dalam kode sebelumnya, vectorizer.fit_transform(d_train['CONTENT']) langkah penting. Pada tahap itu, Anda memiliki satu set pelatihan yang ingin Anda lakukan transformasi pas, yang berarti ia akan mempelajari kata-kata dan juga menghasilkan matriks. Namun, untuk set pengujian, kita tidak melakukan transformasi fit lagi, karena kita tidak ingin model mempelajari kata-kata yang berbeda untuk data pengujian. Kita akan menggunakan kata-kata yang sama yang dipelajari di set pelatihan. Misalkan set pengujian memiliki kata-kata yang berbeda di mana beberapa di antaranya unik untuk set pengujian yang mungkin tidak pernah muncul di set pelatihan. Itu baik-baik saja dan bagaimanapun kita akan mengabaikannya. Karena kita menggunakan set pelatihan untuk membangun hutan acak atau decision trees atau apa pun masalahnya, kita harus menggunakan kumpulan kata tertentu, dan kata-kata itu harus kata yang sama, yang digunakan pada kumpulan pengujian. Kita tidak dapat memperkenalkan kata-kata baru ke set pengujian karena hutan acak atau model lainnya tidak akan dapat mengukur kata-kata baru. Sekarang kita melakukan transformasi pada dataset, dan nanti kita akan menggunakan jawaban untuk pelatihan dan pengujian. Set pelatihan sekarang memiliki 300 baris dan 1.287 kata atau kolom yang berbeda, dan set pengujian memiliki 50 baris, tetapi kita memiliki 1.287 kolom yang sama: Meskipun set pengujian memiliki kata-kata yang berbeda, kita perlu memastikan bahwa itu ditransformasikan dengan cara yang sama seperti set pelatihan [ 61 ]

dengan kolom yang sama. Sekarang kita akan mulai dengan membangun pengklasifikasi hutan acak. Kita akan mengonversi set data ini menjadi 80 pohon berbeda dan kita akan menyesuaikan set pelatihan sehingga kita dapat menilai kinerjanya pada set pengujian: Output dari skor yang kita terima adalah 98%; itu sangat bagus. Di sini sepertinya bingung antara spam dan bukan spam. Kita perlu yakin bahwa akurasinya tinggi; untuk itu, kita akan melakukan validasi silang dengan lima split yang berbeda. Untuk melakukan validasi silang, kita akan menggunakan semua data pelatihan dan membaginya menjadi empat kelompok yang berbeda: 20%, 80%, dan 20% akan menjadi data pengujian, dan 80% akan menjadi data pelatihan: [ 62 ]

Kita sekarang akan melakukan rata-rata untuk skor yang baru saja kita peroleh, yang mencapai akurasi sekitar 95%. Sekarang kita akan mencetak semua data seperti yang terlihat pada tangkapan layar berikut: Seluruh kumpulan data memiliki lima video berbeda dengan komentar, yang berarti secara keseluruhan kita memiliki sekitar 2.000 baris. Saat memeriksa semua komentar, kita melihat bahwa ada komentar spam dan komentar bukan spam, yang cukup dekat untuk membaginya menjadi beberapa bagian: [ 63 ]

Di sini kita akan mengacak seluruh dataset dan memisahkan komentar dan jawaban: Kita perlu melakukan beberapa langkah di sini dengan CountVectorizer diikuti oleh hutan acak. Untuk ini, kita akan menggunakan fitur di scikit-learn yang disebut Pipeline. Pipeline benar-benar nyaman dan akan menyatukan dua atau lebih langkah sehingga semua langkah diperlakukan sebagai satu. Jadi, kita akan membangun pipa dengan kantong kata-kata, dan kemudian menggunakan CountVectorizer diikuti oleh pengklasifikasi hutan acak. Kemudian kita akan mencetak pipa, dan langkah-langkah yang diperlukan: [ 64 ]

Kita dapat membiarkan nama pipeline setiap langkah dengan sendirinya dengan menambahkan CountVectorizer di dalam RandomForestclassifier kita dan itu akan menamainya CountVectorizer dan RandomForestclassifier: Setelah pipeline dibuat, Anda cukup menyebutnya fit dan itu akan melakukan sisanya yang pertama melakukan fit dan kemudian mengubah dengan CountVectorizer, diikuti dengan fit dengan RandomForest classifier. Itulah manfaat memiliki pipa: Sekarang Anda memanggil skor sehingga ia tahu bahwa ketika kita mencetak itu akan menjalankannya melalui kantong kata-kata countVectorizer, diikuti dengan memprediksi dengan RandomForestClasifier: [ 65 ]

Seluruh prosedur ini akan menghasilkan skor sekitar 94. Kita hanya dapat memprediksi satu contoh dengan pipa. Misalnya, bayangkan kita memiliki komentar baru setelah kumpulan data dilatih, dan kita ingin tahu apakah pengguna baru saja mengetik komentar ini atau apakah itu spam: Seperti yang terlihat, itu terdeteksi dengan benar; tapi bagaimana dengan komentar berikut: Untuk mengatasi ini dan menyebarkan pengklasifikasi ini ke dalam lingkungan dan memprediksi apakah itu spm atau tidak ketika seseorang mengetik komentar baru. Kita akan menggunakan saluran kita untuk mengetahui seberapa akurat validasi silang kita . Kita menemukan dalam kasus ini bahwa akurasi rata-rata adalah sekitar 94: Itu cukup bagus. Sekarang mari tambahkan TF-IDF ke model kita agar lebih presisi: [ 66 ]

Ini akan ditempatkan setelah CountVectorizer. Setelah kita menghasilkan hitungan, kita kemudian dapat menghasilkan skor TF-IDF untuk hitungan ini. Sekarang kita akan menambahkan ini ke dalam pipeline dan melakukan pemeriksaan validasi silang lainnya dengan akurasi yang sama: Ini menunjukkan langkah-langkah yang diperlukan untuk pipa: Output berikut menghasilkan CountVectorizer, transformator TF-IDF, dan RandomForestClassifier. Perhatikan bahwa CountVectorizer dapat berupa huruf kecil atau huruf besar dalam kumpulan data; itu pada kita untuk memutuskan berapa banyak kata yang ingin Anda miliki. Kita dapat menggunakan kata tunggal atau bigram, yang merupakan pasangan kata, atau trigram, yang dapat berupa tiga kali lipat kata. Kita juga dapat menghapus kata-kata berhenti, yang merupakan kata-kata bahasa Inggris yang sangat umum seperti dan, atau, dan. Dengan TF-IDF, Anda dapat mematikan komponen idf dan hanya menyimpan komponen tf, yang hanya akan menjadi log hitungan. Anda juga dapat [ 67 ]

menggunakan idf. Dengan hutan acak, Anda memiliki pilihan berapa banyak pohon yang Anda gunakan, yang merupakan jumlah penduga. Ada fitur lain dari scikit-learn yang memungkinkan kita untuk mencari semua parameter ini. Untuk itu, ia mencari tahu apa parameter terbaik: Kita dapat membuat kamus kecil di mana kita mengatakan nama langkah pipeline dan kemudian menyebutkan apa nama parameternya dan ini memberi kita pilihan kita. Untuk demonstrasi, kita akan mencoba jumlah kata maksimum atau mungkin hanya maksimum 1.000 atau 2.000 kata. Dengan menggunakan ngrams, kita dapat menyebutkan hanya satu kata atau pasangan kata yang merupakan stop words, menggunakan kamus bahasa Inggris dari stop words, atau tidak menggunakan stop words, yang berarti dalam kasus pertama kita harus menghilangkan kata-kata umum, dan dalam kasus kedua kita tidak menyingkirkan kata-kata umum. Menggunakan TF-IDF, kita menggunakan idf untuk menyatakan apakah itu ya atau tidak. Hutan acak yang kita buat menggunakan 20, 50, atau 100 pohon. Dengan menggunakan ini, kita dapat melakukan pencarian grid, yang berjalan melalui semua kombinasi parameter dan mencari tahu apa kombinasi terbaik. Jadi, mari kita berikan pipa nomor 2 kita, yang memiliki TF-IDF bersamanya. Kita akan menggunakan fit untuk melakukan pencarian dan hasilnya dapat dilihat pada screenshot berikut: [ 68 ]

Karena ada banyak kata, dibutuhkan sedikit waktu, sekitar 40 detik, dan akhirnya menemukan parameter terbaik. Kita bisa mendapatkan parameter terbaik dari pencarian grid dan mencetaknya untuk melihat berapa skornya: Jadi, kita mendapatkan akurasi hampir 96%. Kita menggunakan sekitar 1.000 kata, hanya satu kata, menggunakan ya untuk menghilangkan kata henti, memiliki 100 pohon di hutan acak, dan menggunakan ya serta perhitungan idf dan TF-IDF. Di sini kita telah mendemonstrasikan tidak hanya kumpulan kata, TF-IDF, dan hutan acak, tetapi juga fitur saluran pipa dan fitur pencarian parameter yang dikenal sebagai pencarian grid. [ 69 ]

Model Word2Vec Di bagian ini, kita akan belajar tentang Word2Vec, teknik modern dan populer untuk bekerja dengan teks. Biasanya, Word2Vec berkinerja lebih baik daripada model bag of words sederhana. Model bag of words hanya menghitung berapa kali setiap kata muncul di setiap dokumen. Diberikan dua kantong vektor kata- kata seperti itu, kita dapat membandingkan dokumen untuk melihat seberapa miripnya. Ini sama dengan membandingkan kata-kata yang digunakan dalam dokumen. Dengan kata lain, jika dua dokumen memiliki banyak kata serupa yang muncul beberapa kali serupa, mereka akan dianggap serupa. Tetapi model bag of words tidak memiliki informasi tentang seberapa mirip kata- kata tersebut. Jadi, jika dua dokumen tidak menggunakan kata yang persis sama tetapi menggunakan sinonim, seperti please dan plz, mereka tidak dianggap mirip untuk model bag of words. Word2Vec dapat mengetahui bahwa beberapa kata mirip satu sama lain dan kita dapat memanfaatkan fakta itu untuk mendapatkan kinerja yang lebih baik saat melakukan pembelajaran mesin dengan teks. Di Word2Vec, setiap kata itu sendiri adalah vektor, dengan mungkin 300 dimensi. Misalnya, dalam model Google Word2Vec yang telah dilatih sebelumnya yang memeriksa jutaan atau miliaran halaman teks, kita dapat melihat bahwa kucing, anjing, dan spatula adalah vektor 300 dimensi:  Cat = <0,012, 0,204, ..., -0,275, 0,056> (300 dimensi)  Anjing = <0,051, -0,022, ..., -0,355, 0,227>  Spatula = <-0,191, -0,043, ..., -0,348, 0,398>  Kesamaan (jarak) antara kucing dan anjingc0.761  Kesamaan antara kucing dan spatulac 0.124 Jika kita membandingkan kesamaan vektor anjing dan kucing, kita akan mendapatkan 0,761 atau 76% kesamaan. Jika kita melakukan hal yang sama [ 70 ]

dengan cat dan spatula, kita mendapatkan 0,124. Jelas bahwa Word2Vec mengetahui bahwa anjing dan kucing adalah kata-kata yang mirip tetapi kucing dan spatula tidak. Word2Vec menggunakan jaringan saraf untuk mempelajari vektor kata ini. Pada tingkat tinggi, jaringan saraf mirip dengan hutan acak atau decision trees dan teknik pembelajaran mesin lainnya karena mereka diberi banyak input dan banyak output, dan mereka belajar bagaimana memprediksi output dari input. Untuk Word2Vec, inputnya adalah satu kata, kata yang vektornya ingin kita pelajari, dan outputnya adalah kata-kata terdekat dari teks. Word2Vec juga mendukung kebalikan dari konfigurasi inputoutput ini. Dengan demikian, Word2Vec mempelajari vektor kata dengan mengingat kata-kata konteksnya. Jadi, dog dan cat akan memiliki vektor kata yang mirip karena kedua kata ini digunakan dengan cara yang sama, seperti she pet the dog dan she pet the cat. Jaringan saraf dengan Word2Vec dapat mengambil salah satu dari dua bentuk karena Word2Vec mendukung dua teknik berbeda untuk pelatihan. Teknik pertama dikenal sebagai continuous bag of words, di mana kata-kata konteks adalah input, meninggalkan kata tengah dan kata yang vektornya kita pelajari, kata tengah, adalah outputnya. Dalam diagram berikut, Anda dapat melihat tiga kata sebelum dan sesudah saluran kata: [ 71 ]

Itulah kata-kata konteksnya. Model tas kata-kata yang berkelanjutan meluncur di seluruh kalimat dengan setiap kata bertindak sebagai kata tengah secara bergantian. Jaringan saraf mempelajari vektor 300 dimensi untuk setiap kata sehingga vektor dapat memprediksi kata pusat yang diberikan kata konteks. Dengan kata lain, ia dapat memprediksi output yang diberikan inputnya. Dalam teknik kedua, kita akan membalik ini. Ini dikenal sebagai skip-gram, dan kata tengah adalah input dan kata konteks adalah output: Dalam teknik ini, vektor kata tengah digunakan untuk memprediksi kata-kata konteks yang diberikan kata pusat itu. Kedua teknik ini bekerja dengan baik untuk sebagian besar situasi. Mereka masing-masing memiliki pro dan kontra kecil yang tidak akan penting untuk kasus penggunaan kita . Doc2Vec Kita akan menggunakan Word2Vec untuk mendeteksi ulasan produk, restoran, dan film positif dan negatif. Kita akan melakukannya dengan bentuk Word2Vec yang sedikit berbeda yang dikenal sebagai Doc2Vec. Dalam hal ini, inputnya adalah nama dokumen, seperti nama file, dan outputnya adalah jendela geser kata-kata dari dokumen. Kali ini, kita tidak akan memiliki kata tengah: [ 72 ]

Dalam hal ini, sebagai vektor yang membantu kita memprediksi kata, dari mengetahui nama file. Padahal, inputnya tidak terlalu penting, yang dalam hal ini adalah nama file. Kita hanya perlu melacak kata-kata di sisi kanan, dan semuanya berasal dari dokumen yang sama. Jadi, semua kata-kata itu akan terhubung ke nama file itu, tetapi isi sebenarnya dari nama file itu tidak penting. Karena kita dapat memprediksi kata-kata dokumen berdasarkan nama filenya, kita dapat secara efektif memiliki model yang mengetahui kata-kata mana yang digabungkan dalam dokumen. Dengan kata lain, dokumen tersebut biasanya hanya membicarakan satu hal, misalnya, mengetahui bahwa banyak kata positif yang berbeda digunakan dalam ulasan positif dan banyak kata negatif digunakan dalam ulasan negatif. vektor dokumen Setelah pelatihan, kita memiliki dokumen baru dan kita ingin menemukan vektor dokumennya. Kita akan menggunakan kesamaan kata yang dipelajari selama pelatihan untuk membuat vektor yang akan memprediksi kata-kata dalam dokumen baru. Kita akan menggunakan nama file dummy karena nama sebenarnya tidak penting. Yang penting hanya satu nama. Jadi, semua kata ini terhubung bersama di bawah satu nama itu: [ 73 ]

Setelah kita mendapatkan vektor dokumen baru, kita dapat membandingkannya dengan vektor dokumen lainnya dan temukan dokumen mana dari masa lalu yang paling mirip, sebagai berikut: Jadi, kita dapat menggunakan Doc2Vecuntuk menemukan dokumen mana yang paling mirip satu sama lain. Ini akan membantu kita mendeteksi ulasan positif dan negatif karena, idealnya, ulasan positif akan memiliki vektor dokumen yang mirip satu sama lain dan ini akan sama untuk ulasan negatif. Kita berharap Doc2Vecberkinerja lebih baik daripada sekumpulan kata karena Doc2Vecmempelajari kata-kata yang digunakan bersama dalam dokumen yang sama, sehingga kata-kata yang mirip dengan kumpulan kata tidak pernah benar- benar mempelajari informasi tentang seberapa mirip kata-kata tersebut berbeda. [ 74 ]

Mendeteksi sentimen positif atau negatif dalam ulasan pengguna Di bagian ini, kita akan melihat cara mendeteksi sentimen positif dan negatif dalam ulasan pengguna. Dengan kata lain, kita akan mendeteksi apakah pengguna mengetik komentar positif atau komentar negatif tentang produk atau layanan. Kita akan menggunakan Word2Vec dan Doc2Vec secara khusus dan Library Python gensim untuk layanan tersebut. Ada dua kategori, yaitu positif dan negatif, dan kita memiliki lebih dari 3.000 ulasan berbeda untuk dilihat. Ini berasal dari Yelp, IMDb, dan Amazon. Mari kita mulai kodenya dengan mengimpor Library gensim , yang menyediakan Word2Vec dan Doc2Vecuntuk mencatat status pesan: Pertama, kita akan melihat cara memuat model Word2Vec pra-bangun, yang disediakan oleh Google, yang telah dilatih pada miliaran halaman teks dan akhirnya menghasilkan vektor 300 dimensi untuk semua kata yang berbeda. Setelah model dimuat, kita akan melihat vektor untuk cat. Ini menunjukkan bahwa model adalah vektor 300 dimensi, yang diwakili oleh kata cat: [ 75 ]

Tangkapan layar berikut menunjukkan vektor 300 dimensi untuk kata dog: [ 76 ]

Tangkapan layar berikut menunjukkan vektor 300 dimensi untuk kata spatula: Kita memperoleh hasil 76% saat menghitung kesamaan anjing dan kucing, sebagai berikut: Kemiripan antara cat dan spatula adalah 12%; itu sedikit lebih rendah, sebagaimana mestinya: Di sini kita melatih model Word2Vec dan Doc2Vecmenggunakan kode berikut: [ 77 ]

Kita menggunakan Doc2Vec karena kita ingin menentukan vektor untuk setiap dokumen, tidak harus untuk setiap kata dalam dokumen, karena dokumen kita adalah ulasan dan kita ingin melihat apakah ulasan ini positif atau negatif, yang berarti mirip dengan ulasan positif atau mirip dengan ulasan negatif. Doc2Vec disediakan oleh GENSIM dan Library memiliki kelas yang disebut TaggedDocument yang memungkinkan kita untuk menggunakan \"these are the words in the document, and Doc2Vec is the model\". Sekarang kita membuat fuction utilitas yang akan mengambil kalimat atau seluruh paragraf dan huruf kecil dan menghapus semua tag HTML, apostrof, tanda baca, spasi, dan spasi berulang, dan akhirnya memecahnya dengan kata- kata: Sekarang saatnya untuk set pelatihan kita . Kita tidak akan menggunakan 3.000 ulasan Yelp, IMDb, dan Amazon karena tidak ada cukup data untuk dilatih untuk model Doc2Vecyang baik. Jika kita memiliki jutaan ulasan, maka kita dapat mengambil sebagian besar dari itu untuk berlatih dan menggunakan sisanya untuk pengujian, tetapi hanya dengan 3.000 ulasan itu tidak cukup. Jadi, sebagai gantinya, saya mengumpulkan ulasan dari IMDb dan tempat lain, termasuk Rotten Tomato. Ini akan cukup untuk melatih model DocVec, tetapi tidak satu pun dari ini sebenarnya dari kumpulan data yang akan kita gunakan [ 78 ]

untuk prediksi akhir kita. Ini hanyalah ulasan. Mereka positif; mereka negatif. Saya tidak tahu yang mana, karena saya tidak melacak yang mana. Yang penting adalah kita memiliki cukup teks untuk mempelajari bagaimana kata-kata digunakan dalam ulasan ini. Tidak ada yang mencatat apakah ulasan itu positif atau negatif. Jadi, Doc2Vec dan Word2Vec sebenarnya digunakan untuk pelatihan tanpa pengawasan. Itu berarti kita tidak punya jawaban. Kita hanya belajar bagaimana kata-kata digunakan bersama-sama. Ingat konteks kata, dan bagaimana sebuah kata digunakan menurut kata-kata terdekat: Jadi, dalam setiap kasus, di setiap file, kita cukup membuat objek TaggedDocument dengan kata-kata dari dokumen itu atau ulasan itu ditambah tag, yang merupakan nama file. Ini penting agar ia mengetahui bahwa semua kata ini digabungkan dalam dokumen yang sama, dan bahwa kata-kata ini entah bagaimana terkait satu sama lain. Setelah memuat, kita memiliki 175.000 contoh pelatihan dari berbagai dokumen: [ 79 ]

Sekarang mari kita lihat 10 kalimat pertama dalam tangkapan layar berikut: [ 80 ]

Kita mengacak dokumen-dokumen ini dan kemudian memasukkannya ke dalam pelatih Doc2Vec, menggunakan Doc2Vec (permuter, dm=0,hs=1,size=50), di mana kita akhirnya melakukan pelatihan model Doc2Vec dan di mana ia mempelajari vektor dokumen untuk semua dokumen yang berbeda. dm=0 dan hs=1 hanyalah parameter untuk mengatakan bagaimana melakukan pelatihan. Ini hanya hal-hal yang saya temukan adalah yang paling akurat. dm=0 adalah tempat kita menggunakan model yang ditunjukkan di bagian terakhir, yang berarti ia menerima nama file dan memprediksi kata-kata: Di sini size=50 berarti bahwa kita menemukan bahwa vektor 50 dimensi untuk setiap dokumen adalah yang terbaik, dan vektor 300 dimensi adalah yang optimal, karena kita tidak memiliki cukup contoh [ 81 ]

pelatihan. Karena kita tidak memiliki jutaan atau miliaran data. Ini adalah vektor 300 dimensi yang bagus, dan 50 tampaknya bekerja lebih baik. Setelah pelatihan selesai, kita dapat menghapus beberapa hal untuk mengosongkan sebagian memori: Kita perlu menyimpan data inferensi, yang cukup untuk mengikat vektor dokumen baru untuk dokumen baru, tetapi kita tidak memerlukannya untuk menyimpan semua data tentang semua kata yang berbeda. Anda dapat menyimpan model dan kemudian memuatnya nanti dengan perintah model = Doc2Vec.Load('Rviews.d2v'), jika Anda ingin memasukkannya ke dalam produk dan menyebarkan itu, atau letakkan di server: Setelah model dilatih, Anda dapat menyimpulkan vektor, yaitu tentang apa vektor dokumen untuk dokumen baru ini. Jadi, mari kita ekstrak kata-kata dengan fuction utilitas. Di sini kita menggunakan contoh frasa yang ditemukan dalam ulasan. Ini adalah vektor 50dimensi yang dipelajarinya untuk frasa itu: [ 82 ]

Sekarang pertanyaan yang muncul adalah bagaimana dengan frase negatif? Dan frase negatif lainnya. Apakah mereka dianggap mirip? Yah, mereka dianggap 48% serupa, seperti yang terlihat pada tangkapan layar berikut: Bagaimana dengan frase yang berbeda? Highly Rekomended dan service sucks. Mereka kurang mirip: Model belajar tentang bagaimana kata-kata digunakan bersama dalam ulasan yang sama dan bahwa kata-kata ini berjalan bersama dalam satu cara dan kata- kata lain berjalan bersama dengan cara yang berbeda. Akhirnya, kita siap memuat dataset nyata kita untuk prediksi: [ 83 ]

Untuk meringkas, kita menggunakan ulasan Yelp, Amazon, dan IMDb. Kita memuat file yang berbeda dan di setiap file, setiap baris memiliki ulasan. Akibatnya, kita mendapatkan kata-kata dari baris dan menemukan apa vektor untuk dokumen itu. Kita memasukkannya ke dalam daftar, mengacak, dan akhirnya membuat pengklasifikasi. Dalam hal ini, kita akan menggunakan k- nearest neighbor, yang merupakan teknik yang sangat sederhana. Ini hanya teknik yang mengatakan temukan semua dokumen serupa, dalam hal ini, sembilan dokumen terdekat dengan yang kita lihat, dan hitung suara: Kita akan menggunakan sembilan ulasan untuk tujuan contoh ini, dan jika Anda memiliki mayoritas, katakanlah ulasan positif, maka kita akan mengatakan bahwa ini adalah ulasan positif juga. Jika mayoritas mengatakan negatif, maka ini juga negatif. Kita tidak ingin dasi mengenai ulasan, itulah sebabnya kita [ 84 ]

mengatakan bahwa ada sembilan, bukan delapan. Sekarang kita akan membandingkan hasilnya dengan hutan acak: Sekarang kita perlu melakukan validasi silang dengan 9 tetangga terdekat; kita mendapatkan akurasi 76% untuk mendeteksi ulasan positif/negatif dengan Doc2Vec. Untuk tujuan eksperimental, jika kita menggunakan hutan acak tanpa benar-benar mencoba memilih jumlah pohon, kita hanya mendapatkan akurasi 70%: Dalam kasus seperti itu, k-nearest tetangga lebih sederhana dan lebih akurat. Pada akhirnya, apakah semuanya sepadan? Nah, mari kita bandingkan dengan model bag of words. Mari kita buat sedikit pipeline dengan CountVectorizer, TF- IDF, dan random forest, dan pada akhirnya, lakukan validasi silang pada data yang sama, yang dalam hal ini adalah reviewnya. Di sini, kita mendapatkan 74%, seperti yang terlihat pada tangkapan layar berikut: [ 85 ]

Hasil yang kita temukan setelah menjalankan model build, kita menemukan Doc2Vec lebih baik. Doc2Vec bisa jauh lebih akurat daripada sekumpulan kata jika kita menambahkan banyak contoh pelatihan yang memiliki gaya yang sama dengan set pengujian. Oleh karena itu, dalam kasus kita , set pengujian cukup banyak ulasan Yelp, Amazon, dan IMDb, yang semuanya satu kalimat atau satu baris teks dan cukup pendek. Namun, set pelatihan yang kita temukan berasal dari ulasan yang berbeda dari tempat yang berbeda, dan kita mendapatkan sekitar 175.000 contoh. Itu sering seperti paragraf atau hanya ditulis dengan cara yang berbeda. Idealnya, kita akan melatih model Doc2Vecatau Word2Vec pada contoh yang mirip dengan apa yang akan kita prediksi nanti, tetapi mungkin sulit untuk menemukan contoh yang cukup, karena ada di sini jadi kita melakukan yang terbaik. Meski begitu, ternyata masih lebih baik daripada sekantong kata-kata. Ringkasan Dalam bab ini, kita memperkenalkan pemrosesan teks dan teknik bag of words. Kita kemudian menggunakan teknik ini untuk membuat pendeteksi spam untuk komentar YouTube. Selanjutnya, kita belajar tentang model Word2Vec yang canggih dan mengerjakannya dengan proyek pengkodean yang mendeteksi ulasan produk, restoran, dan film positif dan negatif. Itulah akhir bab ini tentang teks. Dalam bab berikutnya, kita akan melihat pembelajaran mendalam, yang merupakan teknik populer yang digunakan dalam jaringan saraf. [ 86 ]

4 Neural Networks Dalam bab ini, kita akan mendapatkan gambaran umum tentang shallow neural network. Kita akan melihat apa itu jaringan saraf sederhana dan memahami cara kerjanya. Kita akan melakukan ini dengan mencoba mengidentifikasi genre musik menggunakan shallow neural network. Kita juga akan mengingat pekerjaan kita sebelumnya pada detektor spam untuk menggunakan jaringan saraf. Selanjutnya, kita akan melihat jaringan saraf yang lebih besar, yang dikenal sebagai pembelajaran mendalam, dan menerapkan apa yang dikenal sebagai jaringan saraf convolutional untuk mengidentifikasi simbol matematika tulisan tangan. Akhirnya kita akan meninjau kembali pengidentifikasi spesies burung yang dibahas sebelumnya dan menggunakan deep learning untuk menghasilkan pengidentifikasi yang jauh lebih akurat. Topik yang akan kita bahas dalam bab ini adalah sebagai berikut:  Memahami jaringan saraf  Mengidentifikasi genre musik menggunakan jaringan saraf  Mengingat pekerjaan kita pada pendeteksi spam untuk menggunakan jaringan saraf Memahami jaringan saraf Jaringan saraf, yang awalnya disebut jaringan saraf tiruan, terinspirasi oleh neuron aktual yang ditemukan di otak hewan dan bagian lain dari sistem saraf. Neuron terhubung satu sama lain dan mereka menerima dan mengirim impuls ke seluruh tubuh hewan, atau dalam kasus komputasi, jaringan. Diagram berikut menunjukkan komponen neuron tunggal: [ 87 ]

Grafik berikut menunjukkan bagaimana neuron menyala:: [ 88 ]

Itu semua atau tidak sama sekali, artinya, ketika neuron mendapat masukan yang cukup dari tetangganya, ia dengan cepat menembak dan mengirimkan sinyal ke aksonnya ke setiap neuron yang terhubung ke depan. Di sini, kita dapat melihat neuron sebenarnya di otak: Otak manusia memiliki sekitar 100 miliar neuron, dan memiliki sekitar 100 triliun koneksi. Perlu dicatat bahwa jaringan saraf yang kita buat dalam perangkat lunak memiliki kompleksitas setidaknya 1 juta kali lebih sedikit. Feed-forward neural networks Sebagian besar jaringan saraf yang kita rancang adalah umpan maju (Feed- forward) dan terhubung sepenuhnya. Ini berarti bahwa setiap neuron terhubung ke setiap neuron di lapisan berikutnya. Lapisan pertama menerima input dan [ 89 ]

lapisan terakhir memberikan output. Struktur jaringan, yang berarti jumlah neuron dan koneksinya, ditentukan sebelumnya dan tidak dapat diubah, setidaknya tidak selama pelatihan. Juga, setiap input harus memiliki jumlah nilai yang sama. Ini berarti bahwa gambar, misalnya, mungkin perlu diubah ukurannya agar sesuai dengan jumlah neuron input. Jumlah neuron di setiap lapisan adalah bentuk lapisan itu: Setiap neuron individu menjumlahkan nilai yang diterimanya dari lapisan sebelumnya. Setiap koneksi dari satu neuron ke neuron berikutnya memiliki bobot. Saat menambahkan input, input dikalikan dengan bobot masing-masing. Setiap neuron juga memiliki input tambahan yang disebut bias, yang tidak terhubung ke neuron lain. Setelah input berbobot ditambahkan, fuction aktivasi diterapkan ke penjumlahan. Ada beberapa fuction aktivasi yang umum, misalnya tangen hiperbolik, yang bentuknya ditunjukkan di sini: [ 90 ]

Output dari setiap neuron adalah apapun yang keluar dari fuction aktivasi. Koneksi menunggu di jaringan mulai acak dan disesuaikan selama pelatihan. Tujuan pelatihan adalah untuk memeriksa ratusan, atau ribuan, atau bahkan lebih contoh kasus dan menyesuaikan bobot jaringan sampai jaringan cukup akurat. Setelah pelatihan, kita memiliki struktur jaringan yang telah kita definisikan, dan semua bobot yang dipelajari selama pelatihan. Dengan demikian, berikut ini benar: Jaringan saraf terlatih = Struktur + Bobot yang dipelajari Ini ditunjukkan di sini: [ 91 ]

Sekarang jaringan siap digunakan pada data baru di luar set pelatihan. Pelatihan berlangsung dalam batch, yang berarti bahwa beberapa kasus pelatihan dikirim melalui jaringan dan output, yang disebut prediksi, dikumpulkan. Kemudian, kerugian dihitung untuk setiap batch, yang merupakan ukuran kesalahan keseluruhan: [ 92 ]

Setiap bobot dalam jaringan kemudian disesuaikan tergantung pada apakah dan seberapa besar bobot itu berkontribusi pada kerugian keseluruhan. Dengan penyesuaian yang sangat bertahap, seharusnya ketika contoh dalam kumpulan ini dikunjungi lagi, prediksi akan lebih akurat. Jaringan sering dilatih selama beberapa zaman. Yang kita maksud dengan epoch adalah semua data pelatihan telah diproses satu kali. Jadi, 10 epoch berarti melihat data train ing yang sama sebanyak 10 kali. Kita sering memisahkan 20% atau lebih dari data pelatihan sebagai set validasi. Ini adalah data yang tidak kita gunakan selama pelatihan dan hanya digunakan untuk mengevaluasi model setelah setiap epoch. Idealnya, kita ingin jaringan menjadi lebih akurat, yang berarti kita ingin mengurangi kerugian, dan ini harus benar untuk set pelatihan dan set validasi. Kumpulan grafik berikut menunjukkan jenis perilaku ideal ini: [ 93 ]

Perhatikan tanda-tanda overfitting, yang berarti pelatihan menurun tetapi validasi meningkat. Jika jaringan tidak dirancang dengan benar, misalnya, jika memiliki terlalu banyak lapisan, jaringan dapat menjadi overfit, yang berarti kinerjanya sangat baik di set pelatihan tetapi buruk di set validasi. Ini adalah masalah karena pada akhirnya kita ingin menggunakan jaringan saraf pada data baru dari dunia nyata, yang mungkin akan sedikit berbeda dari set pelatihan, oleh karena itu kita menggunakan set validasi untuk melihat seberapa baik kinerja jaringan pada data yang tidak terlihat untuk pelatihan. Sampai sini [ 94 ]

Mengidentifikasi genre musik dengan jaringan saraf Di bagian ini, kita akan membangun jaringan saraf yang dapat mengidentifikasi genre musik. Kita akan menggunakan Koleksi Genre GTZAN yang dapat didownload di link https://github.com/chittalpatel/Music-Genre-Classification-GTZAN. Dataset memiliki 1.000 musik berbeda dari lebih dari 10 genre berbeda. Ada 100 musik per genre dan setiap musik berdurasi sekitar 30 detik. Kita akan menggunakan pustaka Python, librosa untuk mengekstrak fitur dari musik. Kita akan menggunakan koefisien cepstral frekuensi Mel (MFCC). Nilai MFCC meniru pendengaran manusia dan biasanya digunakan dalam aplikasi pengenalan suara serta deteksi genre musik. Nilai MFCC ini akan diumpankan langsung ke jaringan saraf. Untuk membantu kita memahami MFCC, mari gunakan dua contoh. Unduh Kick Loop 5 oleh Stereo Surgeon. Anda dapat melakukannya dengan mengunjungi https://freesound.org/people/stereo%20surgeon/sounds/266093, dan download Whistling by cmagar dengan mengunjungi https://freesound.org/people/grrlrighter/sounds/98195. Salah satunya adalah ketukan bass rendah dan yang lainnya adalah siulan bernada tinggi. Mereka jelas berbeda dan kita akan melihat bagaimana mereka terlihat berbeda dengan nilai MFCC. Mari kita pergi ke kode. Pertama, kita harus mengimpor Library librosa. Kita juga akan mengimpor glob karena kita akan membuat daftar file di direktori genre yang berbeda. Juga, impor numpy seperti biasa. Kita akan mengimpor matplotlib untuk menggambar grafik MFCC. Kemudian, akan mengimpor model Sequential dari Keras. Ini adalah jaringan saraf umpan maju yang khas. Terakhir, kita akan mengimpor lapisan jaringan saraf padat, yang hanya merupakan lapisan yang memiliki banyak neuron di dalamnya:


Like this book? You can publish your book online for free in a few minutes!
Create your own flipbook