Membangun model analisis sentimen Anda sendiri mungkin tampak menakutkan. Panduan ini memandu Anda melalui langkah-langkah untuk memulai.

Analisis sentimen adalah teknik pemrosesan bahasa alami (NLP) yang mengidentifikasi sikap di balik sebuah teks. Ini juga dikenal sebagai penambangan opini. Tujuan analisis sentimen adalah untuk mengidentifikasi apakah teks tertentu memiliki sentimen positif, negatif, atau netral. Ini banyak digunakan oleh bisnis untuk secara otomatis mengklasifikasikan sentimen dalam ulasan pelanggan. Menganalisis ulasan dalam jumlah besar membantu mendapatkan wawasan berharga tentang preferensi pelanggan.

Menyiapkan Lingkungan Anda

Anda harus akrab dengan Dasar-dasar python untuk menindaklanjuti. Navigasi ke Google Colab atau buka Jupyter Notebook. Kemudian buat buku catatan baru. Jalankan perintah berikut untuk menginstal pustaka yang diperlukan di lingkungan Anda.

Kode sumber lengkap dari proyek ini tersedia di sini repositori GitHub.

! pip install tensorflow scikit-learn pandas numpy pickle5

Anda akan menggunakan NumPy dan perpustakaan panda untuk memanipulasi dataset. TensorFlow untuk membuat dan melatih model machine learning. Scikit-learn untuk memisahkan dataset menjadi set pelatihan dan pengujian. Terakhir, Anda akan menggunakan pickle5 untuk membuat serial dan menyimpan objek tokenizer.

Mengimpor Perpustakaan yang Diperlukan

Impor pustaka yang diperlukan yang akan Anda gunakan untuk melakukan praproses data dan membuat model.

impor numpy sebagai np
impor panda sebagai pd
impor tensorflow sebagai tf
dari sklearn.model_selection impor train_test_split
dari sklearn.metrics impor akurasi_skor
dari tensorflow.keras.preprocessing.text impor Tokenizer
dari tensorflow.keras.preprocessing.sequence impor pad_sequences
dari tensorflow.keras.models impor Sekuensial
dari tensorflow.keras.layers impor Menyematkan, Conv1D, GlobalMaxPooling1D, Padat, Putus Sekolah
impor acar5 sebagai acar

Anda akan menggunakan kelas yang Anda impor dari modul nanti dalam kode.

Memuat Kumpulan Data

Di sini, Anda akan menggunakan kumpulan data Ulasan Hotel Trip Advisor dari Kaggle untuk membangun model analisis sentimen.

df = pd.baca_csv('/content/tripadvisor_hotel_reviews.csv')
cetak (df.head())

Muat dataset dan cetak lima baris pertamanya. Mencetak lima baris pertama akan membantu Anda memeriksa nama kolom kumpulan data Anda. Ini akan sangat penting saat melakukan pra-pemrosesan dataset.

Kumpulan data Ulasan Hotel Trip Advisor memiliki kolom indeks, kolom Ulasan, dan kolom Peringkat.

Pra-pemrosesan Data

Pilih Tinjauan Dan Peringkat kolom dari kumpulan data. Buat kolom baru berdasarkan kolom Peringkat dan beri nama sentimen. Jika peringkatnya lebih besar dari 3, beri label sentimen sebagai positif. Jika peringkatnya kurang dari 3, beri label sebagai negatif. Jika peringkatnya tepat 3, beri label sebagai netral.

Pilih hanya kolom Ulasan dan sentimen dari kumpulan data. Kocok baris secara acak dan setel ulang indeks bingkai data. Pengacakan dan pengaturan ulang memastikan data didistribusikan secara acak, yang diperlukan untuk pelatihan dan pengujian model yang tepat.

df = df[['Tinjauan', 'Peringkat']]
df['sentimen'] = df['Peringkat'].menerapkan(lambda X: 'positif'jika x> 3
kalau tidak'negatif'jika x < 3
kalau tidak'netral')
df = df[['Tinjauan', 'sentimen']]
df = df.sampel (frac=1).reset_index (turun=BENAR)

Mengkonversi Tinjauan teks menjadi urutan bilangan bulat menggunakan tokenizer. Ini membuat kamus kata-kata unik yang ada dalam teks Ulasan dan memetakan setiap kata ke nilai bilangan bulat unik. Menggunakan pad_sequences fungsi dari Keras untuk memastikan bahwa semua urutan ulasan memiliki panjang yang sama.

tokenizer = Tokenizer (num_words=5000, oov_token='')
tokenizer.fit_on_texts (df['Tinjauan'])
indeks_kata = tokenizer.indeks_kata
urutan = tokenizer.texts_to_sequences (df['Tinjauan'])
padded_sequences = pad_sequences (urutan, maxlen=100, memotong='pos')

Ubah label sentimen menjadi pengkodean One-hot.

sentimen_labels = pd.get_dummies (df['sentimen']).nilai

Pengkodean satu-panas mewakili data kategorikal dalam format yang lebih mudah digunakan oleh model Anda.

Memisahkan Set Data Menjadi Set Pelatihan dan Pengujian

Gunakan scikit-learn untuk membagi dataset secara acak menjadi set pelatihan dan pengujian. Anda akan menggunakan set pelatihan untuk melatih model untuk mengklasifikasikan sentimen ulasan. Dan Anda akan menggunakan set pengujian untuk mengakses seberapa bagus model dalam mengklasifikasikan ulasan baru yang tidak terlihat.

x_train, x_test, y_train, y_test = train_test_split (padded_sequences, sentimen_labels, test_size=0.2)

Ukuran pemisahan dataset adalah 0,2. Artinya, 80% data akan melatih model. Dan 20% sisanya akan menguji performa model.

Membuat Jaringan Neural

Membuat jaringan syaraf dengan enam lapisan.

model = Berurutan()
model.add (Menyematkan(5000, 100, masukan_panjang=100))
model.tambahkan (Conv1D(64, 5, aktivasi='relu'))
model.tambahkan (GlobalMaxPooling1D())
model.add (Padat(32, aktivasi='relu'))
model.add (Putus (0.5))
model.add (Padat(3, aktivasi='softmax'))
model.kompilasi (pengoptimal='adam', kerugian ='kategori_silang_silang', metrik=['ketepatan'])
model.ringkasan()

Lapisan pertama dari jaringan saraf adalah lapisan Embedding. Lapisan ini mempelajari representasi padat dari kata-kata dalam kosakata. Lapisan kedua adalah lapisan Conv1D dengan 64 filter dan ukuran kernel 5. Lapisan ini melakukan operasi konvolusi pada urutan masukan, menggunakan jendela geser kecil berukuran 5.

Lapisan ketiga mengurangi urutan peta fitur menjadi vektor tunggal. Dibutuhkan nilai maksimum untuk setiap peta fitur. Lapisan keempat melakukan transformasi linier pada vektor masukan. Lapisan kelima secara acak menetapkan sebagian kecil dari unit input menjadi 0 selama pelatihan. Ini membantu mencegah overfitting. Lapisan terakhir mengubah output menjadi distribusi probabilitas atas tiga kemungkinan kelas: positif, netral, dan negatif.

Melatih Neural Network

Sesuaikan set pelatihan dan pengujian dengan model. Latih model selama sepuluh zaman. Anda dapat mengubah jumlah zaman sesuai keinginan Anda.

model.fit (x_train, y_train, epochs=10, ukuran_kelompok=32, validasi_data=(x_test, y_test))

Setelah setiap zaman, performa model pada set pengujian dievaluasi.

Mengevaluasi Kinerja Model Terlatih

Menggunakan model.prediksi() metode untuk memprediksi label sentimen untuk set tes. Menghitung skor akurasi menggunakan akurasi_skor() fungsi dari scikit-belajar.

y_pred = np.argmax (model.predict (x_test), sumbu=-1)
mencetak("Ketepatan:", akurasi_skor (np.argmax (y_test, axis=-1), y_pred))

Akurasi model ini sekitar 84%.

Menyimpan Model

Simpan model menggunakan model.save() metode. Gunakan acar untuk membuat cerita bersambung dan menyimpan objek tokenizer.

model.simpan('sentiment_analysis_model.h5')
dengan membuka('tokenizer.pickle', 'wb') sebagai menangani:
pickle.dump (tokenizer, handle, protocol=pickle. PROTOKOL_TERTINGGI)

Objek tokenizer akan memberi token teks input Anda sendiri dan menyiapkannya untuk dimasukkan ke model terlatih.

Menggunakan Model untuk Mengklasifikasikan Sentimen Teks Anda Sendiri

Setelah membuat dan menyimpan model, Anda dapat menggunakannya untuk mengklasifikasikan sentimen teks Anda sendiri. Pertama, muat model dan tokenizer yang disimpan.

# Muat model dan tokenizer yang disimpan
impor keras

model = keras.models.load_model('sentiment_analysis_model.h5')
dengan membuka('tokenizer.pickle', 'rb') sebagai menangani:
tokenizer = pickle.load (pegangan)

Tentukan fungsi untuk memprediksi sentimen teks masukan.

defprediksi_sentimen(teks):
# Tokenize dan pad teks input
text_sequence = tokenizer.texts_to_sequences([teks])
text_sequence = pad_sequences (text_sequence, maxlen=100)

# Buat prediksi menggunakan model terlatih
predict_rating = model.predict (text_sequence)[0]
jika np.argmax (predicted_rating) == 0:
kembali'Negatif'
elif np.argmax (predicted_rating) == 1:
kembali'Netral'
kalau tidak:
kembali'Positif'

Terakhir, prediksi teks Anda sendiri.

input_teks = "Saya sangat senang saya menginap di hotel itu. Stafnya luar biasa dan kamarnya fantastis!"
prediksi_sentimen = prediksi_sentimen (masukan_teks)
cetak (predicted_sentiment)

Sentimen yang diprediksi dari ulasan di atas adalah sebagai berikut:

Model mampu mengklasifikasikan sentimen dari ketiga review dengan tepat.

Memprediksi Sentimen Menggunakan Model Pra-Terlatih

Terkadang dalam pembelajaran mesin, Anda mungkin memiliki tantangan untuk menemukan kumpulan data yang tepat. Anda mungkin juga kekurangan sumber daya untuk membuat kumpulan data Anda sendiri. Di sinilah model pra-terlatih masuk. Anda harus tahu cara menggunakan API mereka dan membiarkan mereka menangani sisanya.