irhamni commited on
Commit
08e6a85
·
verified ·
1 Parent(s): 8045728

Upload 3 files

Browse files
Files changed (3) hide show
  1. app (4).py +139 -0
  2. perpustakaan_faq (2).csv +36 -0
  3. requirements1.txt +4 -0
app (4).py ADDED
@@ -0,0 +1,139 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # -*- coding: utf-8 -*-
2
+ """app.ipynb
3
+
4
+ Automatically generated by Colab.
5
+
6
+ Original file is located at
7
+ https://colab.research.google.com/drive/1aiG3WNZzfqKvIQLQ8wVnGMoPiXIWvmNZ
8
+ """
9
+
10
+ import pandas as pd
11
+ from sentence_transformers import SentenceTransformer, util
12
+ import gradio as gr
13
+ import numpy as np
14
+
15
+ # --- 1. Konfigurasi dan Pemuatan Data ---
16
+
17
+ # Nama file CSV yang diunggah
18
+ CSV_FILE_NAME = "perpustakaan_faq (2).csv"
19
+
20
+ # Inisialisasi Model Sentence Transformer berbasis IndoBERT
21
+ # Menggunakan model Sentence Transformer yang fine-tuned untuk Bahasa Indonesia
22
+ # Pilihan: 'paraphrase-multilingual-mpnet-base-v2' (Multilingual, performa kuat)
23
+ # atau model khusus IndoBERT jika tersedia versi S-BERT-nya.
24
+ # Karena ketersediaan, kita pakai multilingual yang terbukti kuat di B. Indonesia.
25
+ # Jika ingin murni IndoBERT, bisa menggunakan 'indobenchmark/indobert-base-p1'
26
+ # dan menyesuaikan proses untuk semantic search.
27
+
28
+ # Kita gunakan model yang sudah teruji kuat untuk similarity di B. Indonesia:
29
+ MODEL_NAME = 'paraphrase-multilingual-mpnet-base-v2'
30
+ # Pilihan ini merupakan model multilingual terbaik yang mendukung Indonesia dan
31
+ # lebih mudah diintegrasikan dengan S-BERT daripada IndoBERT murni.
32
+ try:
33
+ print(f"Mengunduh dan memuat model Indo-friendly Sentence Transformer: {MODEL_NAME}...")
34
+ # Model ini akan tetap memberikan hasil yang lebih baik daripada all-MiniLM-L6-v2
35
+ # untuk bahasa Indonesia karena sifat multilingualnya.
36
+ model = SentenceTransformer(MODEL_NAME)
37
+ print("Model berhasil dimuat.")
38
+ except Exception as e:
39
+ print(f"Error memuat model: {e}. Pastikan koneksi internet.")
40
+ # Jika gagal, bisa coba fallback ke model yang lebih kecil
41
+ MODEL_NAME = 'all-MiniLM-L6-v2'
42
+ print(f"Mencoba fallback ke model: {MODEL_NAME}")
43
+ model = SentenceTransformer(MODEL_NAME)
44
+
45
+
46
+ # Pemuatan data dari file CSV
47
+ def load_and_preprocess_data(csv_data_path):
48
+ """Memuat data FAQ dari CSV dan menghasilkan embeddings."""
49
+ try:
50
+ # Memuat CSV dari path yang diakses
51
+ df = pd.read_csv(csv_data_path)
52
+ print(f"Data berhasil dimuat. Total {len(df)} FAQ ditemukan.")
53
+
54
+ # Ambil kolom yang dibutuhkan (user_query -> Question, chatbot_response -> Answer)
55
+ df = df.rename(columns={'user_query': 'Question', 'chatbot_response': 'Answer'})
56
+ df['Question'] = df['Question'].astype(str).str.strip()
57
+ df['Answer'] = df['Answer'].astype(str).str.strip()
58
+
59
+ # Generate Embeddings untuk semua pertanyaan FAQ
60
+ print("Mulai menghasilkan embeddings untuk pertanyaan FAQ dengan model Indo-friendly...")
61
+ corpus_embeddings = model.encode(df['Question'].tolist(), convert_to_tensor=True)
62
+ print("Embeddings selesai dibuat.")
63
+
64
+ return df, corpus_embeddings
65
+ except Exception as e:
66
+ print(f"Error saat memproses data: {e}")
67
+ return None, None
68
+
69
+ # Menggunakan data yang diunggah
70
+ df_faq, corpus_embeddings = load_and_preprocess_data(CSV_FILE_NAME)
71
+
72
+ if df_faq is None:
73
+ raise Exception("Gagal memuat atau memproses data FAQ. Chatbot tidak dapat dijalankan.")
74
+
75
+ # --- 2. Fungsi Chatbot (Semantic Search) ---
76
+
77
+ def library_chatbot(user_input, top_k=1, score_threshold=0.6):
78
+ """
79
+ Fungsi inti chatbot: Menerima input pengguna, mencari pertanyaan paling mirip
80
+ secara semantik (menggunakan IndoBERT-friendly embeddings), dan mengembalikan jawabannya.
81
+ """
82
+ if not user_input:
83
+ return "Silakan ajukan pertanyaan terkait perpustakaan!"
84
+
85
+ # 1. Encode input pengguna menggunakan model yang sudah dilatih
86
+ query_embedding = model.encode(user_input, convert_to_tensor=True)
87
+
88
+ # 2. Hitung Cosine Similarity antara input pengguna dan semua pertanyaan FAQ
89
+ # util.semantic_search mengembalikan hasil yang sudah diurutkan
90
+ hits = util.semantic_search(query_embedding, corpus_embeddings, top_k=top_k)
91
+
92
+ # Ambil hasil terbaik
93
+ best_hit = hits[0][0] # hits adalah list of list
94
+
95
+ # 3. Tentukan apakah skor kemiripan cukup tinggi
96
+ score = best_hit['score']
97
+
98
+ if score >= score_threshold:
99
+ # Ditemukan jawaban yang relevan
100
+ index = best_hit['corpus_id']
101
+ # matched_question = df_faq.iloc[index]['Question'] # Untuk debug
102
+ response_answer = df_faq.iloc[index]['Answer']
103
+
104
+ return response_answer
105
+
106
+ else:
107
+ # Skor terlalu rendah, anggap tidak ada jawaban yang relevan di data FAQ
108
+ return (
109
+ "Mohon maaf, saya tidak menemukan jawaban yang cocok untuk pertanyaan Anda "
110
+ "dalam data FAQ yang tersedia. Coba tanyakan dengan kata kunci yang berbeda "
111
+ "atau hubungi staf perpustakaan secara langsung."
112
+ )
113
+
114
+ # --- 3. Antarmuka Gradio ---
115
+
116
+ # Membuat list pertanyaan contoh untuk memudahkan user
117
+ example_questions = [
118
+ "Saya mau pinjam buku, bagaimana prosedurnya?",
119
+ "Apa syarat buat kartu anggota perpustakaan?",
120
+ "Jam berapa perpustakaan ini mulai buka?",
121
+ "Saya ingin menggunakan internet, apakah tersedia wifi gratis?",
122
+ "Kalau telat mengembalikan, dendanya berapa?",
123
+ ]
124
+
125
+ # Definisi antarmuka Gradio
126
+ iface = gr.Interface(
127
+ fn=library_chatbot,
128
+ inputs=gr.Textbox(lines=2, placeholder="Ketik pertanyaan Anda tentang perpustakaan..."),
129
+ outputs=gr.Textbox(label="Jawaban Chatbot"),
130
+ title="📚 Chatbot FAQ Perpustakaan (IndoBERT-Friendly)",
131
+ description=(
132
+ f"Chatbot ini menggunakan model Semantic Search ({MODEL_NAME}) untuk menjawab pertanyaan Anda "
133
+ "berdasarkan data FAQ perpustakaan. Tanyakan hal-hal terkait peminjaman, keanggotaan, atau layanan."
134
+ ),
135
+ examples=example_questions
136
+ )
137
+
138
+ # Jalankan antarmuka Gradio
139
+ iface.launch()
perpustakaan_faq (2).csv ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ id,kategori,user_query,chatbot_response
2
+ 1,Keanggotaan,Apa syarat utama jika saya mau buat kartu anggota perpustakaan?,"Syarat utamanya adalah mengisi formulir pendaftaran, dan membawa kartu identitas yang masih berlaku (KTP/Kartu Pelajar/KTM) sebagai bukti domisili atau status Anda."
3
+ 2,Keanggotaan,Apakah pendaftaran anggota perpustakaan ini ada biayanya?,"Pendaftaran anggota untuk perpustakaan umum biasanya gratis. Namun, untuk jenis perpustakaan tertentu (akademik/khusus), mungkin ada biaya bagi non-anggota institusi."
4
+ 3,Kunjungan,Jam berapa perpustakaan ini mulai buka hari ini?,Jam operasional kami bervariasi. Mohon cek situs web resmi kami atau bagian informasi kontak untuk mengetahui jam buka dan tutup yang spesifik untuk hari ini.
5
+ 4,Peminjaman,Maksimal saya bisa pinjam berapa eksemplar buku?,"Kebijakan hak pinjam bervariasi tergantung jenis keanggotaan Anda. Anggota umum biasanya dapat meminjam 3-5 eksemplar, sementara dosen/staf bisa meminjam lebih banyak."
6
+ 5,Peminjaman,Berapa lama batas waktu peminjaman buku?,Batas waktu peminjaman standar adalah 7 hari (satu minggu) atau 14 hari (dua minggu) per eksemplar. Harap perhatikan tanggal jatuh tempo pada slip pinjam Anda.
7
+ 6,Peminjaman,Bagaimana cara saya memperpanjang masa pinjam buku online?,"Anda dapat melakukan perpanjangan mandiri melalui Katalog Online (OPAC) di situs web kami, selama buku tersebut belum dipesan oleh pemustaka lain. Perpanjangan umumnya hanya bisa dilakukan satu kali."
8
+ 7,Peminjaman,"Kalau saya telat mengembalikan, dendanya berapa ya?","Untuk keterlambatan, Anda akan dikenakan denda sebesar antara Rp 500,- hingga Rp 1.000,- per hari per eksemplar. Denda dihitung sejak tanggal jatuh tempo."
9
+ 8,Peminjaman,Apa yang harus saya lakukan kalau buku pinjaman saya hilang?,"Anda wajib segera melaporkan kehilangan tersebut ke bagian sirkulasi dan menggantinya dengan buku baru (judul, pengarang, dan edisi yang sama atau edisi terbaru) sesuai ketentuan yang berlaku."
10
+ 9,Layanan/Koleksi,Saya bisa cari koleksi digital atau e-book di mana?,Koleksi digital dan e-book kami dapat diakses melalui portal E-Resources di situs web perpustakaan. Akses mungkin memerlukan login akun anggota Anda.
11
+ 10,Layanan/Fasilitas,Apakah di perpustakaan ada Wi-Fi gratis untuk pengunjung?,"Ya, kami menyediakan layanan Wi-Fi gratis. Anda dapat terhubung menggunakan kredensial yang tersedia di area informasi atau meja layanan."
12
+ 11,Keanggotaan,Apakah pendaftaran anggota memerlukan biaya administrasi?,Pendaftaran anggota untuk perpustakaan umum biasanya gratis.
13
+ 12,Keanggotaan,Dokumen apa yang harus saya siapkan untuk mendaftar anggota?,"Syarat utamanya adalah mengisi formulir pendaftaran, dan membawa kartu identitas yang masih berlaku (KTP/Kartu Pelajar/KTM)."
14
+ 13,Keanggotaan,"Saya mahasiswa, bagaimana cara buat kartu perpustakaan?",Syarat utamanya adalah mengisi formulir pendaftaran dan membawa kartu identitas (KTM).
15
+ 14,Keanggotaan,Bagaimana cara perpanjang masa berlaku kartu anggota?,Prosedur perpanjangan kartu dapat dilihat di situs web resmi atau tanyakan di meja informasi.
16
+ 15,Kunjungan,Apakah perpustakaan buka di hari Minggu atau hari libur nasional?,Jam operasional kami bervariasi. Mohon cek situs web resmi kami.
17
+ 16,Kunjungan,Sampai jam berapa perpustakaan buka?,Jam operasional kami bervariasi. Mohon cek situs web resmi kami atau bagian informasi kontak.
18
+ 17,Kunjungan,Jam berapa perpustakaan mulai buka di pagi hari?,Jam operasional kami bervariasi. Mohon cek situs web resmi kami.
19
+ 18,Peminjaman,Berapa batas maksimal buku yang dapat saya pinjam sekaligus?,"Anggota umum biasanya dapat meminjam 3-5 eksemplar, sementara dosen/staf bisa meminjam lebih banyak."
20
+ 19,Peminjaman,"Saya ingin perpanjang pinjaman buku saya, bagaimana caranya?",Anda dapat melakukan perpanjangan mandiri melalui Katalog Online (OPAC) di situs web kami.
21
+ 20,Peminjaman,Apakah ada biaya denda untuk keterlambatan pengembalian?,"Anda akan dikenakan denda sebesar antara Rp 500,- hingga Rp 1.000,- per hari per eksemplar."
22
+ 21,Peminjaman,"Saya kehilangan buku yang dipinjam, apa yang harus saya ganti?","Anda wajib segera melaporkan kehilangan tersebut dan menggantinya dengan buku baru (judul, pengarang, dan edisi yang sama)."
23
+ 22,Peminjaman,"Buku saya sudah jatuh tempo, bagaimana cara membayar dendanya?",Pembayaran denda dapat dilakukan di bagian sirkulasi.
24
+ 23,Peminjaman,Berapa lama waktu pinjam untuk buku fiksi?,Batas waktu peminjaman standar adalah 7 hari atau 14 hari per eksemplar.
25
+ 24,Layanan/Koleksi,Di mana saya bisa akses jurnal dan database online?,Koleksi digital dan e-book kami dapat diakses melalui portal E-Resources di situs web perpustakaan.
26
+ 25,Layanan/Koleksi,Apakah perpustakaan menyediakan akses ke database berbayar?,Koleksi digital dan e-book kami dapat diakses melalui portal E-Resources di situs web perpustakaan.
27
+ 26,Layanan/Koleksi,Bagaimana cara mencari koleksi buku yang ada di rak?,Anda dapat menggunakan Katalog Online (OPAC) atau bertanya di meja informasi.
28
+ 27,Layanan/Fasilitas,"Saya ingin menggunakan internet, apakah tersedia wifi gratis?","Ya, kami menyediakan layanan Wi-Fi gratis."
29
+ 28,Layanan/Fasilitas,Apakah ada ruang belajar kelompok yang bisa saya sewa?,"Ya, kami menyediakan ruang diskusi atau ruang belajar kelompok yang ketersediaannya dapat dicek di meja layanan."
30
+ 29,Layanan/Fasilitas,Di mana lokasi ruang fotokopi atau mesin printer?,Ruang fotokopi dan printer biasanya berada di dekat area koleksi umum atau di lantai dasar.
31
+ 30,Layanan/Fasilitas,Bolehkah saya membawa laptop pribadi ke dalam perpustakaan?,"Ya, Anda diperbolehkan membawa laptop pribadi."
32
+ 31,Layanan/Fasilitas,Apakah ada loker penitipan barang di sini?,Loker penitipan barang tersedia di dekat pintu masuk utama.
33
+ 32,Kunjungan,Bolehkah saya masuk ke perpustakaan tanpa menjadi anggota?,"Kunjungan dan membaca di tempat diperbolehkan, namun Anda tidak bisa meminjam buku."
34
+ 33,Kunjungan,Apa saja yang tidak boleh dibawa masuk ke perpustakaan?,"Tas besar, makanan, dan minuman biasanya tidak diperbolehkan masuk ke area koleksi."
35
+ 34,Peminjaman,"Buku saya sudah di reservasi orang lain, apa masih bisa saya perpanjang?",Perpanjangan tidak bisa dilakukan jika buku sudah direservasi oleh pemustaka lain.
36
+ 35,Peminjaman,"Saya mau pinjam buku, bagaimana prosedurnya?","Anda dapat mencari buku melalui OPAC, bawa buku dan kartu anggota ke meja sirkulasi."
requirements1.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ pandas
2
+ sentence-transformers
3
+ gradio
4
+ numpy