Mendeteksi Ulasan Hotel yang Benar dan Menyesatkan menggunakan Machine Learning
Dalam tutorial ini, Anda akan menggunakan algoritma machine learning untuk menerapkan masalah nyata di Python. Anda akan mempelajari cara membaca banyak file teks di python, mengekstrak label, menggunakan dataframe, dan masih banyak lagi!
Secara singkat, Anda akan membahas topik-topik berikut dalam tutorial hari ini:
Pertama, Anda akan mendapat pengantar tentang Hotel Review Dataset lalu mengimpor semua modul yang diperlukan,
Kemudian Anda akan mulai memahami struktur data: Mengambil semua file teks dari path data, mengekstrak label darinya, membuat dataframe berisi label dan ulasan, lalu menggabungkan kedua dataframe,
Berikutnya Anda akan melakukan prapemrosesan data: Menghapus stopword dari ulasan hotel menggunakan pustaka natural language toolkit dan mengekstrak kelas kata (parts of speech) untuk setiap kata dalam dataset Anda.
Setelah data dipraproses, Anda siap menyiapkan pelatihan data: Memisahkan data menjadi data latih dan uji, mempelajari Tfidf, melakukan vektorisasi pada data latih dan uji, mengimplementasikan model support vector machine, menyimpan keduanya: vektorisasi Tfidf untuk data Anda dan modelnya, lalu memuatnya kembali.
Terakhir, Anda akan melakukan prediksi pada data uji: Memplot confusion matrix, skor akurasi, dan confusion matrix untuk mengecek efektivitas model, Anda juga akan menguji model dengan memisahkan data latih dan uji menggunakan berbagai random state, dan pada akhirnya menggunakan dua ulasan Yelp daring untuk menguji model Anda.
Memahami Deceptive Opinion Spam Dataset
Sebelum melanjutkan dan memuat data, ada baiknya melihat dengan saksama apa yang akan Anda kerjakan! Deceptive opinion spam dataset adalah korpus yang terdiri dari ulasan hotel yang jujur dan menyesatkan dari 20 hotel di Chicago. Data ini dijelaskan dalam dua makalah berdasarkan sentimen ulasan. Secara khusus, artikel membahas ulasan bersentimen positif dalam 1 dan ulasan bersentimen negatif dalam 2, silakan merujuk ke makalah tersebut untuk pengetahuan yang lebih mendalam.
Korpus ini berisi:
400 ulasan positif yang jujur dari TripAdvisor
400 ulasan positif yang menyesatkan dari Mechanical Turk
400 ulasan negatif yang jujur dari Expedia, Hotels.com, Orbitz, Priceline, TripAdvisor, dan Yelp
400 ulasan negatif yang menyesatkan dari Mechanical Turk
Secara total ada 1600 ulasan, tugas Anda adalah mengklasifikasikan ulasan hotel yang jujur dan menyesatkan menggunakan algoritma machine learning.
Mari kita mulai!
Impor semua modul yang diperlukan
Anda mulai dengan mengimpor semua modul yang diperlukan seperti os, pandas, nltk, regex dan yang terpenting Sklearn karena dalam tutorial hari ini Anda akan menggunakan algoritma machine learning Support Vector Machine yang disediakan oleh pustaka Sklearn!
Anda akan membutuhkan os untuk melakukan iterasi pada folder dan subfolder tempat file teks berada, fnmatch akan berguna untuk memfilter hanya file teks dan mengabaikan yang lainnya di dalam folder, pandas akan membantu Anda menempatkan data dalam bentuk baris dan kolom serta melakukan berbagai manipulasi data. Regex membantu mengekstrak data berdasarkan pola yang Anda tentukan, jadi Anda akan memerlukannya juga! Nltk adalah natural language toolkit yang akan membantu Anda menghapus stopword yang tidak ingin dipelajari oleh model. Lalu yang paling penting Anda akan mengimpor Sklearn yang menyediakan sekumpulan pustaka yang akan Anda gunakan untuk memanipulasi data, melakukan vektorisasi data, mempelajari batas antar titik data menggunakan algoritma machine learning dan akhirnya memplot akurasi.
import os
import fnmatch
from textblob import TextBlob
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from nltk.corpus import stopwords
from nltk import pos_tag,pos_tag_sents
import regex as re
import operator
from sklearn.svm import SVC, LinearSVC
from sklearn.metrics import classification_report, accuracy_score, confusion_matrix
from sklearn.cross_validation import train_test_split
from sklearn import metrics
from sklearn import svm
from sklearn.grid_search import GridSearchCV
import pickle
from nltk.corpus import stopwords
Didukung oleh
Ambil semua file teks dari path, ekstrak labelnya, dan buat dataframe label
Gambar: Struktur Data
Setelah mengimpor pustaka, tugas berikutnya adalah mengekstrak label dari data. Label akan membantu model membedakan antara ulasan, apakah suatu ulasan termasuk kelas yang jujur atau menyesatkan.
Pertama, Anda akan melakukan iterasi pada semua file teks dan mendapatkan path absolut dari semua file teks yang kemudian akan digunakan untuk mengekstrak label yang sesuai.
path ='op_spam_train/'
label =[]
configfiles =[os.path.join(subdir,f)for subdir, dirs, files in os.walk(path)for f in fnmatch.filter(files,'*.txt')]Didukung oleh
Seharusnya ada 1600 path yang masing-masing merepresentasikan satu file teks baru. Mari kita verifikasi cepat!
'op_spam_train/negative_polarity/deceptive_from_MTurk/fold4/d_swissotel_14.txt'Didukung oleh
Dari keluaran di atas, Anda dapat melihat bahwa untuk mengekstrak label kita membutuhkan semacam filter. Untuk itu, Anda akan menggunakan Regex atau regular expression.
for f in configfiles:
c = re.search('(trut|deceptiv)\w',f)
label.append(c.group())Didukung oleh
Setelah label diekstrak dalam sebuah list bernama label, mari buat dataframe dari list tersebut.
labels = pd.DataFrame(label, columns =['Labels'])Didukung oleh
Mari cetak lima baris pertama dari dataframe labels.
Sekarang mari gabungkan dataframe labels dan reviews!
Gabungkan dataframe ulasan dan dataframe label
result = pd.merge(reviews, labels,right_index=True,left_index =True)
result['HotelReviews']= result['HotelReviews'].map(lambda x: x.lower())Didukung oleh
Setelah digabung, Anda memiliki dataframe baru bernama result. Mari juga cetak beberapa baris dari dataframe baru ini.
Saat menangani data teks, sangat penting untuk menghapus stopword. Stopword tidak bermakna dan tidak memberikan informasi yang dapat membantu model mempelajari pola dalam data.
Anda akan membuat kolom baru dalam dataframe bernama review_without_stopwords. Fungsi lambda akan memproses semua baris pada kolom HotelReviews. Anda akan menggunakan list comprehension dan hanya menyimpan kata-kata yang tidak ada dalam variabel stop ke kolom baru.
Catatan: Untuk menjalankan sel di bawah ini, Anda mungkin perlu mengeksekusi baris-baris kode di atas pada terminal Anda.
stop = stopwords.words('english')
result['review_without_stopwords']= result['HotelReviews'].apply(lambda x:' '.join([word for word in x.split()if word notin(stop)]))Didukung oleh
Ekstrak kelas kata (parts of speech) dari ulasan hotel yang akan dijadikan masukan fitur untuk model
Menurut 1 yang menyarankan bahwa opini yang jujur dan menyesatkan masing-masing dapat diklasifikasikan ke dalam genre informatif dan imajinatif. Terdapat perbedaan distribusional yang kuat antara tulisan informatif dan imajinatif, yaitu yang pertama biasanya terdiri dari lebih banyak nomina, adjektiva, preposisi, determinator, dan konjungsi koordinatif, sedangkan yang terakhir mencakup lebih banyak verba, adverbia, pronomina, dan predeterminator. Namun, bahwa opini menyesatkan mengandung lebih banyak superlatif bukanlah hal yang mengejutkan karena tulisan menyesatkan (meski tidak selalu tulisan imajinatif pada umumnya) seringkali berisi bahasa yang berlebihan.
Jadi, sekarang untuk setiap kata dalam baris dataframe mari kita ekstrak kelas katanya masing-masing dan Anda kemudian akan memasukkannya sebagai vektor fitur ke dalam model.
Untuk pelabelan pos, Anda akan menggunakan TextBlob, yaitu pustaka Python untuk memproses data tekstual. Pustaka ini menyediakan API sederhana untuk menyelami tugas-tugas pemrosesan bahasa alami (NLP) umum seperti penandaan kelas kata, ekstraksi frasa nomina, analisis sentimen, klasifikasi, penerjemahan, dan lainnya.
Catatan: Untuk menjalankan sel fungsi pos, Anda mungkin perlu menjalankan baris-baris kode berikut di jendela terminal Anda.
import nltk
nltk.download('punkt')
nltk.download('averaged_perceptron_tagger')Didukung oleh
defpos(review_without_stopwords):return TextBlob(review_without_stopwords).tags
Didukung oleh
os = result.review_without_stopwords.apply(pos)
os1 = pd.DataFrame(os)Didukung oleh
Setiap baris dataframe os1 akan berisi sebuah daftar kata beserta kelas katanya masing-masing. Anda tidak dapat memvektorkan sebuah daftar untuk dimasukkan ke dalam model. Jadi, Anda harus mengonversi baris-baris berupa daftar ini menjadi string.
Mari konversi setiap baris menjadi string, di mana setiap kata akan digabungkan dengan pos yang sesuai menggunakan garis miring, dan setiap kata dipisahkan oleh satu spasi.
os1['pos']= os1['review_without_stopwords'].map(lambda x:" ".join(["".join(x)for x in x ]))Didukung oleh
Terakhir, mari gabungkan kolom pos dengan dataframe utama result dan cetak beberapa baris pertamanya!
result = result = pd.merge(result, os1,right_index=True,left_index =True)
result.head()Didukung oleh
Fase Pelatihan
Bagi data menjadi dua bagian: 80% latih dan 20% uji
Setelah fitur diekstrak, sekarang saatnya membagi data menjadi pelatihan dan pengujian. Untuk tutorial ini, Anda akan membagi 80% data untuk pelatihan dan 20% sisanya untuk pengujian.
review_train, review_test, label_train, label_test = train_test_split(result['pos'],result['Labels'], test_size=0.2,random_state=13)Didukung oleh
Vektorkan data latih dan uji menggunakan TfidfVectorizer
Mari pahami lebih detail tentang TfidfVectorizer
Tfidf memiliki dua bagian:
Term Frequency (Tf): Seberapa sering sebuah kata tertentu muncul dalam satu dokumen. Untuk memahaminya lebih baik mari ambil kata: “the”. Kata ini cukup umum dan akan muncul dengan frekuensi tinggi di semua dokumen Anda. Namun jika dipikir, “the” tidak memberikan info tambahan tentang dokumen Anda. Tetapi jika kita berbicara tentang kata “messi”, kata ini memberi konteks. Kita bisa mengatakan dengan tingkat kepastian tertentu bahwa dokumen tersebut mungkin tentang sepak bola. Jadi kita perlu mengurangi bobot “the” dengan cara tertentu. Sekarang Anda mungkin berkata bisa mengambil kebalikan dari frekuensi masing-masing untuk memberi bobot lebih pada “messi”. Hampir benar tapi ada catatan. Mungkin ada kata yang sangat jarang dalam dokumen. Misalnya: “floccinaucinihilipilification”. Ini adalah kata nyata yang berarti: “Tindakan atau kebiasaan menilai sesuatu tidak berharga.” Jika Anda menggunakan kebalikan untuk kata ini, nilainya akan mendekati 1 tetapi lagi-lagi tidak memberi tahu konteks. Jadi, (menggunakan angka sebagai contoh) tf (“the”) = 100 tf(“messi”) = 5 tf(“floccinaucinihilipilification”) = 1
Inverse Document Frequency (idf): Masalah kata yang sering dan yang langka di atas diatasi dengan menambahkan istilah ini. Jadi apa itu? Dihitung dengan mengambil log dari {jumlah dokumen dalam korpus dibagi jumlah dokumen yang memuat istilah tersebut}. Jadi untuk “the”, rasionya akan mendekati 1. Karena itu, log akan menjadi 0. idf (“the”) = 0 idf (“messi”) = log(10/3) = 0,52 (karena korpus tentang sepak bola) idf (“floccinaucinihilipilification”) = log(10/1) = 1
Langkah terakhir: Sekarang kita ingin bobot yang diberikan pada “messi” lebih tinggi daripada dua kata lainnya. Untuk itu kita mengalikan dua istilah: tfidf = tf x idf "the" = 100 x 0 = 0, "floccinaucinihilipilification" = 1 x 1 = 1, "messi" = 5 x 0,52 = 2,6
Teknik pembobotan ini membantu model machine learning (ML) saat klasifikasi karena kita secara eksplisit memberi tahu kata mana yang berbobot lebih/kurang.
Sekarang setelah Anda memahaminya, mari kita terapkan pada data latih dan uji.
Sekarang, Anda akan mengimplementasikan model machine learning yang dikenal sebagai Support Vector Machines (SVM). Untuk memahaminya Anda dapat mengikuti tautan ini.
Untuk memilih hiperparameter terbaik bagi algoritma ML Anda, Anda akan menggunakan GridSearchCV, yang berdasarkan data dan label pelatihan Anda menyarankan nilai hiperparameter terbaik dari nilai-nilai yang Anda tentukan sebagai daftar. Anda akan memilih lima nilai berbeda untuk C dan gamma dan berdasarkan data Anda; Anda akan mendapatkan nilai hiperparameter terbaik.
clf = svm.SVC(C=10,gamma=0.001,kernel='linear')
clf.fit(X_train_tf,label_train)
pred = clf.predict(X_test_tf)Didukung oleh
Simpan vektorisasi Tfidf dan model ML
Mari simpan model yang baru saja Anda latih bersama dengan vektorisasi Tfidf menggunakan pustaka pickle yang Anda impor di awal, sehingga nanti Anda bisa langsung memuat data, melakukan vektorisasi, dan memprediksi menggunakan model ML.
withopen('vectorizer.pickle','wb')as fin:
pickle.dump(tf_vect, fin)Didukung oleh
withopen('mlmodel.pickle','wb')as f:
pickle.dump(clf,f)Didukung oleh
/home/naveksha/.local/lib/python3.5/site-packages/sklearn/base.py:311: UserWarning: Trying to unpickle estimator SVC from version pre-0.18 when using version 0.19.1. This might lead to breaking code or invalid results. Use at your own risk.
UserWarning)/home/naveksha/.local/lib/python3.5/site-packages/sklearn/base.py:311: UserWarning: Trying to unpickle estimator TfidfTransformer from version pre-0.18 when using version 0.19.1. This might lead to breaking code or invalid results. Use at your own risk.
UserWarning)/home/naveksha/.local/lib/python3.5/site-packages/sklearn/base.py:311: UserWarning: Trying to unpickle estimator TfidfVectorizer from version pre-0.18 when using version 0.19.1. This might lead to breaking code or invalid results. Use at your own risk.
UserWarning)Didukung oleh
Prediksi pada Data Uji
X_test_tf = tf_vect.transform(review_test)
pred = clf.predict(X_test_tf)Didukung oleh
Plot confusion matrix, skor akurasi, dan classification report untuk menganalisis kinerja model
print(metrics.accuracy_score(label_test, pred))Didukung oleh
Confusion matrix di atas adalah matriks 2 x 2, di mana elemen baris pertama kolom pertama adalah True Positive (TP), baris pertama kolom kedua adalah False Negative (FN), baris kedua kolom pertama adalah False Positive (FP) dan baris kedua kolom kedua adalah True Negative (TN).
Dari confusion matrix di atas, Anda dapat menyimpulkan hanya 10 sampel uji dari 320 yang salah klasifikasi.
print(classification_report(label_test, pred))Didukung oleh
precision recall f1-score support
deceptive 0.970.960.97155
truth 0.960.980.97165
avg / total 0.970.970.97320Didukung oleh
Uji Model menggunakan berbagai Random State
Random State 1
review_train, review_test, label_train, label_test = train_test_split(result['pos'],result['Labels'], test_size=0.2,random_state=1)Didukung oleh
X_test_tf = tf_vect.transform(review_test)
pred = clf.predict(X_test_tf)Didukung oleh
print(metrics.accuracy_score(label_test, pred))Didukung oleh
print(classification_report(label_test, pred))Didukung oleh
precision recall f1-score support
deceptive 0.990.980.99168
truth 0.980.990.98152
avg / total 0.980.980.98320Didukung oleh
Dari prediksi di atas, Anda dapat melihat bahwa Model bekerja dengan Sangat Baik dan tidak overfitting karena Anda menguji model beberapa kali dengan membagi data secara berbeda setiap kali.
Uji model dengan dua ulasan dari Yelp
deftest_string(s):
X_test_tf = tf_vect.transform([s])
y_predict = clf.predict(X_test_tf)return y_predict
Didukung oleh
test_string("The hotel was good.The room had a 27-inch Samsung led tv, a microwave.The room had a double bed")Didukung oleh
test_string("My family and I are huge fans of this place. The staff is super nice, and the food is great. The chicken is very good, and the garlic sauce is perfect. Ice cream topped with fruit is delicious too. Highly recommended!")Didukung oleh
Model memprediksi kedua ulasan di atas dengan benar. Ulasan pertama adalah ulasan yang Jujur sedangkan ulasan kedua adalah ulasan yang menyesatkan!
Catatan
Kinerja model bervariasi saat diimplementasikan pada sistem pemrosesan yang berbeda dengan spesifikasi berbeda, ini adalah perilaku tidak biasa yang diamati. Jika komunitas dapat membantu mencari tahu masalah ini, hal itu akan sangat membantu banyak orang termasuk penulis artikel ini. Yang dimaksud komunitas adalah para pembaca yang akan melalui tutorial ini!
Selamat belajar!
Semoga tutorial ini benar-benar bermanfaat dan menambah nilai pada keterampilan Anda.
Jika Anda ingin mempelajari lebih lanjut tentang Machine Learning, ikuti kursus DataCamp Building Chatbots in Python.
Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Dalam tutorial ini, Anda akan bekerja dengan dataset teks Deceptive Opinion Spam Corpus sebagai contoh.
Secara singkat, Anda akan membahas topik-topik berikut dalam tutorial hari ini:
Memahami Deceptive Opinion Spam Dataset
Sebelum melanjutkan dan memuat data, ada baiknya melihat dengan saksama apa yang akan Anda kerjakan! Deceptive opinion spam dataset adalah korpus yang terdiri dari ulasan hotel yang jujur dan menyesatkan dari 20 hotel di Chicago. Data ini dijelaskan dalam dua makalah berdasarkan sentimen ulasan. Secara khusus, artikel membahas ulasan bersentimen positif dalam 1 dan ulasan bersentimen negatif dalam 2, silakan merujuk ke makalah tersebut untuk pengetahuan yang lebih mendalam.
Korpus ini berisi:
Secara total ada 1600 ulasan, tugas Anda adalah mengklasifikasikan ulasan hotel yang jujur dan menyesatkan menggunakan algoritma machine learning.
Mari kita mulai!
Impor semua modul yang diperlukan
Anda mulai dengan mengimpor semua modul yang diperlukan seperti os, pandas, nltk, regex dan yang terpenting Sklearn karena dalam tutorial hari ini Anda akan menggunakan algoritma machine learning Support Vector Machine yang disediakan oleh pustaka Sklearn!
Anda akan membutuhkan os untuk melakukan iterasi pada folder dan subfolder tempat file teks berada, fnmatch akan berguna untuk memfilter hanya file teks dan mengabaikan yang lainnya di dalam folder, pandas akan membantu Anda menempatkan data dalam bentuk baris dan kolom serta melakukan berbagai manipulasi data. Regex membantu mengekstrak data berdasarkan pola yang Anda tentukan, jadi Anda akan memerlukannya juga! Nltk adalah natural language toolkit yang akan membantu Anda menghapus stopword yang tidak ingin dipelajari oleh model. Lalu yang paling penting Anda akan mengimpor Sklearn yang menyediakan sekumpulan pustaka yang akan Anda gunakan untuk memanipulasi data, melakukan vektorisasi data, mempelajari batas antar titik data menggunakan algoritma machine learning dan akhirnya memplot akurasi.
Ambil semua file teks dari path, ekstrak labelnya, dan buat dataframe label
Setelah mengimpor pustaka, tugas berikutnya adalah mengekstrak label dari data. Label akan membantu model membedakan antara ulasan, apakah suatu ulasan termasuk kelas yang jujur atau menyesatkan.
Pertama, Anda akan melakukan iterasi pada semua file teks dan mendapatkan path absolut dari semua file teks yang kemudian akan digunakan untuk mengekstrak label yang sesuai.
Seharusnya ada 1600 path yang masing-masing merepresentasikan satu file teks baru. Mari kita verifikasi cepat!
Mari juga cetak salah satu path file teks.
Dari keluaran di atas, Anda dapat melihat bahwa untuk mengekstrak label kita membutuhkan semacam filter. Untuk itu, Anda akan menggunakan Regex atau regular expression.
Setelah label diekstrak dalam sebuah list bernama label, mari buat dataframe dari list tersebut.
Mari cetak lima baris pertama dari dataframe labels.
Ambil semua ulasan dan tambahkan ke dalam list
Setelah Anda mengekstrak semua label, saatnya mengekstrak ulasan dari file teks!
Seperti sebelumnya, sekarang Anda akan membuat dataframe dari list review.
Mari cetak lima baris pertama dari dataframe reviews.
Bagus! Sampai sini cukup intuitif, bukan?
Sekarang mari gabungkan dataframe labels dan reviews!
Gabungkan dataframe ulasan dan dataframe label
Setelah digabung, Anda memiliki dataframe baru bernama result. Mari juga cetak beberapa baris dari dataframe baru ini.
Hapus stopword dari kolom Hotel Reviews
Saat menangani data teks, sangat penting untuk menghapus stopword. Stopword tidak bermakna dan tidak memberikan informasi yang dapat membantu model mempelajari pola dalam data.
Anda akan membuat kolom baru dalam dataframe bernama review_without_stopwords. Fungsi lambda akan memproses semua baris pada kolom HotelReviews. Anda akan menggunakan list comprehension dan hanya menyimpan kata-kata yang tidak ada dalam variabel stop ke kolom baru.
Catatan: Untuk menjalankan sel di bawah ini, Anda mungkin perlu mengeksekusi baris-baris kode di atas pada terminal Anda.
Mari cepat cetak dataframe tanpa stopword!
Ekstrak kelas kata (parts of speech) dari ulasan hotel yang akan dijadikan masukan fitur untuk model
Menurut 1 yang menyarankan bahwa opini yang jujur dan menyesatkan masing-masing dapat diklasifikasikan ke dalam genre informatif dan imajinatif. Terdapat perbedaan distribusional yang kuat antara tulisan informatif dan imajinatif, yaitu yang pertama biasanya terdiri dari lebih banyak nomina, adjektiva, preposisi, determinator, dan konjungsi koordinatif, sedangkan yang terakhir mencakup lebih banyak verba, adverbia, pronomina, dan predeterminator. Namun, bahwa opini menyesatkan mengandung lebih banyak superlatif bukanlah hal yang mengejutkan karena tulisan menyesatkan (meski tidak selalu tulisan imajinatif pada umumnya) seringkali berisi bahasa yang berlebihan.
Jadi, sekarang untuk setiap kata dalam baris dataframe mari kita ekstrak kelas katanya masing-masing dan Anda kemudian akan memasukkannya sebagai vektor fitur ke dalam model.
Untuk pelabelan pos, Anda akan menggunakan TextBlob, yaitu pustaka Python untuk memproses data tekstual. Pustaka ini menyediakan API sederhana untuk menyelami tugas-tugas pemrosesan bahasa alami (NLP) umum seperti penandaan kelas kata, ekstraksi frasa nomina, analisis sentimen, klasifikasi, penerjemahan, dan lainnya.
Catatan: Untuk menjalankan sel fungsi pos, Anda mungkin perlu menjalankan baris-baris kode berikut di jendela terminal Anda.
Setiap baris dataframe os1 akan berisi sebuah daftar kata beserta kelas katanya masing-masing. Anda tidak dapat memvektorkan sebuah daftar untuk dimasukkan ke dalam model. Jadi, Anda harus mengonversi baris-baris berupa daftar ini menjadi string.
Mari konversi setiap baris menjadi string, di mana setiap kata akan digabungkan dengan pos yang sesuai menggunakan garis miring, dan setiap kata dipisahkan oleh satu spasi.
Terakhir, mari gabungkan kolom pos dengan dataframe utama result dan cetak beberapa baris pertamanya!
Fase Pelatihan
Bagi data menjadi dua bagian: 80% latih dan 20% uji
Setelah fitur diekstrak, sekarang saatnya membagi data menjadi pelatihan dan pengujian. Untuk tutorial ini, Anda akan membagi 80% data untuk pelatihan dan 20% sisanya untuk pengujian.
Vektorkan data latih dan uji menggunakan TfidfVectorizer
Mari pahami lebih detail tentang TfidfVectorizer
Tfidf memiliki dua bagian:
Teknik pembobotan ini membantu model machine learning (ML) saat klasifikasi karena kita secara eksplisit memberi tahu kata mana yang berbobot lebih/kurang.
Sekarang setelah Anda memahaminya, mari kita terapkan pada data latih dan uji.
Mengimplementasikan Model
Sekarang, Anda akan mengimplementasikan model machine learning yang dikenal sebagai Support Vector Machines (SVM). Untuk memahaminya Anda dapat mengikuti tautan ini.
Untuk memilih hiperparameter terbaik bagi algoritma ML Anda, Anda akan menggunakan GridSearchCV, yang berdasarkan data dan label pelatihan Anda menyarankan nilai hiperparameter terbaik dari nilai-nilai yang Anda tentukan sebagai daftar. Anda akan memilih lima nilai berbeda untuk C dan gamma dan berdasarkan data Anda; Anda akan mendapatkan nilai hiperparameter terbaik.
Simpan vektorisasi Tfidf dan model ML
Mari simpan model yang baru saja Anda latih bersama dengan vektorisasi Tfidf menggunakan pustaka pickle yang Anda impor di awal, sehingga nanti Anda bisa langsung memuat data, melakukan vektorisasi, dan memprediksi menggunakan model ML.
Muat vektorisasi Tfidf dan model ML
Prediksi pada Data Uji
Plot confusion matrix, skor akurasi, dan classification report untuk menganalisis kinerja model
Confusion matrix di atas adalah matriks 2 x 2, di mana elemen baris pertama kolom pertama adalah True Positive (TP), baris pertama kolom kedua adalah False Negative (FN), baris kedua kolom pertama adalah False Positive (FP) dan baris kedua kolom kedua adalah True Negative (TN).
Dari confusion matrix di atas, Anda dapat menyimpulkan hanya 10 sampel uji dari 320 yang salah klasifikasi.
Uji Model menggunakan berbagai Random State
Dari prediksi di atas, Anda dapat melihat bahwa Model bekerja dengan Sangat Baik dan tidak overfitting karena Anda menguji model beberapa kali dengan membagi data secara berbeda setiap kali.
Uji model dengan dua ulasan dari Yelp
Model memprediksi kedua ulasan di atas dengan benar. Ulasan pertama adalah ulasan yang Jujur sedangkan ulasan kedua adalah ulasan yang menyesatkan!
Catatan
Kinerja model bervariasi saat diimplementasikan pada sistem pemrosesan yang berbeda dengan spesifikasi berbeda, ini adalah perilaku tidak biasa yang diamati. Jika komunitas dapat membantu mencari tahu masalah ini, hal itu akan sangat membantu banyak orang termasuk penulis artikel ini. Yang dimaksud komunitas adalah para pembaca yang akan melalui tutorial ini!
Selamat belajar!
Semoga tutorial ini benar-benar bermanfaat dan menambah nilai pada keterampilan Anda.
Jika Anda ingin mempelajari lebih lanjut tentang Machine Learning, ikuti kursus DataCamp Building Chatbots in Python.