|
import tensorflow as tf |
|
from transformers import BertTokenizer |
|
from transformers import TFBertForSequenceClassification |
|
from Sastrawi.Stemmer.StemmerFactory import StemmerFactory |
|
import streamlit as st |
|
import re |
|
from PIL import Image |
|
|
|
|
|
PRE_TRAINED_MODEL = 'indobenchmark/indobert-base-p2' |
|
bert_tokenizer = BertTokenizer.from_pretrained(PRE_TRAINED_MODEL) |
|
bert_model = TFBertForSequenceClassification.from_pretrained(PRE_TRAINED_MODEL, num_labels=2) |
|
bert_model.load_weights('model.h5') |
|
|
|
|
|
stemmer = StemmerFactory().create_stemmer() |
|
|
|
def preprocess_text(text): |
|
|
|
stemmed_text = stemmer.stem(text.lower()) |
|
|
|
return stemmed_text |
|
|
|
def predict_sentiment(text): |
|
preprocessed_text = preprocess_text(text) |
|
input_ids = tf.constant(bert_tokenizer.encode(preprocessed_text, add_special_tokens=True))[None, :] |
|
logits = bert_model(input_ids)[0] |
|
probabilities = tf.nn.softmax(logits, axis=1) |
|
sentiment = tf.argmax(probabilities, axis=1) |
|
return sentiment.numpy()[0], probabilities.numpy()[0] |
|
|
|
menu = ["Home","Prediksi Analisis"] |
|
choice = st.sidebar.selectbox("Menu", menu) |
|
|
|
|
|
if choice == "Home": |
|
st.title("Selamat Datang di Aplikasi Prediksi Sentimen Komentar Aplikasi Dana di Intagram Menggunakan BERT") |
|
st.write("Ini merupakan aplikasi prediksi Komentar aplikasi Dana menggunakan model Pretrained BERT dari IndoBert. Aplikasi ini dapat memprediksi apakah komentar yang dilontarkan pada postingan akun instagram Dana bersifat positif atau negatif berdasarkan teks yang dimasukkan.") |
|
image = Image.open("Logo_dana.png") |
|
st.image(image, caption='Logo Dana') |
|
st.write("DANA adalah dompet digital Indonesia yang dirancang untuk menangani semua transaksi tunai dan kartu digital online dan offline dengan kecepatan, kenyamanan dan keamanan yang terjamin. Talenta terbaik Indonesia akan terus mengembangkan dana sebagai dompet digital open platform yang dapat digunakan untuk mendukung segala aktivitas keuangan dan gaya hidup digital seluruh masyarakat Indonesia.") |
|
st.write("Berdasarkan survei yang dilakukan oleh merdeka, dana menjadi aplikasi popular setelah gopay dan ovo yang dimana dana ini memiliki pertumbuhan terpesat dalam jumlah penggunaanya. Pada akun Instagram dana, dana sering kali melakukan kampanye agar pengguna mengetahui informasi terbarunya. Kampanye tersebut menuai banyak komentar yang bersifat membangun atau menjantuhkan, dari komentar tersebut dapat dimanfaatkan sebagai sebuah informasi") |
|
st.write("Data komentar yang terkumpul sebanyak 1331 dari komentar pada postingan akun instagram diberikan label secara otomatis, mendapatkan 2 kategori yaitu positif dan negatif berikut jumlah dari masing-masing kategori.") |
|
image = Image.open("SEBELUM OVR.png") |
|
st.image(image, caption='Jumlah Positif dan Negatif') |
|
st.write("Dalam penelitian, jumlah kategori akan diseimbangkan menggunakan random oversampling yang dapat dilihat pada gambar berikut :") |
|
image = Image.open("sesudah over.png") |
|
st.image(image, caption='Jumlah Positif dan Negatif sesudah Oversampling') |
|
st.write("Random Oversampling ini dilakukan agar nantinya klasifikasi dilakukan dengan tepat dan tidak bias terhadap sampel mayoritas") |
|
st.write("Masuk ke menu Prediksi Analisis untuk mencoba hasil penelitian yang dilakukan") |
|
elif choice == "Prediksi Analisis": |
|
st.title('Prediksi Sentimen menggunakan BERT') |
|
|
|
|
|
text = st.text_area('Masukkan teks', '') |
|
|
|
|
|
if st.button('Prediksi'): |
|
if text.strip() == '': |
|
st.warning('Masukkan teks terlebih dahulu.') |
|
else: |
|
sentiment, probabilities = predict_sentiment(text) |
|
|
|
|
|
positive_probability = probabilities[1] * 100 |
|
negative_probability = probabilities[0] * 100 |
|
st.write(f'HASIL PREDIKSI') |
|
if sentiment == 0: |
|
st.write(f'Negatif ({negative_probability:.2f}%)') |
|
else: |
|
st.write(f'Positif ({positive_probability:.2f}%)') |