File size: 1,888 Bytes
54b562a
7b1acfd
54b562a
 
7b1acfd
d25636a
7b1acfd
 
 
 
 
d25636a
7b1acfd
54b562a
7b1acfd
2e8f79f
54b562a
7b1acfd
54b562a
 
 
7b1acfd
2e8f79f
 
 
04a1c8b
2e8f79f
 
 
 
 
54b562a
7b1acfd
 
 
54b562a
7b1acfd
54b562a
7b1acfd
2e8f79f
7b1acfd
2e8f79f
 
7b1acfd
04a1c8b
7b1acfd
04a1c8b
7b1acfd
2e8f79f
7b1acfd
54b562a
7b1acfd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import streamlit as st
from transformers import AutoModelForQuestionAnswering, AutoTokenizer, pipeline
import pandas as pd

# Memuat model dan tokenizer IndoBERT
@st.cache_resource
def load_indobert_model():
    model_name = "indobenchmark/indobert-base-p1"
    tokenizer = AutoTokenizer.from_pretrained(model_name)
    model = AutoModelForQuestionAnswering.from_pretrained(model_name)
    return pipeline("question-answering", model=model, tokenizer=tokenizer)

qa_pipeline = load_indobert_model()

# Memuat dataset SOP
@st.cache_data
def load_sop_dataset():
    return pd.read_csv("dataset.csv")

dataset = load_sop_dataset()

# Fungsi untuk menemukan konteks terbaik
def find_best_context(question, dataset):
    best_score = 0
    best_context = None
    for _, row in dataset.iterrows():
        overlap = len(set(question.lower().split()) & set(row["text"].lower().split()))
        if overlap > best_score:
            best_score = overlap
            best_context = row["text"]
    return best_context

# Antarmuka Streamlit
st.title("Sistem Penjawab Pertanyaan SOP dengan IndoBERT")
st.markdown("Ajukan pertanyaan seputar Prosedur Operasional Standar:")

question = st.text_area("Masukkan pertanyaan Anda:", "")

if st.button("Dapatkan Jawaban"):
    if question:
        with st.spinner("Mencari konteks yang relevan..."):
            context = find_best_context(question, dataset)
            if context:
                with st.spinner("Menjawab pertanyaan Anda..."):
                    result = qa_pipeline(question=question, context=context)
                    st.success("Jawaban:")
                    st.write(result["answer"])
                    st.write("Skor Keyakinan:", result["score"])
            else:
                st.warning("Konteks yang relevan tidak ditemukan. Silakan coba pertanyaan lain.")
    else:
        st.warning("Silakan masukkan pertanyaan.")