adechandra1987 commited on
Commit
403d36c
·
verified ·
1 Parent(s): 7e55b2e

Upload 20 files

Browse files
README.markdown ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Aplikasi Chatbot Kesehatan Mata (IndoBERT)
2
+
3
+ ## Deskripsi
4
+ Aplikasi Chatbot Kesehatan Mata berbasis IndoBERT ini dirancang untuk memberikan informasi dan saran terkait kesehatan mata dalam bahasa Indonesia. Chatbot ini memanfaatkan model IndoBERT untuk memahami dan menjawab pertanyaan pengguna tentang gejala, perawatan, dan tips menjaga kesehatan mata. Aplikasi ini berjalan melalui antarmuka web menggunakan Flask dan tidak dimaksudkan sebagai pengganti konsultasi medis profesional.
5
+
6
+ ## Dataset
7
+ Dataset saya menggunakan dari sumber data sekunder : https://www.kaggle.com/datasets/rikyjo/healt-eye-dataset/data , dengan banyak saya modifikasi di dataset_new.json.
8
+
9
+ ## Fitur
10
+ - **Pemahaman Bahasa Alami**: Menggunakan model IndoBERT untuk memproses pertanyaan dalam bahasa Indonesia.
11
+ - **Informasi Kesehatan Mata**: Memberikan saran tentang masalah mata umum seperti mata merah atau kelelahan mata.
12
+ - **Tips Harian**: Menyediakan rekomendasi untuk menjaga kesehatan mata.
13
+ - **Antarmuka Web**: Dapat diakses melalui browser menggunakan Flask.
14
+
15
+ ## Prasyarat
16
+ - Python 3.8 atau lebih tinggi
17
+ - Virtual environment (opsional, tetapi direkomendasikan)
18
+ - Library Python (lihat `requirements.txt`):
19
+ - `flask` untuk antarmuka web
20
+ - `transformers` untuk model IndoBERT
21
+ - Dependensi lainnya seperti `torch` atau `nltk`
22
+
23
+ ## Instalasi
24
+ 1. Clone repository ini :
25
+ ```bash
26
+ git clone https://github.com/andrasaputra87/eyebotIndoBERT.git
27
+ ```
28
+ 2. Masuk ke direktori proyek:
29
+ ```bash
30
+ cd EYE_CHATBOT(INDOBERT)
31
+ ```
32
+ 3. Aktifkan virtual environment (jika belum ada, buat dengan `python -m venv venv`):
33
+ - Untuk Windows:
34
+ ```bash
35
+ venv\Scripts\activate
36
+ ```
37
+ - Untuk Linux/MacOS:
38
+ ```bash
39
+ source venv/bin/activate
40
+ ```
41
+ 4. Instal dependensi:
42
+ ```bash
43
+ pip install -r requirements.txt
44
+ ```
45
+ 5. Jalankan aplikasi:
46
+ ```bash
47
+ python app.py
48
+ ```
49
+
50
+ ## Penggunaan
51
+ - Setelah menjalankan `app.py`, buka browser dan akses `http://127.0.0.1:5000` (atau port lain yang ditentukan di terminal).
52
+ - Gunakan antarmuka web untuk berinteraksi dengan chatbot. Masukkan pertanyaan seperti "Mata saya gatal, apa yang harus saya lakukan?" dan chatbot akan merespons.
53
+
54
+ ### Melatih Ulang Model (Opsional)
55
+ Jika Anda perlu melatih ulang model IndoBERT:
56
+ 1. Pastikan file `datasets.json` berisi data pelatihan yang sesuai.
57
+ 2. Jalankan skrip pelatihan:
58
+ ```bash
59
+ python train_indobert.py
60
+ ```
61
+ 3. Model yang telah dilatih akan disimpan di folder `indobert_model`.
62
+
63
+ ## Struktur Direktori
64
+ ```
65
+ EYE_CHATBOT(INDOBERT)/
66
+ ├── indobert_model/ # Folder untuk model IndoBERT
67
+ │ ├── config.json # Konfigurasi model
68
+ │ ├── model.safetensors # Bobot model
69
+ │ ├── tokenizer_config.json # Konfigurasi tokenizer
70
+ │ ├── tokenizer.json # Tokenizer IndoBERT
71
+ │ └── vocab.txt # Daftar kosa kata
72
+ ├── static/ # File statis untuk antarmuka web
73
+ │ ├── css/
74
+ │ │ └── style.css # Styling untuk web
75
+ │ ├── images/ # Gambar untuk web
76
+ │ └── js/
77
+ │ └── app.js # JavaScript untuk web
78
+ ├── templates/ # Template HTML
79
+ │ └── base.html # Template dasar HTML
80
+ ├── venv/ # Virtual environment
81
+ ├── app.py # Skrip utama Flask
82
+ ├── chat_indobert.py # Logika chatbot IndoBERT
83
+ ├── datasets.json # Dataset untuk pelatihan
84
+ ├── pyvenv.cfg # Konfigurasi virtual environment
85
+ ├── requirements.txt # Daftar dependensi
86
+ ├── train_indobert.py # Skrip untuk melatih model
87
+ └── README.md # File ini
88
+ ```
89
+
90
+ ## Kontribusi
91
+ Kami menyambut kontribusi! Silakan ikuti langkah berikut:
92
+ 1. Fork repository ini.
93
+ 2. Buat branch baru (`git checkout -b fitur-baru`).
94
+ 3. Commit perubahan Anda (`git commit -m 'Menambahkan fitur baru'`).
95
+ 4. Push ke branch (`git push origin fitur-baru`).
96
+ 5. Buat Pull Request.
97
+
98
+ ## Lisensi
99
+ Proyek ini dilisensikan di bawah [MIT License](LICENSE).
100
+
101
+ ## Kontak
102
+ Jika Anda memiliki pertanyaan atau saran, silakan hubungi kami melalui:
103
+ - Email: adechandrasaputra1987@mail.ugm.ac.id
104
+ - GitHub Issues: [Buat issue baru](https://github.com/andrasaputra87/eyebotIndoBERT/issues)
105
+
106
+ ## Disclaimer
107
+ Aplikasi ini hanya untuk tujuan informasi dan tidak menggantikan saran medis profesional. Aplikasi sederahana berdasarkan experimen kecil untuk memenuhi tugas pelengkap UTS matakuliah NLP advanced Prof. Sri Hartati
108
+
109
+ ## Contoh Pertanyaan :
110
+ Pertanyaan: "Apa gejala mata silinder?"
111
+ Jawaban: "Gejala mata silinder biasanya meliputi penglihatan kabur, sulit melihat garis lurus, sakit kepala, dan mata lelah."
112
+ Pertanyaan: "Bagaimana cara mengobati rabun jauh?"
113
+ Jawaban: "Rabun jauh dapat diobati dengan kacamata, lensa kontak, atau operasi seperti LASIK."
114
+ Pertanyaan: "Apa yang harus dilakukan jika mata kemasukan debu?"
115
+ Jawaban: "Jika benda asing masuk mata, jangan menggosok mata. Bilas dengan air bersih atau larutan garam steril."
__pycache__/chat_indobert.cpython-311.pyc ADDED
Binary file (7.1 kB). View file
 
app.py ADDED
@@ -0,0 +1,149 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from flask import Flask, render_template, request, jsonify
2
+ from chat_indobert import get_response
3
+ import json
4
+ import torch
5
+ import numpy as np
6
+ from transformers import AutoTokenizer, AutoModelForSequenceClassification
7
+ from torch.utils.data import Dataset, DataLoader
8
+ from sklearn.metrics import precision_recall_fscore_support, classification_report
9
+
10
+ # Membuat instance dari Flask
11
+ app = Flask(__name__)
12
+
13
+ # Load dataset untuk mendapatkan daftar tags (intents)
14
+ with open('datasets_new.json', 'r') as f:
15
+ datasets = json.load(f)
16
+
17
+ tags = sorted(set(dataset['tag'] for dataset in datasets['intents']))
18
+
19
+ # Load dataset uji mandiri dari datasets_uji_mandiri.json
20
+ with open('datasets_uji_mandiri.json', 'r') as f:
21
+ test_data = json.load(f)
22
+
23
+ # Ekstrak teks dan intent yang benar dari datasets_uji_mandiri.json
24
+ texts_test = [item['text'] for item in test_data]
25
+ true_intents = [item['true_intent'] for item in test_data]
26
+
27
+ # Konversi intent ke indeks label berdasarkan tags
28
+ labels_test = [tags.index(intent) for intent in true_intents if intent in tags]
29
+
30
+ # Periksa apakah ada intent yang tidak ada dalam tags
31
+ missing_intents = set(true_intents) - set(tags)
32
+ if missing_intents:
33
+ print(f"Peringatan: Intent {missing_intents} tidak ditemukan dalam tags. Pastikan datasets_new.json mencakup semua intent.")
34
+
35
+ # Load IndoBERT model dan tokenizer
36
+ tokenizer = AutoTokenizer.from_pretrained("indobert_model")
37
+ model = AutoModelForSequenceClassification.from_pretrained("indobert_model")
38
+
39
+ # Gunakan GPU kalau ada
40
+ device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
41
+ model.to(device)
42
+ model.eval()
43
+
44
+ # Dataset class untuk evaluasi
45
+ class IndoBERTDataset(Dataset):
46
+ def __init__(self, texts, labels):
47
+ self.texts = texts
48
+ self.labels = labels
49
+
50
+ def __getitem__(self, idx):
51
+ encoding = tokenizer(self.texts[idx], padding='max_length', truncation=True, max_length=20, return_tensors='pt')
52
+ return {
53
+ 'input_ids': encoding['input_ids'].squeeze(),
54
+ 'attention_mask': encoding['attention_mask'].squeeze(),
55
+ 'labels': torch.tensor(self.labels[idx], dtype=torch.long)
56
+ }
57
+
58
+ def __len__(self):
59
+ return len(self.texts)
60
+
61
+ # Buat dataset dan dataloader untuk data uji mandiri
62
+ test_dataset = IndoBERTDataset(texts_test, labels_test)
63
+ test_loader = DataLoader(test_dataset, batch_size=8)
64
+
65
+ # Evaluasi model pada data uji mandiri
66
+ test_correct = 0
67
+ test_total = 0
68
+ test_preds = []
69
+ test_labels = []
70
+ with torch.no_grad():
71
+ for batch in test_loader:
72
+ inputs = {k: v.to(device) for k, v in batch.items() if k != 'labels'}
73
+ labels = batch['labels'].to(device)
74
+ outputs = model(**inputs, labels=labels)
75
+ _, predicted = torch.max(outputs.logits, 1)
76
+ test_total += labels.size(0)
77
+ test_correct += (predicted == labels).sum().item()
78
+ test_preds.extend(predicted.cpu().numpy())
79
+ test_labels.extend(labels.cpu().numpy())
80
+
81
+ # Hitung metrik evaluasi
82
+ test_accuracy = 100 * test_correct / test_total
83
+ test_precision, test_recall, test_f1, _ = precision_recall_fscore_support(test_labels, test_preds, average='weighted', zero_division=0)
84
+
85
+ # Laporan klasifikasi untuk data uji
86
+ unique_test_labels = sorted(set(test_labels))
87
+ filtered_test_tags = [tags[i] for i in unique_test_labels]
88
+ classification_report_str = classification_report(test_labels, test_preds, labels=unique_test_labels, target_names=filtered_test_tags, zero_division=0)
89
+
90
+ # Simpan hasil evaluasi dalam dictionary
91
+ evaluation_results = {
92
+ 'accuracy': test_accuracy,
93
+ 'precision': test_precision,
94
+ 'recall': test_recall,
95
+ 'f1_score': test_f1,
96
+ 'classification_report': classification_report_str
97
+ }
98
+
99
+ # Mendefinisikan rute untuk halaman utama dengan metode GET
100
+ @app.get("/")
101
+ def index_get():
102
+ return render_template("base.html")
103
+
104
+ # Mendefinisikan rute untuk memproses permintaan prediksi dengan metode POST
105
+ @app.post("/predict")
106
+ def predict():
107
+ text = request.get_json().get("message")
108
+ if not text:
109
+ return jsonify({"answer": "Mohon masukkan pesan."})
110
+
111
+ # Tokenisasi input pengguna
112
+ encoding = tokenizer(text, padding='max_length', truncation=True, max_length=20, return_tensors='pt')
113
+ input_ids = encoding['input_ids'].to(device)
114
+ attention_mask = encoding['attention_mask'].to(device)
115
+
116
+ # Dapatkan output dari model
117
+ with torch.no_grad():
118
+ outputs = model(input_ids, attention_mask=attention_mask)
119
+ logits = outputs.logits
120
+ probabilities = torch.softmax(logits, dim=1).cpu().numpy()[0]
121
+
122
+ # Temukan tag yang diprediksi
123
+ predicted_index = np.argmax(probabilities)
124
+ predicted_tag = tags[predicted_index]
125
+
126
+ # Ambil respons dari dataset berdasarkan tag yang diprediksi
127
+ for intent in datasets['intents']:
128
+ if intent['tag'] == predicted_tag:
129
+ response = intent['responses'][0] # Ambil respons pertama
130
+ break
131
+ else:
132
+ response = "Maaf, saya tidak mengerti pertanyaan Anda."
133
+
134
+ # Siapkan data respons dengan probabilitas untuk semua tag
135
+ message = {
136
+ "answer": response,
137
+ "predicted_tag": predicted_tag,
138
+ "probabilities": {tag: float(prob) for tag, prob in zip(tags, probabilities)}
139
+ }
140
+ return jsonify(message)
141
+
142
+ # Mendefinisikan rute untuk menampilkan hasil akurasi
143
+ @app.get("/accuracy")
144
+ def show_accuracy():
145
+ return render_template("accuracy.html", evaluation=evaluation_results)
146
+
147
+ # Menjalankan aplikasi Flask dalam mode debug
148
+ if __name__ == "__main__":
149
+ app.run(debug=True)
chat_indobert.py ADDED
@@ -0,0 +1,114 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ import torch
3
+ import random
4
+ from transformers import AutoTokenizer, AutoModelForSequenceClassification
5
+ from sklearn.metrics import accuracy_score, precision_recall_fscore_support, confusion_matrix
6
+ import numpy as np
7
+
8
+ # Load dataset pelatihan untuk mendapatkan tags dan respons
9
+ with open('datasets_new.json', 'r') as f:
10
+ datasets = json.load(f)
11
+
12
+ # Dapatkan daftar tag
13
+ tags = sorted(set(dataset['tag'] for dataset in datasets['intents']))
14
+
15
+ # Load IndoBERT model dan tokenizer
16
+ tokenizer = AutoTokenizer.from_pretrained("indobert_model")
17
+ model = AutoModelForSequenceClassification.from_pretrained("indobert_model")
18
+
19
+ # Gunakan GPU kalau ada
20
+ device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
21
+ model.to(device)
22
+ model.eval()
23
+
24
+ # Fungsi get_response (disalin dari chat_indobert.py untuk menghindari import)
25
+ def get_response(msg):
26
+ # Tokenisasi input
27
+ encoding = tokenizer(msg, padding='max_length', truncation=True, max_length=20, return_tensors='pt')
28
+ input_ids = encoding['input_ids'].to(device)
29
+ attention_mask = encoding['attention_mask'].to(device)
30
+
31
+ # Prediksi
32
+ with torch.no_grad():
33
+ outputs = model(input_ids, attention_mask=attention_mask)
34
+ probs = torch.softmax(outputs.logits, dim=1)
35
+ prob_list = probs[0].tolist()
36
+ print("Probabilities for each tag:")
37
+ for tag, prob in zip(tags, prob_list):
38
+ print(f"Tag: {tag}, Prob: {prob:.4f}")
39
+ max_prob, predicted = torch.max(probs, dim=1)
40
+ tag = tags[predicted.item()]
41
+
42
+ prob = max_prob.item()
43
+ print(f"Max Prob: {prob}, Predicted Tag: {tag}")
44
+
45
+ if prob > 0.2: # Ambang batas 0.2
46
+ for dataset in datasets['intents']:
47
+ if tag == dataset["tag"]:
48
+ return random.choice(dataset['responses']), tag
49
+
50
+ return "Hi, maaf saya tidak tahu soal itu...", 'notfound'
51
+
52
+ # Muat dataset uji
53
+ try:
54
+ with open('datasets_uji_mandiri.json', 'r') as f:
55
+ test_data = json.load(f)
56
+ except FileNotFoundError:
57
+ print("Error: File 'datasets_uji_mandiri.json' tidak ditemukan. Pastikan file ada di direktori saat ini.")
58
+ exit(1)
59
+
60
+ # Inisialisasi list untuk menyimpan hasil
61
+ true_intents = []
62
+ predicted_intents = []
63
+ errors = []
64
+
65
+ # Proses setiap pertanyaan
66
+ for item in test_data:
67
+ question = item['text']
68
+ true_intent = item['true_intent']
69
+
70
+ # Dapatkan respons dan intent yang diprediksi
71
+ response, predicted_intent = get_response(question)
72
+
73
+ # Simpan hasil
74
+ true_intents.append(true_intent)
75
+ predicted_intents.append(predicted_intent)
76
+
77
+ # Catat kesalahan
78
+ if predicted_intent != true_intent:
79
+ errors.append({
80
+ "question": question,
81
+ "true_intent": true_intent,
82
+ "predicted_intent": predicted_intent,
83
+ "response": response
84
+ })
85
+
86
+ # Hitung metrik
87
+ accuracy = accuracy_score(true_intents, predicted_intents) * 100
88
+ precision, recall, f1, _ = precision_recall_fscore_support(true_intents, predicted_intents, average='weighted', zero_division=0)
89
+
90
+ # Confusion matrix
91
+ conf_matrix = confusion_matrix(true_intents, predicted_intents, labels=tags)
92
+
93
+ # Analisis false intent
94
+ false_intent_errors = [e for e in errors if e['true_intent'] == 'notfound']
95
+ false_intent_error_rate = len(false_intent_errors) / sum(1 for item in test_data if item['true_intent'] == 'notfound') * 100 if sum(1 for item in test_data if item['true_intent'] == 'notfound') > 0 else 0
96
+
97
+ # Cetak hasil
98
+ print(f"Akurasi: {accuracy:.2f}%")
99
+ print(f"Presisi: {precision:.4f}")
100
+ print(f"Recall: {recall:.4f}")
101
+ print(f"F1-Score: {f1:.4f}")
102
+ print(f"Kesalahan Total: {len(errors)} kasus")
103
+ print(f"Kesalahan pada False Intent: {len(false_intent_errors)} kasus ({false_intent_error_rate:.2f}% dari false intent)")
104
+
105
+ # Cetak kesalahan
106
+ print("\nDetail Kesalahan:")
107
+ for error in errors:
108
+ print(f"Pertanyaan: {error['question']}")
109
+ print(f"Benar: {error['true_intent']}, Prediksi: {error['predicted_intent']}")
110
+ print(f"Respons: {error['response']}\n")
111
+
112
+ # Cetak confusion matrix
113
+ print("Confusion Matrix:")
114
+ print(conf_matrix)
datasets_new.json ADDED
@@ -0,0 +1,1220 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "intents": [
3
+ {
4
+ "tag": "gejala_mata_silinder",
5
+ "patterns": [
6
+ "Apa gejala mata silinder?",
7
+ "Bagaimana saya tahu kalau mata saya silinder?",
8
+ "Apa tanda-tanda mata silinder?",
9
+ "Mata silinder terasa seperti apa?",
10
+ "Apakah sakit kepala tanda mata silinder?",
11
+ "Apa ciri-ciri mata silinder?",
12
+ "Bagaimana gejala mata silinder muncul?",
13
+ "Apa yang dirasakan penderita mata silinder?",
14
+ "Apakah mata silinder bikin penglihatan kabur?",
15
+ "Mata silinder bikin mata lelah nggak?",
16
+ "Apa tanda awal mata silinder?",
17
+ "Bagaimana tahu mata silinder atau bukan?",
18
+ "Apakah mata silinder bikin susah lihat malam?",
19
+ "Gejala mata silinder yang umum apa?",
20
+ "Apakah mata silinder bikin warna pudar?",
21
+ "Bagaimana gejala mata silinder berkembang?",
22
+ "Apakah mata silinder bikin mata sakit?",
23
+ "Mata silinder bikin penglihatan buram?",
24
+ "Apakah mata silinder menyebabkan halo di lampu?",
25
+ "Bagaimana deteksi mata silinder dini?",
26
+ "Apakah mata silinder bikin mata merah?",
27
+ "Mata silinder bikin apa di mata?",
28
+ "Apakah mata silinder bikin silau?",
29
+ "Bagaimana gejala mata silinder di awal?",
30
+ "Apakah mata silinder bikin penglihatan hilang perlahan?"
31
+ ],
32
+ "responses": [
33
+ "Gejala mata silinder biasanya meliputi penglihatan kabur, sulit melihat garis lurus, sakit kepala, dan mata lelah."
34
+ ],
35
+ "context": [
36
+ "Pengguna ingin mengetahui gejala mata silinder."
37
+ ]
38
+ },
39
+ {
40
+ "tag": "penyebab_glaukoma",
41
+ "patterns": [
42
+ "Apa penyebab glaukoma?",
43
+ "Bagaimana glaukoma terjadi?",
44
+ "Apa yang bikin glaukoma?",
45
+ "Penyebab glaukoma apa saja?",
46
+ "Apakah glaukoma disebabkan oleh tekanan mata?",
47
+ "Bagaimana tekanan mata bikin glaukoma?",
48
+ "Apa yang menyebabkan tekanan mata tinggi?",
49
+ "Apakah glaukoma disebabkan oleh genetik?",
50
+ "Bagaimana glaukoma muncul?",
51
+ "Apa penyebab glaukoma pada lansia?",
52
+ "Apakah glaukoma disebabkan oleh diabetes?",
53
+ "Bagaimana glaukoma berkembang?",
54
+ "Apa yang bikin tekanan mata naik?",
55
+ "Apakah glaukoma disebabkan oleh cedera mata?",
56
+ "Bagaimana glaukoma terjadi pada mata?",
57
+ "Apa penyebab glaukoma sudut terbuka?",
58
+ "Apakah glaukoma disebabkan oleh obat-obatan?",
59
+ "Bagaimana glaukoma muncul pada mata?",
60
+ "Apa yang bikin glaukoma akut?",
61
+ "Apakah glaukoma disebabkan oleh usia?",
62
+ "Bagaimana glaukoma terjadi pada anak-anak?",
63
+ "Apa penyebab glaukoma kongenital?",
64
+ "Apakah glaukoma disebabkan oleh penyakit lain?",
65
+ "Bagaimana glaukoma muncul pada mata yang sehat?",
66
+ "Apa yang bikin glaukoma kronis?"
67
+ ],
68
+ "responses": [
69
+ "Glaukoma disebabkan oleh peningkatan tekanan di dalam mata yang merusak saraf optik, sering kali karena drainase cairan mata yang buruk."
70
+ ],
71
+ "context": [
72
+ "Pengguna ingin mengetahui penyebab glaukoma."
73
+ ]
74
+ },
75
+ {
76
+ "tag": "pengobatan_rabun_jauh",
77
+ "patterns": [
78
+ "Apakah rabun jauh bisa disembuhkan?",
79
+ "Bagaimana cara mengobati rabun jauh?",
80
+ "Apa pengobatan untuk rabun jauh?",
81
+ "Apakah operasi bisa sembuhkan rabun jauh?",
82
+ "Bagaimana atasi rabun jauh?",
83
+ "Apa solusi rabun jauh?",
84
+ "Bagaimana rabun jauh bisa hilang?",
85
+ "Apakah ada obat untuk rabun jauh?",
86
+ "Bagaimana dokter obati rabun jauh?",
87
+ "Apakah LASIK sembuhkan rabun jauh?",
88
+ "Bagaimana cara kurangi rabun jauh?",
89
+ "Apakah rabun jauh bisa sembuh alami?",
90
+ "Apa terapi untuk rabun jauh?",
91
+ "Bagaimana rabun jauh diobati?",
92
+ "Apakah kacamata sembuhkan rabun jauh?",
93
+ "Bagaimana penglihatan jauh jadi tajam?",
94
+ "Apakah rabun jauh bisa pulih?",
95
+ "Bagaimana cara cepat atasi rabun jauh?",
96
+ "Apa yang bikin rabun jauh sembuh?",
97
+ "Apakah lensa kontak obati rabun jauh?",
98
+ "Bagaimana rabun jauh nggak tambah parah?",
99
+ "Apakah rabun jauh bisa dikurangi?",
100
+ "Bagaimana obati rabun jauh tanpa operasi?",
101
+ "Apa pilihan pengobatan rabun jauh?",
102
+ "Bagaimana tahu rabun jauh bisa sembuh?"
103
+ ],
104
+ "responses": [
105
+ "Rabun jauh dapat diobati dengan kacamata, lensa kontak, atau operasi seperti LASIK."
106
+ ],
107
+ "context": [
108
+ "Pengguna ingin tahu cara mengobati rabun jauh."
109
+ ]
110
+ },
111
+ {
112
+ "tag": "dampak_pencahayaan",
113
+ "patterns": [
114
+ "Apakah pencahayaan memengaruhi mata?",
115
+ "Bagaimana pencahayaan bikin mata rusak?",
116
+ "Apa dampak pencahayaan buruk pada mata?",
117
+ "Apakah cahaya redup bikin mata buram?",
118
+ "Bagaimana pencahayaan memengaruhi penglihatan?",
119
+ "Apa yang bikin mata lelah karena cahaya?",
120
+ "Apakah pencahayaan terang bikin mata sakit?",
121
+ "Bagaimana cahaya bikin mata kering?",
122
+ "Apa dampak pencahayaan pada mata anak?",
123
+ "Apakah pencahayaan memengaruhi rabun?",
124
+ "Bagaimana pencahayaan bikin mata minus?",
125
+ "Apa yang bikin mata silinder karena cahaya?",
126
+ "Apakah pencahayaan memengaruhi katarak?",
127
+ "Bagaimana cahaya bikin mata lelah?",
128
+ "Apa dampak pencahayaan pada mata lansia?",
129
+ "Apakah pencahayaan memengaruhi glaukoma?",
130
+ "Bagaimana cahaya bikin mata buram?",
131
+ "Apa yang bikin mata sensitif cahaya?",
132
+ "Apakah pencahayaan memengaruhi penglihatan malam?",
133
+ "Bagaimana cahaya bikin mata merah?",
134
+ "Apa dampak pencahayaan pada mata kering?",
135
+ "Apakah pencahayaan memengaruhi mata silinder?",
136
+ "Bagaimana cahaya bikin mata lelah saat baca?",
137
+ "Apa yang bikin mata buram karena cahaya?",
138
+ "Apakah pencahayaan memengaruhi mata minus?"
139
+ ],
140
+ "responses": [
141
+ "Pencahayaan yang buruk dapat menyebabkan mata lelah, sakit kepala, dan memperburuk kondisi mata seperti rabun."
142
+ ],
143
+ "context": [
144
+ "Pengguna ingin mengetahui dampak pencahayaan pada mata."
145
+ ]
146
+ },
147
+ {
148
+ "tag": "jenis_operasi_mata",
149
+ "patterns": [
150
+ "Apa saja jenis operasi mata?",
151
+ "Bagaimana operasi katarak dilakukan?",
152
+ "Apa operasi untuk glaukoma?",
153
+ "Bagaimana operasi LASIK bekerja?",
154
+ "Apa operasi untuk mata silinder?",
155
+ "Bagaimana operasi mata untuk rabun jauh?",
156
+ "Apa operasi untuk mata minus?",
157
+ "Bagaimana operasi mata untuk mata plus?",
158
+ "Apa operasi untuk mata kering?",
159
+ "Bagaimana operasi mata untuk mata merah?",
160
+ "Apa operasi untuk mata silinder lagi?",
161
+ "Bagaimana operasi mata untuk mata lelah?",
162
+ "Apa operasi untuk mata buram?",
163
+ "Bagaimana operasi mata untuk mata sensitif?",
164
+ "Apa operasi untuk mata rabun dekat?",
165
+ "Bagaimana operasi mata untuk rabun jauh lagi?",
166
+ "Apa operasi lain untuk mata silinder?",
167
+ "Bagaimana operasi mata untuk mata minus lagi?",
168
+ "Apa operasi untuk mata plus lagi?",
169
+ "Bagaimana operasi mata untuk mata kering lagi?",
170
+ "Apa operasi untuk mata merah lagi?",
171
+ "Bagaimana operasi mata untuk mata lelah lagi?",
172
+ "Apa operasi untuk mata buram lagi?",
173
+ "Bagaimana operasi mata untuk mata sensitif lagi?",
174
+ "Apa operasi untuk mata rabun dekat lagi?"
175
+ ],
176
+ "responses": [
177
+ "Jenis operasi mata meliputi operasi katarak, LASIK untuk rabun jauh, dan trabeculectomy untuk glaukoma."
178
+ ],
179
+ "context": [
180
+ "Pengguna ingin mengetahui jenis operasi mata."
181
+ ]
182
+ },
183
+ {
184
+ "tag": "pertolongan_benda_asing",
185
+ "patterns": [
186
+ "Apa yang dilakukan jika benda asing masuk mata?",
187
+ "Bagaimana cara mengeluarkan benda asing dari mata?",
188
+ "Apa pertolongan pertama untuk benda asing di mata?",
189
+ "Bagaimana atasi benda asing di mata?",
190
+ "Apa yang harus dilakukan jika mata kemasukan debu?",
191
+ "Bagaimana cara aman keluarkan benda asing dari mata?",
192
+ "Apa yang bikin benda asing keluar dari mata?",
193
+ "Bagaimana cara cepat atasi benda asing di mata?",
194
+ "Apa yang harus dihindari jika benda asing di mata?",
195
+ "Bagaimana tahu benda asing di mata berbahaya?",
196
+ "Apa tanda benda asing di mata?",
197
+ "Bagaimana cara keluarkan benda asing dari mata anak?",
198
+ "Apa yang dilakukan jika benda asing di mata sakit?",
199
+ "Bagaimana atasi benda asing di mata yang dalam?",
200
+ "Apa yang bikin benda asing di mata keluar sendiri?",
201
+ "Bagaimana cara aman keluarkan benda asing lagi?",
202
+ "Apa yang harus dilakukan jika benda asing berdarah?",
203
+ "Bagaimana atasi benda asing yang tajam di mata?",
204
+ "Apa yang bikin benda asing nggak keluar?",
205
+ "Bagaimana cara keluarkan benda asing tanpa dokter?",
206
+ "Apa yang dilakukan jika benda asing bikin infeksi?",
207
+ "Bagaimana atasi benda asing kecil di mata?",
208
+ "Apa yang bikin benda asing berbahaya?",
209
+ "Bagaimana cara keluarkan benda asing dengan aman?",
210
+ "Apa yang dilakukan jika benda asing bikin sakit?"
211
+ ],
212
+ "responses": [
213
+ "Jika benda asing masuk mata, jangan menggosok mata. Bilas dengan air bersih atau larutan garam steril."
214
+ ],
215
+ "context": [
216
+ "Pengguna ingin mengetahui cara pertolongan pertama untuk benda asing di mata."
217
+ ]
218
+ },
219
+ {
220
+ "tag": "pemilihan_kacamata_anak",
221
+ "patterns": [
222
+ "Bagaimana memilih kacamata untuk anak?",
223
+ "Apa yang diperhatikan saat pilih kacamata anak?",
224
+ "Bagaimana cara pilih kacamata tepat untuk anak?",
225
+ "Apa tips pilih kacamata anak?",
226
+ "Bagaimana ukur kacamata anak?",
227
+ "Apa yang bikin kacamata anak nyaman?",
228
+ "Bagaimana pilih lensa kacamata anak?",
229
+ "Apa yang diperhatikan saat beli kacamata anak?",
230
+ "Bagaimana tahu kacamata anak pas?",
231
+ "Apa yang bikin kacamata anak bagus?",
232
+ "Bagaimana pilih kacamata anak yang aman?",
233
+ "Apa yang diperhatikan saat pilih kacamata?",
234
+ "Bagaimana cara pilih kacamata anak kuat?",
235
+ "Apa tips pilih kacamata anak awet?",
236
+ "Bagaimana pilih kacamata anak ringan?",
237
+ "Apa yang bikin kacamata anak tahan lama?",
238
+ "Bagaimana pilih kacamata anak stylish?",
239
+ "Apa yang diperhatikan saat pilih kacamata lagi?",
240
+ "Bagaimana cara pilih kacamata anak murah?",
241
+ "Apa tips pilih kacamata anak bagus?",
242
+ "Bagaimana pilih kacamata anak sesuai?",
243
+ "Apa yang bikin kacamata anak cocok?",
244
+ "Bagaimana pilih kacamata anak nyaman?",
245
+ "Apa yang diperhatikan saat pilih kacamata anak lagi?",
246
+ "Bagaimana cara pilih kacamata anak tepat?"
247
+ ],
248
+ "responses": [
249
+ "Pilih kacamata anak yang ringan, tahan benturan, dan memiliki ukuran yang pas untuk wajah anak."
250
+ ],
251
+ "context": [
252
+ "Pengguna ingin mengetahui cara memilih kacamata untuk anak."
253
+ ]
254
+ },
255
+ {
256
+ "tag": "nutrisi_mata",
257
+ "patterns": [
258
+ "Apa nutrisi yang baik untuk mata?",
259
+ "Bagaimana nutrisi memengaruhi mata?",
260
+ "Apa yang bikin mata sehat dengan nutrisi?",
261
+ "Nutrisi apa yang cegah katarak?",
262
+ "Bagaimana nutrisi bantu mata?",
263
+ "Apa yang dimakan biar mata sehat?",
264
+ "Nutrisi apa yang bikin penglihatan tajam?",
265
+ "Bagaimana nutrisi cegah glaukoma?",
266
+ "Apa yang bikin mata nggak kering dengan nutrisi?",
267
+ "Nutrisi apa yang bantu mata anak?",
268
+ "Bagaimana nutrisi memengaruhi mata lansia?",
269
+ "Apa yang dimakan biar mata nggak buram?",
270
+ "Nutrisi apa yang bikin mata cerah?",
271
+ "Bagaimana nutrisi bantu mata lelah?",
272
+ "Apa yang bikin mata nggak merah dengan nutrisi?",
273
+ "Nutrisi apa yang bantu mata silinder?",
274
+ "Bagaimana nutrisi memengaruhi mata minus?",
275
+ "Apa yang dimakan biar mata nggak silinder?",
276
+ "Nutrisi apa yang bikin mata nggak lelah?",
277
+ "Bagaimana nutrisi bantu mata buram?",
278
+ "Apa yang bikin mata nggak sensitif cahaya?",
279
+ "Nutrisi apa yang bantu mata rabun dekat?",
280
+ "Bagaimana nutrisi memengaruhi mata rabun jauh?",
281
+ "Apa yang dimakan biar mata nggak rabun?",
282
+ "Nutrisi apa yang bikin mata nggak kering?"
283
+ ],
284
+ "responses": [
285
+ "Nutrisi seperti vitamin A, C, E, dan omega-3 sangat baik untuk kesehatan mata."
286
+ ],
287
+ "context": [
288
+ "Pengguna ingin mengetahui nutrisi yang baik untuk mata."
289
+ ]
290
+ },
291
+ {
292
+ "tag": "keamanan_tetes_mata",
293
+ "patterns": [
294
+ "Apakah tetes mata aman?",
295
+ "Bagaimana cara pakai tetes mata yang aman?",
296
+ "Apa yang bikin tetes mata berbahaya?",
297
+ "Apakah tetes mata bikin mata iritasi?",
298
+ "Bagaimana tahu tetes mata aman?",
299
+ "Apa yang diperhatikan saat pakai tetes mata?",
300
+ "Apakah tetes mata bikin mata merah?",
301
+ "Bagaimana cara aman pakai tetes mata?",
302
+ "Apa yang bikin tetes mata nggak aman?",
303
+ "Apakah tetes mata bikin mata kering?",
304
+ "Bagaimana pakai tetes mata yang benar?",
305
+ "Apa yang diperhatikan saat beli tetes mata?",
306
+ "Apakah tetes mata bikin mata buram?",
307
+ "Bagaimana cara simpan tetes mata aman?",
308
+ "Apa yang bikin tetes mata kadaluarsa?",
309
+ "Apakah tetes mata bikin mata sensitif?",
310
+ "Bagaimana tahu tetes mata cocok?",
311
+ "Apa yang diperhatikan saat pakai tetes mata anak?",
312
+ "Apakah tetes mata bikin mata lelah?",
313
+ "Bagaimana cara pakai tetes mata tepat?",
314
+ "Apa yang bikin tetes mata bikin infeksi?",
315
+ "Apakah tetes mata bikin mata sakit?",
316
+ "Bagaimana tahu tetes mata aman untuk mata?",
317
+ "Apa yang diperhatikan saat pakai tetes mata lagi?",
318
+ "Bagaimana cara aman pakai tetes mata harian?"
319
+ ],
320
+ "responses": [
321
+ "Tetes mata aman jika digunakan sesuai petunjuk dan tidak kadaluarsa. Pastikan tangan bersih saat memakainya."
322
+ ],
323
+ "context": [
324
+ "Pengguna ingin mengetahui keamanan tetes mata."
325
+ ]
326
+ },
327
+ {
328
+ "tag": "dampak_gadget",
329
+ "patterns": [
330
+ "Apakah gadget bikin mata rusak?",
331
+ "Bagaimana gadget memengaruhi mata?",
332
+ "Apa dampak gadget pada mata?",
333
+ "Apakah gadget bikin mata minus?",
334
+ "Bagaimana gadget bikin mata lelah?",
335
+ "Apa yang bikin mata buram karena gadget?",
336
+ "Apakah gadget bikin mata kering?",
337
+ "Bagaimana gadget memengaruhi penglihatan?",
338
+ "Apa dampak gadget pada mata anak?",
339
+ "Apakah gadget bikin mata silinder?",
340
+ "Bagaimana gadget bikin mata sensitif?",
341
+ "Apa yang bikin mata merah karena gadget?",
342
+ "Apakah gadget bikin mata buram?",
343
+ "Bagaimana gadget memengaruhi mata lansia?",
344
+ "Apa dampak gadget pada mata sehat?",
345
+ "Apakah gadget bikin mata lelah?",
346
+ "Bagaimana gadget bikin mata nggak fokus?",
347
+ "Apa yang bikin mata nggak nyaman karena gadget?",
348
+ "Apakah gadget bikin mata sakit?",
349
+ "Bagaimana gadget memengaruhi mata minus?",
350
+ "Apa dampak gadget pada mata silinder?",
351
+ "Apakah gadget bikin mata nggak jelas?",
352
+ "Bagaimana gadget bikin mata nggak tajam?",
353
+ "Apa yang bikin mata nggak sehat karena gadget?",
354
+ "Apakah gadget bikin mata nggak normal?"
355
+ ],
356
+ "responses": [
357
+ "Penggunaan gadget berlebihan dapat menyebabkan mata lelah, kering, dan penglihatan kabur."
358
+ ],
359
+ "context": [
360
+ "Pengguna ingin mengetahui dampak gadget pada mata."
361
+ ]
362
+ },
363
+ {
364
+ "tag": "perbedaan_rabun",
365
+ "patterns": [
366
+ "Apa bedanya rabun jauh dan rabun dekat?",
367
+ "Bagaimana rabun jauh berbeda dengan rabun dekat?",
368
+ "Apa perbedaan rabun jauh dan mata minus?",
369
+ "Rabun dekat itu apa dibanding rabun jauh?",
370
+ "Apakah rabun jauh sama dengan mata minus?",
371
+ "Bagaimana tahu rabun jauh atau rabun dekat?",
372
+ "Apa yang membedakan rabun jauh dan dekat?",
373
+ "Rabun jauh dan rabun dekat bedanya apa?",
374
+ "Apakah rabun dekat sama dengan mata plus?",
375
+ "Bagaimana rabun jauh dibanding mata silinder?",
376
+ "Apa perbedaan rabun dekat dan mata plus?",
377
+ "Rabun jauh itu apa dibanding mata silinder?",
378
+ "Apakah rabun jauh lebih buruk dari rabun dekat?",
379
+ "Bagaimana rabun dekat berbeda dengan mata silinder?",
380
+ "Apa yang bikin rabun jauh beda dari rabun dekat?",
381
+ "Rabun jauh dan mata minus sama nggak?",
382
+ "Apakah rabun dekat bikin susah lihat jauh?",
383
+ "Bagaimana rabun jauh dibanding rabun dekat?",
384
+ "Apa perbedaan rabun jauh dengan mata normal?",
385
+ "Rabun dekat dan mata plus bedanya apa?",
386
+ "Apakah rabun jauh bikin susah lihat dekat?",
387
+ "Bagaimana tahu perbedaan rabun jauh dan dekat?",
388
+ "Apa yang membedakan mata minus dan mata plus?",
389
+ "Rabun jauh lebih parah dari rabun dekat nggak?",
390
+ "Apakah rabun dekat sama dengan rabun jauh?"
391
+ ],
392
+ "responses": [
393
+ "Rabun jauh (miopia) membuat sulit melihat jauh, sedangkan rabun dekat (hipermetropia) membuat sulit melihat dekat."
394
+ ],
395
+ "context": [
396
+ "Pengguna ingin mengetahui perbedaan antara rabun jauh dan rabun dekat."
397
+ ]
398
+ },
399
+ {
400
+ "tag": "definisi_degenerasi_makula",
401
+ "patterns": [
402
+ "Apa itu degenerasi makula?",
403
+ "Bagaimana definisi degenerasi makula?",
404
+ "Degenerasi makula itu apa?",
405
+ "Apa yang dimaksud dengan degenerasi makula?",
406
+ "Bagaimana degenerasi makula terjadi?",
407
+ "Apa arti degenerasi makula?",
408
+ "Degenerasi makula berarti apa?",
409
+ "Apakah degenerasi makula penyakit mata?",
410
+ "Bagaimana tahu apa itu degenerasi makula?",
411
+ "Apa yang bikin degenerasi makula?",
412
+ "Degenerasi makula itu seperti apa?",
413
+ "Apakah degenerasi makula bikin buta?",
414
+ "Bagaimana degenerasi makula dijelaskan?",
415
+ "Apa definisi degenerasi makula secara sederhana?",
416
+ "Degenerasi makula itu penyakit apa?",
417
+ "Apakah degenerasi makula sama dengan katarak?",
418
+ "Bagaimana degenerasi makula memengaruhi mata?",
419
+ "Apa yang dimaksud degenerasi makula di mata?",
420
+ "Degenerasi makula itu apa sih?",
421
+ "Apakah degenerasi makula berbahaya?",
422
+ "Bagaimana definisi degenerasi makula di mata?",
423
+ "Apa itu degenerasi makula pada lansia?",
424
+ "Degenerasi makula bikin apa di mata?",
425
+ "Apakah degenerasi makula sama dengan glaukoma?",
426
+ "Bagaimana tahu degenerasi makula itu apa?"
427
+ ],
428
+ "responses": [
429
+ "Degenerasi makula adalah kondisi di mana bagian tengah retina (makula) rusak, menyebabkan hilangnya penglihatan sentral."
430
+ ],
431
+ "context": [
432
+ "Pengguna ingin mengetahui definisi degenerasi makula."
433
+ ]
434
+ },
435
+ {
436
+ "tag": "tanda_periksa_mata",
437
+ "patterns": [
438
+ "Apa tanda perlu periksa mata?",
439
+ "Bagaimana tahu harus periksa mata?",
440
+ "Apa yang bikin harus periksa mata?",
441
+ "Tanda apa yang nunjukin mata harus diperiksa?",
442
+ "Apakah penglihatan kabur tanda periksa mata?",
443
+ "Bagaimana tahu mata perlu ke dokter?",
444
+ "Apa ciri-ciri mata harus diperiksa?",
445
+ "Apakah sakit kepala tanda periksa mata?",
446
+ "Bagaimana tahu mata bermasalah?",
447
+ "Apa tanda mata harus dicek?",
448
+ "Apakah mata lelah tanda periksa mata?",
449
+ "Bagaimana tahu penglihatan bermasalah?",
450
+ "Apa yang bikin mata perlu diperiksa?",
451
+ "Tanda apa yang bikin harus ke dokter mata?",
452
+ "Apakah mata merah tanda periksa mata?",
453
+ "Bagaimana tahu mata silinder perlu dicek?",
454
+ "Apa tanda mata minus harus diperiksa?",
455
+ "Apakah susah lihat malam tanda periksa mata?",
456
+ "Bagaimana tahu mata plus perlu dicek?",
457
+ "Apa yang bikin penglihatan harus diperiksa?",
458
+ "Tanda apa yang nunjukin mata sakit?",
459
+ "Apakah mata sensitif cahaya tanda periksa mata?",
460
+ "Bagaimana tahu mata kering perlu diperiksa?",
461
+ "Apa tanda mata buram harus ke dokter?",
462
+ "Apakah penglihatan ganda tanda periksa mata?"
463
+ ],
464
+ "responses": [
465
+ "Tanda perlu periksa mata meliputi penglihatan kabur, mata lelah, sakit kepala, dan kesulitan melihat di malam hari."
466
+ ],
467
+ "context": [
468
+ "Pengguna ingin mengetahui tanda-tanda perlu memeriksakan mata."
469
+ ]
470
+ },
471
+ {
472
+ "tag": "pencegahan_mata_lelah",
473
+ "patterns": [
474
+ "Bagaimana cegah mata lelah?",
475
+ "Apa yang bikin mata nggak lelah?",
476
+ "Bagaimana cara hindari mata lelah?",
477
+ "Apa tips pencegahan mata lelah?",
478
+ "Bagaimana mata nggak lelah saat kerja?",
479
+ "Apa yang dilakukan biar mata nggak lelah?",
480
+ "Bagaimana cegah mata lelah karena gadget?",
481
+ "Apa cara agar mata tetap segar?",
482
+ "Bagaimana hindari mata lelah saat baca?",
483
+ "Apa yang bikin mata nggak capek?",
484
+ "Bagaimana cegah mata lelah di depan layar?",
485
+ "Apa tips biar mata nggak lelah?",
486
+ "Bagaimana mata nggak lelah lama-lama?",
487
+ "Apa yang dilakukan cegah mata lelah?",
488
+ "Bagaimana cara istirahatkan mata?",
489
+ "Apa yang bikin mata segar setiap hari?",
490
+ "Bagaimana cegah mata lelah saat komputer?",
491
+ "Apa tips mata nggak lelah lama?",
492
+ "Bagaimana hindari mata lelah di malam hari?",
493
+ "Apa yang bikin mata nggak lelah terus?",
494
+ "Bagaimana cegah mata lelah karena cahaya?",
495
+ "Apa cara mata nggak lelah saat belajar?",
496
+ "Bagaimana hindari mata lelah di siang hari?",
497
+ "Apa yang dilakukan biar mata rileks?",
498
+ "Bagaimana cegah mata lelah secara alami?"
499
+ ],
500
+ "responses": [
501
+ "Untuk mencegah mata lelah, istirahatkan mata setiap 20 menit, kurangi waktu layar, dan pastikan pencahayaan cukup."
502
+ ],
503
+ "context": [
504
+ "Pengguna ingin mengetahui cara mencegah mata lelah."
505
+ ]
506
+ },
507
+ {
508
+ "tag": "perawatan_lensa_kontak",
509
+ "patterns": [
510
+ "Bagaimana rawat lensa kontak?",
511
+ "Apa yang dilakukan biar lensa kontak bersih?",
512
+ "Bagaimana cara jaga lensa kontak?",
513
+ "Apa tips perawatan lensa kontak?",
514
+ "Bagaimana bersihkan lensa kontak?",
515
+ "Apa yang bikin lensa kontak awet?",
516
+ "Bagaimana simpan lensa kontak?",
517
+ "Apa yang dilakukan biar lensa kontak aman?",
518
+ "Bagaimana rawat lensa kontak harian?",
519
+ "Apa cara jaga lensa kontak nggak rusak?",
520
+ "Bagaimana bersihkan lensa kontak dengan benar?",
521
+ "Apa yang bikin lensa kontak nggak kotor?",
522
+ "Bagaimana rawat lensa kontak bulanan?",
523
+ "Apa tips lensa kontak tetap nyaman?",
524
+ "Bagaimana simpan lensa kontak yang baik?",
525
+ "Apa yang dilakukan biar lensa kontak steril?",
526
+ "Bagaimana rawat lensa kontak saat bepergian?",
527
+ "Apa cara lensa kontak nggak bikin iritasi?",
528
+ "Bagaimana bersihkan lensa kontak setiap hari?",
529
+ "Apa yang bikin lensa kontak tahan lama?",
530
+ "Bagaimana rawat lensa kontak dengan aman?",
531
+ "Apa tips jaga lensa kontak dari bakteri?",
532
+ "Bagaimana simpan lensa kontak tanpa cairan?",
533
+ "Apa yang dilakukan biar lensa kontak nggak kering?",
534
+ "Bagaimana rawat lensa kontak supaya jernih?"
535
+ ],
536
+ "responses": [
537
+ "Rawat lensa kontak dengan mencuci tangan sebelum memegangnya, gunakan cairan pembersih khusus, dan simpan di tempat steril."
538
+ ],
539
+ "context": [
540
+ "Pengguna ingin mengetahui cara merawat lensa kontak."
541
+ ]
542
+ },
543
+ {
544
+ "tag": "perawatan_mata_diabetes",
545
+ "patterns": [
546
+ "Bagaimana rawat mata kalau diabetes?",
547
+ "Apa yang dilakukan biar mata sehat saat diabetes?",
548
+ "Bagaimana jaga mata dengan diabetes?",
549
+ "Apa tips perawatan mata untuk diabetes?",
550
+ "Bagaimana cegah mata rusak karena diabetes?",
551
+ "Apa yang bikin mata aman saat diabetes?",
552
+ "Bagaimana rawat mata diabetes setiap hari?",
553
+ "Apa cara jaga penglihatan dengan diabetes?",
554
+ "Bagaimana hindari mata buram karena diabetes?",
555
+ "Apa yang dilakukan biar mata nggak rusak?",
556
+ "Bagaimana rawat mata diabetes secara alami?",
557
+ "Apa tips mata sehat untuk penderita diabetes?",
558
+ "Bagaimana cegah katarak karena diabetes?",
559
+ "Apa yang bikin mata nggak buram saat diabetes?",
560
+ "Bagaimana jaga mata diabetes tanpa obat?",
561
+ "Apa cara rawat mata biar nggak buta?",
562
+ "Bagaimana hindari retinopati diabetes?",
563
+ "Apa yang dilakukan biar mata tetap jernih?",
564
+ "Bagaimana rawat mata diabetes di rumah?",
565
+ "Apa tips cegah glaukoma karena diabetes?",
566
+ "Bagaimana jaga mata diabetes supaya tajam?",
567
+ "Apa yang bikin mata sehat meski diabetes?",
568
+ "Bagaimana rawat mata diabetes dengan nutrisi?",
569
+ "Apa cara jaga mata dari komplikasi diabetes?",
570
+ "Bagaimana cegah mata lelah karena diabetes?"
571
+ ],
572
+ "responses": [
573
+ "Perawatan mata untuk diabetes meliputi kontrol gula darah, periksa mata rutin, dan konsumsi nutrisi baik untuk mata."
574
+ ],
575
+ "context": [
576
+ "Pengguna ingin mengetahui cara merawat mata bagi penderita diabetes."
577
+ ]
578
+ },
579
+ {
580
+ "tag": "pencegahan_sinar_uv",
581
+ "patterns": [
582
+ "Bagaimana cegah sinar UV pada mata?",
583
+ "Apa yang dilakukan biar mata aman dari UV?",
584
+ "Bagaimana lindungi mata dari sinar UV?",
585
+ "Apa tips cegah sinar UV ke mata?",
586
+ "Bagaimana mata nggak rusak karena UV?",
587
+ "Apa yang bikin mata terlindung dari UV?",
588
+ "Bagaimana pakai kacamata anti UV?",
589
+ "Apa cara hindari sinar UV di mata?",
590
+ "Bagaimana cegah katarak karena sinar UV?",
591
+ "Apa yang dilakukan biar mata nggak silau?",
592
+ "Bagaimana lindungi mata saat matahari terik?",
593
+ "Apa tips mata sehat dari sinar UV?",
594
+ "Bagaimana cegah mata buram karena UV?",
595
+ "Apa yang bikin mata aman di luar ruangan?",
596
+ "Bagaimana hindari sinar UV saat siang?",
597
+ "Apa cara mata nggak kering karena UV?",
598
+ "Bagaimana cegah mata rusak di bawah matahari?",
599
+ "Apa yang dilakukan biar mata nggak sensitif UV?",
600
+ "Bagaimana lindungi mata anak dari UV?",
601
+ "Apa tips cegah mata lelah karena sinar UV?",
602
+ "Bagaimana mata nggak merah karena UV?",
603
+ "Apa yang bikin mata terlindung saat cuaca panas?",
604
+ "Bagaimana cegah sinar UV tanpa kacamata?",
605
+ "Apa cara jaga mata dari UV setiap hari?",
606
+ "Bagaimana lindungi mata dari UV secara alami?"
607
+ ],
608
+ "responses": [
609
+ "Cegah sinar UV dengan memakai kacamata anti-UV, topi, dan hindari paparan matahari langsung saat terik."
610
+ ],
611
+ "context": [
612
+ "Pengguna ingin mengetahui cara mencegah dampak sinar UV pada mata."
613
+ ]
614
+ },
615
+ {
616
+ "tag": "pengobatan_alami_mata_minus",
617
+ "patterns": [
618
+ "Bagaimana obati mata minus alami?",
619
+ "Apa cara alami kurangi mata minus?",
620
+ "Bagaimana sembuhkan mata minus tanpa operasi?",
621
+ "Apa pengobatan alami untuk mata minus?",
622
+ "Bagaimana mata minus hilang secara alami?",
623
+ "Apa yang dimakan biar mata minus sembuh?",
624
+ "Bagaimana cara alami atasi mata minus?",
625
+ "Apa bahan alami untuk mata minus?",
626
+ "Bagaimana kurangi mata minus dengan makanan?",
627
+ "Apa tips alami obati mata minus?",
628
+ "Bagaimana mata minus berkurang tanpa kacamata?",
629
+ "Apa yang dilakukan biar mata minus pulih?",
630
+ "Bagaimana obati mata minus dengan herbal?",
631
+ "Apa cara alami bikin mata minus sembuh?",
632
+ "Bagaimana mata minus nggak tambah parah alami?",
633
+ "Apa yang dimakan untuk kurangi mata minus?",
634
+ "Bagaimana obati mata minus tanpa dokter?",
635
+ "Apa pengobatan tradisional mata minus?",
636
+ "Bagaimana cara alami bikin penglihatan tajam?",
637
+ "Apa yang bikin mata minus sembuh alami?",
638
+ "Bagaimana obati mata minus dengan olahraga mata?",
639
+ "Apa tips alami kurangi minus di mata?",
640
+ "Bagaimana mata minus pulih dengan nutrisi?",
641
+ "Apa cara alami cegah mata minus bertambah?",
642
+ "Bagaimana sembuhkan mata minus di rumah?"
643
+ ],
644
+ "responses": [
645
+ "Pengobatan alami mata minus bisa dengan konsumsi makanan kaya vitamin A dan latihan mata, tapi efektivitasnya terbatas."
646
+ ],
647
+ "context": [
648
+ "Pengguna ingin mengetahui pengobatan alami untuk mata minus."
649
+ ]
650
+ },
651
+ {
652
+ "tag": "pengobatan_mata_minus",
653
+ "patterns": [
654
+ "Bagaimana obati mata minus?",
655
+ "Apa pengobatan untuk mata minus?",
656
+ "Bagaimana cara kurangi mata minus?",
657
+ "Apakah mata minus bisa disembuhkan?",
658
+ "Bagaimana atasi mata minus?",
659
+ "Apa solusi untuk mata minus?",
660
+ "Bagaimana mata minus bisa hilang?",
661
+ "Apakah ada obat untuk mata minus?",
662
+ "Bagaimana dokter obati mata minus?",
663
+ "Apakah LASIK sembuhkan mata minus?",
664
+ "Bagaimana kurangi minus di mata?",
665
+ "Apakah mata minus bisa sembuh alami?",
666
+ "Apa terapi untuk mata minus?",
667
+ "Bagaimana mata minus diobati?",
668
+ "Apakah kacamata obati mata minus?",
669
+ "Bagaimana bikin penglihatan tajam lagi?",
670
+ "Apakah mata minus bisa pulih?",
671
+ "Bagaimana cara cepat atasi mata minus?",
672
+ "Apa yang bikin mata minus sembuh?",
673
+ "Apakah lensa kontak sembuhkan mata minus?",
674
+ "Bagaimana mata minus nggak tambah parah?",
675
+ "Apakah mata minus bisa dikurangi?",
676
+ "Bagaimana obati mata minus tanpa operasi?",
677
+ "Apa pilihan pengobatan mata minus?",
678
+ "Bagaimana tahu mata minus bisa sembuh?"
679
+ ],
680
+ "responses": [
681
+ "Mata minus dapat diobati dengan kacamata, lensa kontak, atau operasi seperti LASIK."
682
+ ],
683
+ "context": [
684
+ "Pengguna ingin mengetahui cara mengobati mata minus."
685
+ ]
686
+ },
687
+ {
688
+ "tag": "perkembangan_rabun_dekat",
689
+ "patterns": [
690
+ "Bagaimana rabun dekat berkembang?",
691
+ "Apa yang bikin rabun dekat tambah parah?",
692
+ "Bagaimana tahu rabun dekat memburuk?",
693
+ "Apa perkembangan rabun dekat?",
694
+ "Bagaimana rabun dekat muncul?",
695
+ "Apakah rabun dekat bertambah seiring usia?",
696
+ "Bagaimana rabun dekat jadi parah?",
697
+ "Apa yang bikin rabun dekat berkembang?",
698
+ "Bagaimana rabun dekat berubah?",
699
+ "Apakah rabun dekat tambah buruk?",
700
+ "Bagaimana tahu rabun dekat bertambah?",
701
+ "Apa yang memengaruhi rabun dekat?",
702
+ "Bagaimana rabun dekat di usia tua?",
703
+ "Apakah rabun dekat bikin susah baca?",
704
+ "Bagaimana rabun dekat berkembang di anak?",
705
+ "Apa tanda rabun dekat memburuk?",
706
+ "Bagaimana rabun dekat jadi lebih parah?",
707
+ "Apakah rabun dekat berubah seiring waktu?",
708
+ "Bagaimana rabun dekat muncul di lansia?",
709
+ "Apa yang bikin rabun dekat nggak stabil?",
710
+ "Bagaimana rabun dekat berkembang perlahan?",
711
+ "Apakah rabun dekat tambah susah dilihat?",
712
+ "Bagaimana tahu rabun dekat jadi parah?",
713
+ "Apa perkembangan rabun dekat di mata?",
714
+ "Bagaimana rabun dekat berubah dengan usia?"
715
+ ],
716
+ "responses": [
717
+ "Rabun dekat sering berkembang seiring usia karena lensa mata kehilangan elastisitas, terutama setelah usia 40 tahun."
718
+ ],
719
+ "context": [
720
+ "Pengguna ingin mengetahui perkembangan rabun dekat."
721
+ ]
722
+ },
723
+ {
724
+ "tag": "pencegahan_mata_kering",
725
+ "patterns": [
726
+ "Bagaimana cegah mata kering?",
727
+ "Apa yang bikin mata nggak kering?",
728
+ "Bagaimana cara hindari mata kering?",
729
+ "Apa tips pencegahan mata kering?",
730
+ "Bagaimana mata nggak kering saat kerja?",
731
+ "Apa yang dilakukan biar mata nggak kering?",
732
+ "Bagaimana cegah mata kering karena gadget?",
733
+ "Apa cara agar mata tetap lembap?",
734
+ "Bagaimana hindari mata kering saat baca?",
735
+ "Apa yang bikin mata nggak kering lama?",
736
+ "Bagaimana cegah mata kering di depan layar?",
737
+ "Apa tips biar mata nggak kering?",
738
+ "Bagaimana mata nggak kering saat AC?",
739
+ "Apa yang dilakukan cegah mata kering?",
740
+ "Bagaimana cara jaga kelembapan mata?",
741
+ "Apa yang bikin mata lembap setiap hari?",
742
+ "Bagaimana cegah mata kering saat komputer?",
743
+ "Apa tips mata nggak kering di cuaca panas?",
744
+ "Bagaimana hindari mata kering di malam hari?",
745
+ "Apa yang bikin mata nggak kering terus?",
746
+ "Bagaimana cegah mata kering karena angin?",
747
+ "Apa cara mata nggak kering saat bepergian?",
748
+ "Bagaimana hindari mata kering di ruangan?",
749
+ "Apa yang dilakukan biar mata nyaman?",
750
+ "Bagaimana cegah mata kering secara alami?"
751
+ ],
752
+ "responses": [
753
+ "Cegah mata kering dengan sering berkedip, gunakan tetes mata, dan hindari paparan udara kering atau layar terlalu lama."
754
+ ],
755
+ "context": [
756
+ "Pengguna ingin mengetahui cara mencegah mata kering."
757
+ ]
758
+ },
759
+ {
760
+ "tag": "tanda_anak_butuh_kacamata",
761
+ "patterns": [
762
+ "Bagaimana tahu anak butuh kacamata?",
763
+ "Apa tanda anak perlu kacamata?",
764
+ "Bagaimana anak nunjukin butuh kacamata?",
765
+ "Apa ciri-ciri anak butuh kacamata?",
766
+ "Apakah anak susah lihat tanda kacamata?",
767
+ "Bagaimana tahu penglihatan anak bermasalah?",
768
+ "Apa yang bikin anak harus pakai kacamata?",
769
+ "Tanda apa yang nunjukin anak butuh kacamata?",
770
+ "Apakah anak mengeluh sakit kepala tanda kacamata?",
771
+ "Bagaimana tahu anak rabun butuh kacamata?",
772
+ "Apa tanda anak sulit baca perlu kacamata?",
773
+ "Apakah anak menyipit tanda kacamata?",
774
+ "Bagaimana tahu anak nggak jelas lihat?",
775
+ "Apa yang bikin anak butuh kacamata cepat?",
776
+ "Tanda apa yang bikin anak ke dokter mata?",
777
+ "Apakah anak dekatkan buku tanda kacamata?",
778
+ "Bagaimana tahu anak butuh kacamata di sekolah?",
779
+ "Apa tanda anak susah lihat jauh?",
780
+ "Apakah anak sering salah lihat tanda kacamata?",
781
+ "Bagaimana tahu anak mata lelah butuh kacamata?",
782
+ "Apa yang nunjukin anak butuh kacamata?",
783
+ "Apakah anak suka tutup mata tanda kacamata?",
784
+ "Bagaimana tahu anak butuh kacamata dini?",
785
+ "Apa tanda anak nggak fokus lihat?",
786
+ "Apakah anak menggosok mata tanda kacamata?"
787
+ ],
788
+ "responses": [
789
+ "Tanda anak butuh kacamata meliputi menyipitkan mata, dekatkan buku saat baca, atau mengeluh sakit kepala."
790
+ ],
791
+ "context": [
792
+ "Pengguna ingin mengetahui tanda-tanda anak membutuhkan kacamata."
793
+ ]
794
+ },
795
+ {
796
+ "tag": "definisi_astigmatisme",
797
+ "patterns": [
798
+ "Apa itu astigmatisme?",
799
+ "Bagaimana definisi astigmatisme?",
800
+ "Astigmatisme itu apa?",
801
+ "Apa yang dimaksud dengan astigmatisme?",
802
+ "Bagaimana astigmatisme terjadi?",
803
+ "Apa arti astigmatisme?",
804
+ "Astigmatisme berarti apa?",
805
+ "Apakah astigmatisme penyakit mata?",
806
+ "Bagaimana tahu apa itu astigmatisme?",
807
+ "Apa yang bikin astigmatisme?",
808
+ "Astigmatisme itu seperti apa?",
809
+ "Apakah astigmatisme bikin buram?",
810
+ "Bagaimana astigmatisme dijelaskan?",
811
+ "Apa definisi astigmatisme sederhana?",
812
+ "Astigmatisme itu masalah apa?",
813
+ "Apakah astigmatisme sama dengan rabun?",
814
+ "Bagaimana astigmatisme memengaruhi mata?",
815
+ "Apa yang dimaksud astigmatisme di mata?",
816
+ "Astigmatisme itu apa sih?",
817
+ "Apakah astigmatisme berbahaya?",
818
+ "Bagaimana definisi astigmatisme di mata?",
819
+ "Apa itu astigmatisme pada anak?",
820
+ "Astigmatisme bikin apa di mata?",
821
+ "Apakah astigmatisme sama dengan silinder?",
822
+ "Bagaimana tahu astigmatisme itu apa?"
823
+ ],
824
+ "responses": [
825
+ "Astigmatisme adalah kondisi mata di mana kornea atau lensa mata tidak berbentuk sempurna, menyebabkan penglihatan kabur."
826
+ ],
827
+ "context": [
828
+ "Pengguna ingin mengetahui definisi astigmatisme."
829
+ ]
830
+ },
831
+ {
832
+ "tag": "latihan_mata",
833
+ "patterns": [
834
+ "Bagaimana latihan mata yang baik?",
835
+ "Apa latihan untuk mata sehat?",
836
+ "Bagaimana cara latih mata?",
837
+ "Apa latihan mata biar tajam?",
838
+ "Bagaimana latih mata minus?",
839
+ "Apa yang dilakukan untuk latih mata?",
840
+ "Bagaimana latihan mata setiap hari?",
841
+ "Apa cara latih mata nggak lelah?",
842
+ "Bagaimana latih mata silinder?",
843
+ "Apa latihan mata untuk rabun?",
844
+ "Bagaimana cara latih penglihatan?",
845
+ "Apa latihan mata biar nggak buram?",
846
+ "Bagaimana latih mata dekat?",
847
+ "Apa yang bikin mata tajam dengan latihan?",
848
+ "Bagaimana latihan mata alami?",
849
+ "Apa latihan mata untuk anak?",
850
+ "Bagaimana latih mata supaya jernih?",
851
+ "Apa cara latih mata lelah?",
852
+ "Bagaimana latihan mata di rumah?",
853
+ "Apa latihan mata biar nggak kering?",
854
+ "Bagaimana latih mata jauh?",
855
+ "Apa yang dilakukan biar mata rileks?",
856
+ "Bagaimana latihan mata cepat?",
857
+ "Apa latihan mata untuk lansia?",
858
+ "Bagaimana cara latih mata sederhana?"
859
+ ],
860
+ "responses": [
861
+ "Latihan mata seperti menggerakkan mata ke berbagai arah atau fokus pada benda jauh-dekat dapat membantu relaksasi mata."
862
+ ],
863
+ "context": [
864
+ "Pengguna ingin mengetahui cara melakukan latihan mata."
865
+ ]
866
+ },
867
+ {
868
+ "tag": "pencegahan_infeksi_mata",
869
+ "patterns": [
870
+ "Bagaimana cegah infeksi mata?",
871
+ "Apa yang bikin mata nggak infeksi?",
872
+ "Bagaimana cara hindari infeksi mata?",
873
+ "Apa tips pencegahan infeksi mata?",
874
+ "Bagaimana mata nggak infeksi saat kotor?",
875
+ "Apa yang dilakukan biar mata nggak infeksi?",
876
+ "Bagaimana cegah infeksi mata karena debu?",
877
+ "Apa cara agar mata tetap bersih?",
878
+ "Bagaimana hindari infeksi mata saat berenang?",
879
+ "Apa yang bikin mata nggak merah?",
880
+ "Bagaimana cegah infeksi mata dari tangan?",
881
+ "Apa tips biar mata nggak infeksi?",
882
+ "Bagaimana mata nggak infeksi saat sakit?",
883
+ "Apa yang dilakukan cegah infeksi mata?",
884
+ "Bagaimana cara jaga kebersihan mata?",
885
+ "Apa yang bikin mata aman dari infeksi?",
886
+ "Bagaimana cegah infeksi mata karena lensa?",
887
+ "Apa tips mata nggak infeksi di musim hujan?",
888
+ "Bagaimana hindari infeksi mata di anak?",
889
+ "Apa yang bikin mata nggak infeksi lama?",
890
+ "Bagaimana cegah infeksi mata karena alergi?",
891
+ "Apa cara mata nggak infeksi saat flu?",
892
+ "Bagaimana hindari infeksi mata setiap hari?",
893
+ "Apa yang dilakukan biar mata steril?",
894
+ "Bagaimana cegah infeksi mata secara alami?"
895
+ ],
896
+ "responses": [
897
+ "Cegah infeksi mata dengan mencuci tangan sebelum menyentuh mata, hindari menggosok mata, dan jaga kebersihan lensa kontak."
898
+ ],
899
+ "context": [
900
+ "Pengguna ingin mengetahui cara mencegah infeksi mata."
901
+ ]
902
+ },
903
+ {
904
+ "tag": "gejala_katarak",
905
+ "patterns": [
906
+ "Apa saja gejala katarak?",
907
+ "Bagaimana saya tahu kalau saya kena katarak?",
908
+ "Gejala apa yang muncul saat katarak?",
909
+ "Apa tanda-tanda katarak pada mata?",
910
+ "Mata buram apakah gejala katarak?",
911
+ "Apakah penglihatan ganda tanda katarak?",
912
+ "Bagaimana gejala katarak berkembang?",
913
+ "Apa yang dirasakan kalau katarak?",
914
+ "Apakah silau itu gejala katarak?",
915
+ "Gejala katarak seperti apa?",
916
+ "Apakah warna pudar gejala katarak?",
917
+ "Bagaimana saya tahu mata saya katarak?",
918
+ "Apa saja ciri-ciri katarak?",
919
+ "Katarak punya gejala apa saja?",
920
+ "Apakah mata sensitif cahaya tanda katarak?",
921
+ "Gejala awal katarak apa?",
922
+ "Apakah sulit melihat malam gejala katarak?",
923
+ "Mata kabur apakah katarak?",
924
+ "Apa yang terjadi pada mata kalau katarak?",
925
+ "Bagaimana gejala katarak pada lansia?",
926
+ "Apakah katarak bikin mata merah?",
927
+ "Gejala katarak yang umum apa?",
928
+ "Apakah nyeri mata gejala katarak?",
929
+ "Bagaimana saya cek gejala katarak?",
930
+ "Apakah katarak bikin penglihatan buram?"
931
+ ],
932
+ "responses": [
933
+ "Gejala katarak meliputi penglihatan buram, sensitivitas terhadap cahaya, penglihatan ganda, dan kesulitan melihat di malam hari.",
934
+ "Tanda-tanda umum katarak adalah mata buram, silau saat melihat cahaya, dan warna yang tampak pudar."
935
+ ]
936
+ },
937
+ {
938
+ "tag": "gejala_mata_merah",
939
+ "patterns": [
940
+ "Apa penyebab mata merah?",
941
+ "Gejala mata merah apa saja?",
942
+ "Kenapa mata saya merah?",
943
+ "Apakah mata merah berbahaya?",
944
+ "Bagaimana tahu mata merah serius?",
945
+ "Mata merah disertai apa?",
946
+ "Apakah gatal tanda mata merah?",
947
+ "Mata merah itu gejala apa?",
948
+ "Apakah mata merah bikin sakit?",
949
+ "Bagaimana gejala mata merah?",
950
+ "Apa yang dirasakan saat mata merah?",
951
+ "Mata merah ada cairannya apa?",
952
+ "Apakah mata merah karena infeksi?",
953
+ "Gejala mata merah yang umum apa?",
954
+ "Apakah mata merah bikin buram?",
955
+ "Bagaimana mata merah terjadi?",
956
+ "Apakah nyeri gejala mata merah?",
957
+ "Mata merah apa tandanya?",
958
+ "Apakah mata merah karena alergi?",
959
+ "Gejala mata merah seperti apa?",
960
+ "Apakah mata merah bengkak?",
961
+ "Bagaimana saya tahu mata merah?",
962
+ "Mata merah apa saja cirinya?",
963
+ "Apakah mata merah karena debu?",
964
+ "Gejala awal mata merah apa?"
965
+ ],
966
+ "responses": [
967
+ "Gejala mata merah bisa meliputi rasa gatal, perih, keluar cairan, dan kadang disertai penglihatan buram.",
968
+ "Mata merah bisa disebabkan oleh infeksi, alergi, atau iritasi, dengan gejala seperti gatal dan sensasi terbakar."
969
+ ]
970
+ },
971
+ {
972
+ "tag": "efektivitas_kacamata",
973
+ "patterns": [
974
+ "Seberapa efektif kacamata?",
975
+ "Apakah kacamata bantu penglihatan?",
976
+ "Kacamata efektif untuk apa?",
977
+ "Apakah kacamata bisa perbaiki mata?",
978
+ "Bagaimana kacamata membantu?",
979
+ "Apakah kacamata efektif untuk rabun?",
980
+ "Kacamata bantu mata buram gak?",
981
+ "Seberapa baik kacamata bekerja?",
982
+ "Apakah kacamata efektif untuk silau?",
983
+ "Kacamata efektif berapa lama?",
984
+ "Apakah kacamata cocok untuk semua?",
985
+ "Bagaimana cara kacamata efektif?",
986
+ "Kacamata bisa bantu mata lelet gak?",
987
+ "Apakah kacamata efektif untuk malam?",
988
+ "Seberapa besar manfaat kacamata?",
989
+ "Kacamata efektif untuk anak gak?",
990
+ "Apakah kacamata bantu fokus?",
991
+ "Bagaimana kacamata tingkatkan mata?",
992
+ "Kacamata efektif untuk lansia gak?",
993
+ "Apakah kacamata kurangi silau?",
994
+ "Seberapa cepat kacamata bekerja?",
995
+ "Kacamata bantu penglihatan jauh gak?",
996
+ "Apakah kacamata efektif permanen?",
997
+ "Bagaimana kacamata bantu rabun dekat?",
998
+ "Kacamata efektif untuk kerja gak?"
999
+ ],
1000
+ "responses": [
1001
+ "Kacamata sangat efektif untuk memperbaiki penglihatan seperti rabun jauh, rabun dekat, atau astigmatisme.",
1002
+ "Efektivitas kacamata tergantung pada resep yang tepat dan kondisi mata, membantu fokus dan mengurangi silau."
1003
+ ]
1004
+ },
1005
+ {
1006
+ "tag": "pencegahan_katarak",
1007
+ "patterns": [
1008
+ "Bagaimana cegah katarak?",
1009
+ "Apa cara mencegah katarak?",
1010
+ "Pencegahan katarak seperti apa?",
1011
+ "Apakah katarak bisa dicegah?",
1012
+ "Bagaimana cara hindari katarak?",
1013
+ "Apa yang dilakukan cegah katarak?",
1014
+ "Pencegahan katarak apa saja?",
1015
+ "Apakah makanan cegah katarak?",
1016
+ "Bagaimana mata sehat hindari katarak?",
1017
+ "Apakah kacamata cegah katarak?",
1018
+ "Cara apa yang ampuh cegah katarak?",
1019
+ "Apakah olahraga bantu cegah katarak?",
1020
+ "Bagaimana cegah katarak alami?",
1021
+ "Apakah vitamin cegah katarak?",
1022
+ "Pencegahan katarak untuk lansia apa?",
1023
+ "Apakah sinar matahari picu katarak?",
1024
+ "Bagaimana lindungi mata dari katarak?",
1025
+ "Apakah merokok sebabkan katarak?",
1026
+ "Cara cegah katarak di usia muda?",
1027
+ "Apakah katarak dicegah dengan lensa?",
1028
+ "Bagaimana kurangi risiko katarak?",
1029
+ "Apakah gaya hidup cegah katarak?",
1030
+ "Pencegahan katarak yang mudah apa?",
1031
+ "Apakah pola makan bantu cegah katarak?",
1032
+ "Bagaimana mata aman dari katarak?"
1033
+ ],
1034
+ "responses": [
1035
+ "Pencegahan katarak bisa dilakukan dengan melindungi mata dari sinar UV, makan makanan kaya antioksidan, dan tidak merokok.",
1036
+ "Untuk mencegah katarak, gunakan kacamata UV, pertahankan gula darah, dan periksa mata secara rutin."
1037
+ ]
1038
+ },
1039
+ {
1040
+ "tag": "perawatan_pasca_operasi",
1041
+ "patterns": [
1042
+ "Bagaimana perawatan pasca operasi mata?",
1043
+ "Apa yang dilakukan setelah operasi katarak?",
1044
+ "Perawatan setelah operasi apa saja?",
1045
+ "Apakah pasca operasi boleh kerja?",
1046
+ "Bagaimana jaga mata setelah operasi?",
1047
+ "Apa yang dilarang pasca operasi?",
1048
+ "Perawatan pasca operasi berapa lama?",
1049
+ "Apakah mata sensitif setelah operasi?",
1050
+ "Bagaimana pulih dari operasi katarak?",
1051
+ "Apa obat pasca operasi mata?",
1052
+ "Perawatan setelah operasi seperti apa?",
1053
+ "Apakah boleh mandi pasca operasi?",
1054
+ "Bagaimana cegah infeksi pasca operasi?",
1055
+ "Apakah pasca operasi butuh istirahat?",
1056
+ "Perawatan mata setelah operasi apa?",
1057
+ "Apakah boleh olahraga pasca operasi?",
1058
+ "Bagaimana mata sembuh setelah operasi?",
1059
+ "Apa tanda bahaya pasca operasi?",
1060
+ "Perawatan pasca operasi yang baik apa?",
1061
+ "Apakah boleh lihat layar pasca operasi?",
1062
+ "Bagaimana jaga kebersihan mata?",
1063
+ "Apakah pasca operasi mata sakit?",
1064
+ "Perawatan setelah operasi untuk lansia?",
1065
+ "Apakah perlu kontrol pasca operasi?",
1066
+ "Bagaimana tahu mata pulih?"
1067
+ ],
1068
+ "responses": [
1069
+ "Perawatan pasca operasi katarak meliputi penggunaan obat tetes mata, menghindari aktivitas berat, dan melindungi mata dari debu.",
1070
+ "Setelah operasi, jangan menggosok mata, ikuti jadwal kontrol dokter, dan gunakan pelindung mata saat tidur."
1071
+ ]
1072
+ },
1073
+ {
1074
+ "tag": "sapaan",
1075
+ "patterns": [
1076
+ "halo",
1077
+ "hi",
1078
+ "selamat pagi",
1079
+ "selamat siang",
1080
+ "selamat sore",
1081
+ "selamat malam",
1082
+ "apa kabar",
1083
+ "permisi",
1084
+ "hey",
1085
+ "yo",
1086
+ "hai",
1087
+ "hola",
1088
+ "assalamualaikum",
1089
+ "salam",
1090
+ "morning",
1091
+ "evening",
1092
+ "afternoon",
1093
+ "night",
1094
+ "hello there",
1095
+ "greeting"
1096
+ ],
1097
+ "responses": [
1098
+ "Halo! Apa yang bisa saya bantu hari ini?",
1099
+ "Selamat datang! Ada pertanyaan tentang mata?",
1100
+ "Halo, senang bertemu dengan Anda! Bagaimana saya bisa membantu?"
1101
+ ],
1102
+ "context": [
1103
+ "Pengguna menyapa chatbot."
1104
+ ]
1105
+ },
1106
+ {
1107
+ "tag": "tidak",
1108
+ "patterns": [
1109
+ "tidak",
1110
+ "nggak",
1111
+ "enggak",
1112
+ "tidak mau",
1113
+ "tidak perlu",
1114
+ "tidak ingin",
1115
+ "tidak usah",
1116
+ "tidak, terima kasih",
1117
+ "tidak, makasih",
1118
+ "tidak, thanks",
1119
+ "tidak, no",
1120
+ "tidak, nggak",
1121
+ "tidak, enggak",
1122
+ "tidak, tidak",
1123
+ "tidak, tidak mau",
1124
+ "tidak, tidak perlu",
1125
+ "tidak, tidak ingin",
1126
+ "tidak, tidak usah",
1127
+ "tidak, tidak, terima kasih",
1128
+ "tidak, tidak, makasih",
1129
+ "tidak, tidak, thanks",
1130
+ "tidak, tidak, no",
1131
+ "tidak, tidak, nggak",
1132
+ "tidak, tidak, enggak",
1133
+ "tidak, tidak, tidak"
1134
+ ],
1135
+ "responses": [
1136
+ "Baik, saya mengerti. Jika Anda membutuhkan bantuan lain, silakan tanyakan.",
1137
+ "Tidak apa-apa. Saya di sini jika Anda membutuhkan informasi lebih lanjut."
1138
+ ],
1139
+ "context": [
1140
+ "Pengguna menolak atau menjawab negatif."
1141
+ ]
1142
+ },
1143
+ {
1144
+ "tag": "terima_kasih",
1145
+ "patterns": [
1146
+ "terima kasih",
1147
+ "thanks",
1148
+ "makasih",
1149
+ "thank you",
1150
+ "terimakasih",
1151
+ "terima kasih banyak",
1152
+ "thanks a lot",
1153
+ "makasih banyak",
1154
+ "thank you very much",
1155
+ "terimakasih banyak",
1156
+ "terima kasih atas bantuannya",
1157
+ "thanks for the help",
1158
+ "makasih atas bantuannya",
1159
+ "thank you for the help",
1160
+ "terimakasih atas bantuannya",
1161
+ "terima kasih, bye",
1162
+ "thanks, bye",
1163
+ "makasih, bye",
1164
+ "thank you, bye",
1165
+ "terimakasih, bye",
1166
+ "terima kasih, selamat tinggal",
1167
+ "thanks, goodbye",
1168
+ "makasih, selamat tinggal",
1169
+ "thank you, goodbye",
1170
+ "terimakasih, selamat tinggal"
1171
+ ],
1172
+ "responses": [
1173
+ "Sama-sama! Jika ada pertanyaan lain, jangan ragu untuk bertanya.",
1174
+ "Terima kasih kembali! Semoga harimu menyenangkan."
1175
+ ],
1176
+ "context": [
1177
+ "Pengguna mengucapkan terima kasih."
1178
+ ]
1179
+ },
1180
+ {
1181
+ "tag": "notfound",
1182
+ "patterns": [
1183
+ "apa",
1184
+ "siapa",
1185
+ "dimana",
1186
+ "kapan",
1187
+ "mengapa",
1188
+ "bagaimana",
1189
+ "berapa",
1190
+ "siapakah",
1191
+ "dimanakah",
1192
+ "kapankah",
1193
+ "mengapakah",
1194
+ "bagaimanakah",
1195
+ "berapakah",
1196
+ "apa itu",
1197
+ "siapa itu",
1198
+ "dimana itu",
1199
+ "kapan itu",
1200
+ "mengapa itu",
1201
+ "bagaimana itu",
1202
+ "berapa itu",
1203
+ "apa maksudnya",
1204
+ "siapa maksudnya",
1205
+ "dimana maksudnya",
1206
+ "kapan maksudnya",
1207
+ "mengapa maksudnya",
1208
+ "bagaimana maksudnya",
1209
+ "berapa maksudnya"
1210
+ ],
1211
+ "responses": [
1212
+ "Maaf, saya tidak mengerti pertanyaan Anda. Bisakah Anda mengajukan pertanyaan lain?",
1213
+ "Saya tidak yakin dengan maksud Anda. Silakan tanyakan sesuatu tentang kesehatan mata."
1214
+ ],
1215
+ "context": [
1216
+ "Pengguna mengajukan pertanyaan yang tidak dikenali."
1217
+ ]
1218
+ }
1219
+ ]
1220
+ }
datasets_uji_mandiri.json ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {"text": "Apa tanda-tanda mata silinder?", "true_intent": "gejala_mata_silinder"},
3
+ {"text": "Kenapa mata saya buram kalau lihat jauh?", "true_intent": "gejala_mata_silinder"},
4
+ {"text": "Apa yang menyebabkan glaukoma?", "true_intent": "penyebab_glaukoma"},
5
+ {"text": "Glaukoma itu karena diabetes ya?", "true_intent": "penyebab_glaukoma"},
6
+ {"text": "Cara ngobatin rabun jauh gimana?", "true_intent": "pengobatan_rabun_jauh"},
7
+ {"text": "Apa LASIK bisa nyembuhin rabun jauh?", "true_intent": "pengobatan_rabun_jauh"},
8
+ {"text": "Cahaya redup bikin mata rusak gak?", "true_intent": "dampak_pencahayaan"},
9
+ {"text": "Apa efek lampu terang ke mata?", "true_intent": "dampak_pencahayaan"},
10
+ {"text": "Operasi mata itu ada apa aja?", "true_intent": "jenis_operasi_mata"},
11
+ {"text": "Operasi katarak itu gimana caranya?", "true_intent": "jenis_operasi_mata"},
12
+ {"text": "Kalau debu masuk mata, apa yang harus dilakukan?", "true_intent": "pertolongan_benda_asing"},
13
+ {"text": "Benda asing di mata bahaya gak?", "true_intent": "pertolongan_benda_asing"},
14
+ {"text": "Gimana milih kacamata yang bagus buat anak?", "true_intent": "pemilihan_kacamata_anak"},
15
+ {"text": "Kacamata anak harus ringan ya?", "true_intent": "pemilihan_kacamata_anak"},
16
+ {"text": "Makanan apa yang bikin mata sehat?", "true_intent": "nutrisi_mata"},
17
+ {"text": "Vitamin apa yang bagus buat mata?", "true_intent": "nutrisi_mata"},
18
+ {"text": "Tetes mata aman dipake tiap hari gak?", "true_intent": "keamanan_tetes_mata"},
19
+ {"text": "Gimana cara pake tetes mata yang bener?", "true_intent": "keamanan_tetes_mata"},
20
+ {"text": "Gadget bikin mata minus gak sih?", "true_intent": "dampak_gadget"},
21
+ {"text": "Apa efek main HP lama-lama ke mata?", "true_intent": "dampak_gadget"},
22
+ {"text": "Rabun dekat sama rabun jauh bedanya apa?", "true_intent": "perbedaan_rabun"},
23
+ {"text": "Mata minus itu sama gak sama rabun jauh?", "true_intent": "perbedaan_rabun"},
24
+ {"text": "Degenerasi makula itu penyakit apa?", "true_intent": "definisi_degenerasi_makula"},
25
+ {"text": "Apa sih degenerasi makula?", "true_intent": "definisi_degenerasi_makula"},
26
+ {"text": "Kapan harus ke dokter mata?", "true_intent": "tanda_periksa_mata"},
27
+ {"text": "Mata buram itu tanda harus cek mata gak?", "true_intent": "tanda_periksa_mata"},
28
+ {"text": "Gimana biar mata gak lelah pas kerja?", "true_intent": "pencegahan_mata_lelah"},
29
+ {"text": "Tips apa biar mata tetep segar?", "true_intent": "pencegahan_mata_lelah"},
30
+ {"text": "Cara bersihin lensa kontak yang bener?", "true_intent": "perawatan_lensa_kontak"},
31
+ {"text": "Lensa kontak disimpan gimana biar gak kotor?", "true_intent": "perawatan_lensa_kontak"},
32
+ {"text": "Punya diabetes, mata dijaga gimana?", "true_intent": "perawatan_mata_diabetes"},
33
+ {"text": "Gimana hindarin mata rusak kalau diabetes?", "true_intent": "perawatan_mata_diabetes"},
34
+ {"text": "Cara lindungin mata dari sinar UV?", "true_intent": "pencegahan_sinar_uv"},
35
+ {"text": "Kacamata anti-UV itu perlu gak?", "true_intent": "pencegahan_sinar_uv"},
36
+ {"text": "Ada cara alami buat ngurangin mata minus?", "true_intent": "pengobatan_alami_mata_minus"},
37
+ {"text": "Makan apa biar mata minus gak nambah?", "true_intent": "pengobatan_alami_mata_minus"},
38
+ {"text": "Apa pengobatan terbaik buat mata minus?", "true_intent": "pengobatan_mata_minus"},
39
+ {"text": "Mata minus bisa sembuh gak?", "true_intent": "pengobatan_mata_minus"},
40
+ {"text": "Rabun dekat nambah parah gak kalau tua?", "true_intent": "perkembangan_rabun_dekat"},
41
+ {"text": "Kenapa rabun dekat bikin susah baca?", "true_intent": "perkembangan_rabun_dekat"},
42
+ {"text": "Gimana biar mata gak kering pas di AC?", "true_intent": "pencegahan_mata_kering"},
43
+ {"text": "Mata kering itu dicegah gimana?", "true_intent": "pencegahan_mata_kering"},
44
+ {"text": "Anak saya suka menyipit, butuh kacamata gak?", "true_intent": "tanda_anak_butuh_kacamata"},
45
+ {"text": "Gimana tahu anak perlu kacamata?", "true_intent": "tanda_anak_butuh_kacamata"},
46
+ {"text": "Astigmatisme sama silinder itu sama gak?", "true_intent": "definisi_astigmatisme"},
47
+ {"text": "Apa itu astigmatisme?", "true_intent": "definisi_astigmatisme"},
48
+ {"text": "Latihan mata apa yang bagus?", "true_intent": "latihan_mata"},
49
+ {"text": "Gimana latih mata biar gak buram?", "true_intent": "latihan_mata"},
50
+ {"text": "Bagaimana mencegah infeksi pada mata?", "true_intent": "pencegahan_infeksi_mata"},
51
+ {"text": "Mata gatal bisa dicegah gimana?", "true_intent": "pencegahan_infeksi_mata"},
52
+ {"text": "Apa tanda-tanda katarak di mata?", "true_intent": "gejala_katarak"},
53
+ {"text": "Kenapa mata saya suka buram?", "true_intent": "gejala_katarak"},
54
+ {"text": "Mata merah itu kenapa ya?", "true_intent": "gejala_mata_merah"},
55
+ {"text": "Apa penyebab mata gatal dan merah?", "true_intent": "gejala_mata_merah"},
56
+ {"text": "Kacamata bantu rabun jauh gak?", "true_intent": "efektivitas_kacamata"},
57
+ {"text": "Seberapa efektif kacamata buat mata buram?", "true_intent": "efektivitas_kacamata"},
58
+ {"text": "Hai, apa kabar?", "true_intent": "sapaan"},
59
+ {"text": "Halo, bisa bantu apa?", "true_intent": "sapaan"},
60
+ {"text": "Apa itu mobil?", "true_intent": "notfound"},
61
+ {"text": "Berapa harga apel?", "true_intent": "notfound"},
62
+ {"text": "Mata saya kenapa ya?", "true_intent": "notfound"},
63
+ {"text": "Apa gejala flu?", "true_intent": "notfound"}
64
+ ]
indobert_model/config.json ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_num_labels": 5,
3
+ "architectures": [
4
+ "BertForSequenceClassification"
5
+ ],
6
+ "attention_probs_dropout_prob": 0.1,
7
+ "classifier_dropout": null,
8
+ "directionality": "bidi",
9
+ "hidden_act": "gelu",
10
+ "hidden_dropout_prob": 0.1,
11
+ "hidden_size": 768,
12
+ "id2label": {
13
+ "0": "LABEL_0",
14
+ "1": "LABEL_1",
15
+ "2": "LABEL_2",
16
+ "3": "LABEL_3",
17
+ "4": "LABEL_4",
18
+ "5": "LABEL_5",
19
+ "6": "LABEL_6",
20
+ "7": "LABEL_7",
21
+ "8": "LABEL_8",
22
+ "9": "LABEL_9",
23
+ "10": "LABEL_10",
24
+ "11": "LABEL_11",
25
+ "12": "LABEL_12",
26
+ "13": "LABEL_13",
27
+ "14": "LABEL_14",
28
+ "15": "LABEL_15",
29
+ "16": "LABEL_16",
30
+ "17": "LABEL_17",
31
+ "18": "LABEL_18",
32
+ "19": "LABEL_19",
33
+ "20": "LABEL_20",
34
+ "21": "LABEL_21",
35
+ "22": "LABEL_22",
36
+ "23": "LABEL_23",
37
+ "24": "LABEL_24",
38
+ "25": "LABEL_25",
39
+ "26": "LABEL_26",
40
+ "27": "LABEL_27",
41
+ "28": "LABEL_28",
42
+ "29": "LABEL_29",
43
+ "30": "LABEL_30",
44
+ "31": "LABEL_31",
45
+ "32": "LABEL_32",
46
+ "33": "LABEL_33"
47
+ },
48
+ "initializer_range": 0.02,
49
+ "intermediate_size": 3072,
50
+ "label2id": {
51
+ "LABEL_0": 0,
52
+ "LABEL_1": 1,
53
+ "LABEL_10": 10,
54
+ "LABEL_11": 11,
55
+ "LABEL_12": 12,
56
+ "LABEL_13": 13,
57
+ "LABEL_14": 14,
58
+ "LABEL_15": 15,
59
+ "LABEL_16": 16,
60
+ "LABEL_17": 17,
61
+ "LABEL_18": 18,
62
+ "LABEL_19": 19,
63
+ "LABEL_2": 2,
64
+ "LABEL_20": 20,
65
+ "LABEL_21": 21,
66
+ "LABEL_22": 22,
67
+ "LABEL_23": 23,
68
+ "LABEL_24": 24,
69
+ "LABEL_25": 25,
70
+ "LABEL_26": 26,
71
+ "LABEL_27": 27,
72
+ "LABEL_28": 28,
73
+ "LABEL_29": 29,
74
+ "LABEL_3": 3,
75
+ "LABEL_30": 30,
76
+ "LABEL_31": 31,
77
+ "LABEL_32": 32,
78
+ "LABEL_33": 33,
79
+ "LABEL_4": 4,
80
+ "LABEL_5": 5,
81
+ "LABEL_6": 6,
82
+ "LABEL_7": 7,
83
+ "LABEL_8": 8,
84
+ "LABEL_9": 9
85
+ },
86
+ "layer_norm_eps": 1e-12,
87
+ "max_position_embeddings": 512,
88
+ "model_type": "bert",
89
+ "num_attention_heads": 12,
90
+ "num_hidden_layers": 12,
91
+ "output_past": true,
92
+ "pad_token_id": 0,
93
+ "pooler_fc_size": 768,
94
+ "pooler_num_attention_heads": 12,
95
+ "pooler_num_fc_layers": 3,
96
+ "pooler_size_per_head": 128,
97
+ "pooler_type": "first_token_transform",
98
+ "position_embedding_type": "absolute",
99
+ "problem_type": "single_label_classification",
100
+ "torch_dtype": "float32",
101
+ "transformers_version": "4.51.3",
102
+ "type_vocab_size": 2,
103
+ "use_cache": true,
104
+ "vocab_size": 50000
105
+ }
indobert_model/model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8e0489a65c9d666c90df08851138221e3ad46b699930f57017a13082947c7017
3
+ size 497893504
indobert_model/special_tokens_map.json ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ {
2
+ "cls_token": "[CLS]",
3
+ "mask_token": "[MASK]",
4
+ "pad_token": "[PAD]",
5
+ "sep_token": "[SEP]",
6
+ "unk_token": "[UNK]"
7
+ }
indobert_model/tokenizer.json ADDED
The diff for this file is too large to render. See raw diff
 
indobert_model/tokenizer_config.json ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "added_tokens_decoder": {
3
+ "0": {
4
+ "content": "[PAD]",
5
+ "lstrip": false,
6
+ "normalized": false,
7
+ "rstrip": false,
8
+ "single_word": false,
9
+ "special": true
10
+ },
11
+ "1": {
12
+ "content": "[UNK]",
13
+ "lstrip": false,
14
+ "normalized": false,
15
+ "rstrip": false,
16
+ "single_word": false,
17
+ "special": true
18
+ },
19
+ "2": {
20
+ "content": "[CLS]",
21
+ "lstrip": false,
22
+ "normalized": false,
23
+ "rstrip": false,
24
+ "single_word": false,
25
+ "special": true
26
+ },
27
+ "3": {
28
+ "content": "[SEP]",
29
+ "lstrip": false,
30
+ "normalized": false,
31
+ "rstrip": false,
32
+ "single_word": false,
33
+ "special": true
34
+ },
35
+ "4": {
36
+ "content": "[MASK]",
37
+ "lstrip": false,
38
+ "normalized": false,
39
+ "rstrip": false,
40
+ "single_word": false,
41
+ "special": true
42
+ }
43
+ },
44
+ "clean_up_tokenization_spaces": true,
45
+ "cls_token": "[CLS]",
46
+ "do_basic_tokenize": true,
47
+ "do_lower_case": true,
48
+ "extra_special_tokens": {},
49
+ "mask_token": "[MASK]",
50
+ "model_max_length": 1000000000000000019884624838656,
51
+ "never_split": null,
52
+ "pad_token": "[PAD]",
53
+ "sep_token": "[SEP]",
54
+ "strip_accents": null,
55
+ "tokenize_chinese_chars": true,
56
+ "tokenizer_class": "BertTokenizer",
57
+ "unk_token": "[UNK]"
58
+ }
indobert_model/vocab.txt ADDED
The diff for this file is too large to render. See raw diff
 
loss_curve.png ADDED
requirements.txt ADDED
Binary file (1.18 kB). View file
 
static/css/style.css ADDED
@@ -0,0 +1,222 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ body {
2
+ font-family: 'Arial', sans-serif;
3
+ background-color: #f0f4f8;
4
+ margin: 0;
5
+ padding: 0;
6
+ color: #333;
7
+ }
8
+
9
+ .navbar {
10
+ background-color: #ffffff;
11
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
12
+ padding: 15px 0;
13
+ display: flex;
14
+ justify-content: space-between;
15
+ align-items: center;
16
+ }
17
+
18
+ .navbar-brand {
19
+ font-size: 24px;
20
+ font-weight: bold;
21
+ color: #007bff;
22
+ margin-left: 20px;
23
+ }
24
+
25
+ .navbar-menu {
26
+ list-style-type: none;
27
+ margin: 0;
28
+ padding: 0;
29
+ display: flex;
30
+ margin-right: 20px;
31
+ }
32
+
33
+ .navbar-menu li {
34
+ margin: 0 15px;
35
+ }
36
+
37
+ .navbar-menu li a {
38
+ text-decoration: none;
39
+ color: #333;
40
+ font-weight: bold;
41
+ transition: color 0.3s;
42
+ }
43
+
44
+ .navbar-menu li a:hover {
45
+ color: #007bff;
46
+ }
47
+
48
+ .container {
49
+ max-width: 800px;
50
+ margin: 20px auto;
51
+ padding: 0 20px;
52
+ }
53
+
54
+ h1 {
55
+ text-align: center;
56
+ color: #007bff;
57
+ margin-bottom: 20px;
58
+ }
59
+
60
+ .chatbox {
61
+ background-color: #ffffff;
62
+ border-radius: 10px;
63
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
64
+ padding: 20px;
65
+ height: 500px;
66
+ display: flex;
67
+ flex-direction: column;
68
+ }
69
+
70
+ .chatlog {
71
+ flex: 1;
72
+ overflow-y: auto;
73
+ padding: 10px;
74
+ border-bottom: 1px solid #ddd;
75
+ margin-bottom: 20px;
76
+ }
77
+
78
+ .chat-message {
79
+ margin-bottom: 15px;
80
+ display: flex;
81
+ flex-direction: column;
82
+ opacity: 0;
83
+ animation: fadeIn 0.3s ease-in forwards;
84
+ }
85
+
86
+ @keyframes fadeIn {
87
+ from {
88
+ opacity: 0;
89
+ transform: translateY(10px);
90
+ }
91
+ to {
92
+ opacity: 1;
93
+ transform: translateY(0);
94
+ }
95
+ }
96
+
97
+ .user-message {
98
+ align-items: flex-end;
99
+ }
100
+
101
+ .bot-message {
102
+ align-items: flex-start;
103
+ }
104
+
105
+ .message-sender {
106
+ font-weight: bold;
107
+ color: #007bff;
108
+ }
109
+
110
+ .message-text {
111
+ background-color: #e9ecef;
112
+ padding: 10px 15px;
113
+ border-radius: 15px;
114
+ display: inline-block;
115
+ max-width: 70%;
116
+ word-wrap: break-word;
117
+ }
118
+
119
+ .user-message .message-text {
120
+ background-color: #007bff;
121
+ color: #ffffff;
122
+ }
123
+
124
+ .chat-input {
125
+ display: flex;
126
+ gap: 10px;
127
+ }
128
+
129
+ .chat-input input {
130
+ flex: 1;
131
+ padding: 10px;
132
+ border: 1px solid #ddd;
133
+ border-radius: 5px;
134
+ font-size: 16px;
135
+ outline: none;
136
+ }
137
+
138
+ .chat-input button {
139
+ padding: 10px 20px;
140
+ background-color: #007bff;
141
+ color: #ffffff;
142
+ border: none;
143
+ border-radius: 5px;
144
+ cursor: pointer;
145
+ transition: background-color 0.3s;
146
+ }
147
+
148
+ .chat-input button:hover {
149
+ background-color: #0056b3;
150
+ }
151
+
152
+ .clear-button {
153
+ padding: 10px 20px;
154
+ background-color: #dc3545;
155
+ color: #ffffff;
156
+ border: none;
157
+ border-radius: 5px;
158
+ cursor: pointer;
159
+ transition: background-color 0.3s;
160
+ margin-top: 10px;
161
+ align-self: center;
162
+ }
163
+
164
+ .clear-button:hover {
165
+ background-color: #c82333;
166
+ }
167
+
168
+ .typing-indicator {
169
+ color: #777;
170
+ font-style: italic;
171
+ margin-bottom: 15px;
172
+ }
173
+
174
+ .accuracy-box {
175
+ background-color: #ffffff;
176
+ border-radius: 10px;
177
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
178
+ padding: 20px;
179
+ margin-bottom: 20px;
180
+ }
181
+
182
+ .accuracy-box p {
183
+ margin: 10px 0;
184
+ font-size: 18px;
185
+ }
186
+
187
+ .accuracy-box p strong {
188
+ color: #007bff;
189
+ }
190
+
191
+ .classification-report {
192
+ background-color: #ffffff;
193
+ border-radius: 10px;
194
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
195
+ padding: 20px;
196
+ font-size: 14px;
197
+ white-space: pre-wrap;
198
+ }
199
+
200
+ .predicted-tag {
201
+ font-style: italic;
202
+ color: #555;
203
+ margin-left: 10px;
204
+ }
205
+
206
+ .toggle-probs {
207
+ background-color: #f0f0f0;
208
+ border: none;
209
+ padding: 5px 10px;
210
+ cursor: pointer;
211
+ margin-left: 10px;
212
+ border-radius: 5px;
213
+ }
214
+
215
+ .probabilities {
216
+ margin-top: 5px;
217
+ padding: 10px;
218
+ background-color: #f9f9f9;
219
+ border: 1px solid #ddd;
220
+ font-size: 0.9em;
221
+ border-radius: 5px;
222
+ }
static/js/app.js ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ function sendMessage() {
2
+ const userInput = document.getElementById('userInput');
3
+ const chatlog = document.getElementById('chatlog');
4
+ const messageText = userInput.value.trim();
5
+
6
+ if (messageText === '') return;
7
+
8
+ // Tambahkan pesan pengguna ke chatlog
9
+ const userMessage = document.createElement('div');
10
+ userMessage.className = 'chat-message user-message';
11
+ userMessage.innerHTML = `
12
+ <span class="message-sender">Anda:</span>
13
+ <span class="message-text">${messageText}</span>
14
+ `;
15
+ chatlog.appendChild(userMessage);
16
+
17
+ // Tambahkan indikator "sedang mengetik"
18
+ const typingIndicator = document.createElement('div');
19
+ typingIndicator.className = 'chat-message bot-message typing-indicator';
20
+ typingIndicator.innerHTML = `
21
+ <span class="message-sender">EyeBot:</span>
22
+ <span class="message-text">Sedang mengetik...</span>
23
+ `;
24
+ chatlog.appendChild(typingIndicator);
25
+
26
+ // Scroll ke bawah
27
+ chatlog.scrollTop = chatlog.scrollHeight;
28
+
29
+ // Kirim pesan ke server
30
+ fetch('/predict', {
31
+ method: 'POST',
32
+ headers: {
33
+ 'Content-Type': 'application/json'
34
+ },
35
+ body: JSON.stringify({ message: messageText })
36
+ })
37
+ .then(response => response.json())
38
+ // .then(data => {
39
+ // // Hapus indikator "sedang mengetik"
40
+ // chatlog.removeChild(typingIndicator);
41
+
42
+ // // Tambahkan respons bot ke chatlog
43
+ // const botMessage = document.createElement('div');
44
+ // botMessage.className = 'chat-message bot-message';
45
+ // botMessage.innerHTML = `
46
+ // <span class="message-sender">EyeBot:</span>
47
+ // <span class="message-text">${data.answer}</span>
48
+ // `;
49
+ // chatlog.appendChild(botMessage);
50
+
51
+ // // Scroll ke bawah
52
+ // chatlog.scrollTop = chatlog.scrollHeight;
53
+ // })
54
+ .then(data => {
55
+ // Hapus indikator "sedang mengetik"
56
+ chatlog.removeChild(typingIndicator);
57
+
58
+ // Tambahkan respons bot ke chatlog
59
+ const botMessage = document.createElement('div');
60
+ botMessage.className = 'chat-message bot-message';
61
+ botMessage.innerHTML = `
62
+ <span class="message-sender">EyeBot:</span>
63
+ <span class="message-text">${data.answer}</span>
64
+ <span class="predicted-tag">Predicted Tag: ${data.predicted_tag} (${data.probabilities[data.predicted_tag].toFixed(4)})</span>
65
+ <button class="toggle-probs">Show Probabilities</button>
66
+ <div class="probabilities" style="display: none;">
67
+ Probabilities for each tag:<br>
68
+ ${Object.entries(data.probabilities).map(([tag, prob]) => `Tag: ${tag}, Prob: ${prob.toFixed(4)}`).join('<br>')}
69
+ <br>Max Prob: ${data.probabilities[data.predicted_tag].toFixed(4)}, Predicted Tag: ${data.predicted_tag}
70
+ </div>
71
+ `;
72
+ chatlog.appendChild(botMessage);
73
+
74
+ // Tambahkan event listener untuk tombol toggle
75
+ const toggleButton = botMessage.querySelector('.toggle-probs');
76
+ const probsDiv = botMessage.querySelector('.probabilities');
77
+ toggleButton.addEventListener('click', () => {
78
+ if (probsDiv.style.display === 'none') {
79
+ probsDiv.style.display = 'block';
80
+ toggleButton.textContent = 'Hide Probabilities';
81
+ } else {
82
+ probsDiv.style.display = 'none';
83
+ toggleButton.textContent = 'Show Probabilities';
84
+ }
85
+ });
86
+
87
+ // Scroll ke bawah
88
+ chatlog.scrollTop = chatlog.scrollHeight;
89
+ })
90
+ .catch(error => {
91
+ console.error('Error:', error);
92
+ // Hapus indikator "sedang mengetik"
93
+ chatlog.removeChild(typingIndicator);
94
+
95
+ const errorMessage = document.createElement('div');
96
+ errorMessage.className = 'chat-message bot-message';
97
+ errorMessage.innerHTML = `
98
+ <span class="message-sender">EyeBot:</span>
99
+ <span class="message-text">Maaf, terjadi kesalahan. Silakan coba lagi.</span>
100
+ `;
101
+ chatlog.appendChild(errorMessage);
102
+
103
+ // Scroll ke bawah
104
+ chatlog.scrollTop = chatlog.scrollHeight;
105
+ });
106
+
107
+ // Kosongkan input
108
+ userInput.value = '';
109
+ }
110
+
111
+ function clearChat() {
112
+ const chatlog = document.getElementById('chatlog');
113
+ chatlog.innerHTML = `
114
+ <div class="chat-message bot-message">
115
+ <span class="message-sender">EyeBot:</span>
116
+ <span class="message-text">Halo! Saya EyeBot, siap membantu Anda dengan informasi kesehatan mata. Apa yang bisa saya bantu?</span>
117
+ </div>
118
+ `;
119
+ }
120
+
templates/accuracy.html ADDED
@@ -0,0 +1,130 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="id">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>EyeBot - Akurasi Model</title>
7
+ <style>
8
+ body {
9
+ font-family: 'Arial', sans-serif;
10
+ background-color: #f0f4f8;
11
+ margin: 0;
12
+ padding: 0;
13
+ color: #333;
14
+ }
15
+ .container {
16
+ max-width: 800px;
17
+ margin: 20px auto;
18
+ padding: 20px;
19
+ background-color: #ffffff;
20
+ border-radius: 10px;
21
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
22
+ }
23
+ h1 {
24
+ text-align: center;
25
+ color: #007bff;
26
+ margin-bottom: 20px;
27
+ }
28
+ h2 {
29
+ color: #007bff;
30
+ margin-top: 20px;
31
+ }
32
+ p {
33
+ line-height: 1.6;
34
+ }
35
+ table {
36
+ width: 100%;
37
+ border-collapse: collapse;
38
+ margin-top: 20px;
39
+ }
40
+ th, td {
41
+ padding: 10px;
42
+ text-align: left;
43
+ border-bottom: 1px solid #ddd;
44
+ }
45
+ th {
46
+ background-color: #f0f4f8;
47
+ }
48
+ .classification-report {
49
+ background-color: #f9f9f9;
50
+ padding: 10px;
51
+ border-radius: 5px;
52
+ margin-top: 20px;
53
+ white-space: pre-wrap;
54
+ }
55
+ .classification-report table {
56
+ width: 100%;
57
+ border-collapse: collapse;
58
+ margin-top: 10px;
59
+ }
60
+
61
+ .classification-report th,
62
+ .classification-report td {
63
+ padding: 10px;
64
+ text-align: left;
65
+ border-bottom: 1px solid #ddd;
66
+ }
67
+
68
+ .classification-report th {
69
+ background-color: #f0f4f8;
70
+ font-weight: bold;
71
+ }
72
+ </style>
73
+ </head>
74
+ <body>
75
+ <div class="container">
76
+ <h1>Akurasi Model EyeBot</h1>
77
+ <p>Berikut adalah hasil evaluasi kinerja model EyeBot berdasarkan metrik evaluasi seperti akurasi, presisi, recall, dan F1-score dari dataset test_dataset.json.</p>
78
+
79
+ <h2>Hasil Evaluasi</h2>
80
+ <table>
81
+ <tr>
82
+ <th>Metrik</th>
83
+ <th>Nilai</th>
84
+ </tr>
85
+ <tr>
86
+ <td>Akurasi</td>
87
+ <td>{{ evaluation.accuracy | round(4) }}</td>
88
+ </tr>
89
+ <tr>
90
+ <td>Presisi</td>
91
+ <td>{{ evaluation.precision | round(4) }}</td>
92
+ </tr>
93
+ <tr>
94
+ <td>Recall</td>
95
+ <td>{{ evaluation.recall | round(4) }}</td>
96
+ </tr>
97
+ <tr>
98
+ <td>F1-Score</td>
99
+ <td>{{ evaluation.f1_score | round(4) }}</td>
100
+ </tr>
101
+ </table>
102
+
103
+ <h2>Laporan Klasifikasi</h2>
104
+ <p>Laporan klasifikasi menampilkan metrik evaluasi untuk setiap kelas dalam model, seperti presisi, recall, F1-score, dan support. Ini membantu memahami performa model secara detail.</p>
105
+ <div class="classification-report">
106
+ <table>
107
+ <thead>
108
+ <tr>
109
+ <th>Kelas</th>
110
+ <th>Presisi</th>
111
+ <th>Recall</th>
112
+ <th>F1-Score</th>
113
+ <th>Support</th>
114
+ </tr>
115
+ </thead>
116
+ <tbody>
117
+ <!-- Data laporan klasifikasi akan diisi di sini -->
118
+ {{ evaluation.classification_report | safe }}
119
+ </tbody>
120
+ </table>
121
+ </div>
122
+
123
+ <h2>Penjelasan Metrik Evaluasi</h2>
124
+ <p><strong>Akurasi:</strong> Mengukur proporsi prediksi yang benar dari seluruh prediksi yang dibuat oleh model. Semakin tinggi akurasi, semakin baik model dalam mengklasifikasikan data secara keseluruhan.</p>
125
+ <p><strong>Presisi:</strong> Mengukur seberapa akurat prediksi positif yang dibuat model. Ini adalah rasio prediksi positif yang benar terhadap total prediksi positif.</p>
126
+ <p><strong>Recall:</strong> Mengukur kemampuan model untuk mendeteksi semua instance positif yang sebenarnya ada.</p>
127
+ <p><strong>F1-Score:</strong> Rata-rata harmonik dari presisi dan recall, memberikan keseimbangan antara keduanya ketika distribusi kelas tidak seimbang.</p>
128
+ </div>
129
+ </body>
130
+ </html>
templates/base.html ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>EyeBot - Chatbot Kesehatan Mata</title>
7
+ <link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
8
+ <script src="{{ url_for('static', filename='js/app.js') }}" defer></script>
9
+ </head>
10
+ <body>
11
+ <nav class="navbar">
12
+ <div class="navbar-brand">EyeBot</div>
13
+ <ul class="navbar-menu">
14
+ <li><a href="/">Chatbot</a></li>
15
+ <li><a href="/accuracy">Akurasi Model</a></li>
16
+ </ul>
17
+ </nav>
18
+ <div class="container">
19
+ <h1>EyeBot - Chatbot Kesehatan Mata Menggunakan IndoBert</h1>
20
+ <div class="chatbox">
21
+ <div class="chatlog" id="chatlog">
22
+ <div class="chat-message bot-message">
23
+ <span class="message-sender">EyeBot:</span>
24
+ <span class="message-text">Halo! Saya EyeBot, siap membantu Anda dengan informasi kesehatan mata. Apa yang bisa saya bantu?</span>
25
+ </div>
26
+ </div>
27
+ <div class="chat-input">
28
+ <input type="text" id="userInput" placeholder="Ketik pesan Anda..." onkeypress="if(event.key === 'Enter') sendMessage()">
29
+ <button onclick="sendMessage()">Kirim</button>
30
+ </div>
31
+ <button class="clear-button" onclick="clearChat()">Hapus Chat</button>
32
+ </div>
33
+ </div>
34
+ </body>
35
+ </html>
test_dataset.json ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {"text": "Apa saja gejala awal katarak?", "true_intent": "gejala_katarak"},
3
+ {"text": "Bagaimana cara mencegah mata kering saat bekerja di depan komputer?", "true_intent": "pencegahan_mata_kering"},
4
+ {"text": "Apakah rabun jauh bisa disembuhkan dengan operasi?", "true_intent": "pengobatan_rabun_jauh"},
5
+ {"text": "Apa penyebab utama glaukoma?", "true_intent": "penyebab_glaukoma"},
6
+ {"text": "Bagaimana cara merawat mata setelah operasi katarak?", "true_intent": "perawatan_pasca_operasi"},
7
+ {"text": "Apakah penggunaan gadget berlebihan bisa merusak mata?", "true_intent": "dampak_gadget"},
8
+ {"text": "Apa perbedaan antara rabun dekat dan rabun jauh?", "true_intent": "perbedaan_rabun"},
9
+ {"text": "Bagaimana cara memilih kacamata yang tepat untuk anak-anak?", "true_intent": "pemilihan_kacamata_anak"},
10
+ {"text": "Apakah ada makanan yang baik untuk kesehatan mata?", "true_intent": "nutrisi_mata"},
11
+ {"text": "Apa yang harus dilakukan jika mata terasa gatal dan merah?", "true_intent": "gejala_mata_merah"},
12
+ {"text": "Bagaimana cara mengatasi mata lelah setelah seharian bekerja?", "true_intent": "pencegahan_mata_lelah"},
13
+ {"text": "Apakah kacamata anti-radiasi benar-benar efektif?", "true_intent": "efektivitas_kacamata"},
14
+ {"text": "Apa saja tanda-tanda bahwa saya perlu memeriksakan mata ke dokter?", "true_intent": "tanda_periksa_mata"},
15
+ {"text": "Bagaimana cara membersihkan lensa kontak dengan benar?", "true_intent": "perawatan_lensa_kontak"},
16
+ {"text": "Apakah mata minus bisa berkurang dengan latihan mata?", "true_intent": "pengobatan_mata_minus"},
17
+ {"text": "Apa yang dimaksud dengan astigmatisme?", "true_intent": "definisi_astigmatisme"},
18
+ {"text": "Bagaimana cara mencegah infeksi mata?", "true_intent": "pencegahan_infeksi_mata"},
19
+ {"text": "Apakah terlalu sering membaca di tempat gelap berbahaya untuk mata?", "true_intent": "dampak_pencahayaan"},
20
+ {"text": "Apa saja gejala mata silinder?", "true_intent": "gejala_mata_silinder"},
21
+ {"text": "Bagaimana cara mengurangi risiko terkena katarak?", "true_intent": "pencegahan_katarak"},
22
+ {"text": "Apakah ada cara alami untuk mengobati mata minus?", "true_intent": "pengobatan_alami_mata_minus"},
23
+ {"text": "Apa yang harus dilakukan jika ada benda asing masuk ke mata?", "true_intent": "pertolongan_benda_asing"},
24
+ {"text": "Bagaimana cara merawat mata bagi penderita diabetes?", "true_intent": "perawatan_mata_diabetes"},
25
+ {"text": "Apakah penggunaan tetes mata setiap hari aman?", "true_intent": "keamanan_tetes_mata"},
26
+ {"text": "Apa saja jenis-jenis operasi mata yang umum dilakukan?", "true_intent": "jenis_operasi_mata"},
27
+ {"text": "Bagaimana cara mengetahui apakah anak saya butuh kacamata?", "true_intent": "tanda_anak_butuh_kacamata"},
28
+ {"text": "Apakah mata bisa sembuh dari rabun dekat seiring bertambahnya usia?", "true_intent": "perkembangan_rabun_dekat"},
29
+ {"text": "Apa yang dimaksud dengan degenerasi makula?", "true_intent": "definisi_degenerasi_makula"},
30
+ {"text": "Bagaimana cara mencegah mata dari paparan sinar UV?", "true_intent": "pencegahan_sinar_uv"},
31
+ {"text": "Apakah ada latihan mata yang bisa memperbaiki penglihatan?", "true_intent": "latihan_mata"}
32
+ ]
train_indobert.py ADDED
@@ -0,0 +1,207 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from transformers import AutoTokenizer, AutoModelForSequenceClassification
2
+ from torch.utils.data import Dataset, DataLoader
3
+ import json
4
+ import torch
5
+ from sklearn.model_selection import train_test_split
6
+ from sklearn.metrics import precision_recall_fscore_support, classification_report
7
+ import numpy as np
8
+ import matplotlib.pyplot as plt
9
+
10
+ # Load dataset pelatihan dari datasets_new.json
11
+ with open('datasets_new.json', 'r') as f:
12
+ datasets = json.load(f)
13
+
14
+ texts = []
15
+ labels = []
16
+ tags = sorted(set(dataset['tag'] for dataset in datasets['intents']))
17
+
18
+ for dataset in datasets['intents']:
19
+ for pattern in dataset['patterns']:
20
+ texts.append(pattern)
21
+ labels.append(tags.index(dataset['tag']))
22
+
23
+ # Logging distribusi kelas sebelum pemisahan data
24
+ label_counts = np.bincount(labels)
25
+ print("Distribusi kelas sebelum pemisahan data:")
26
+ for tag, count in zip(tags, label_counts):
27
+ print(f"Tag: {tag}, Jumlah sampel: {count}")
28
+
29
+ # Split data menjadi train dan val
30
+ texts_train, texts_val, labels_train, labels_val = train_test_split(
31
+ texts, labels, test_size=0.2, random_state=42, stratify=labels
32
+ )
33
+
34
+ # Logging distribusi kelas setelah pemisahan
35
+ val_label_counts = np.bincount(labels_val, minlength=len(tags))
36
+ print("\nDistribusi kelas di data validasi:")
37
+ for tag, count in zip(tags, val_label_counts):
38
+ print(f"Tag: {tag}, Jumlah sampel: {count}")
39
+
40
+ # Load dataset pengujian dari test_dataset.json
41
+ with open('test_dataset.json', 'r') as f:
42
+ test_data = json.load(f)
43
+
44
+ # Ekstrak teks dan intent yang benar
45
+ texts_test = [item['text'] for item in test_data]
46
+ true_intents = [item['true_intent'] for item in test_data]
47
+
48
+ # Konversi intent ke indeks label berdasarkan tags
49
+ labels_test = [tags.index(intent) for intent in true_intents if intent in tags]
50
+
51
+ # Periksa apakah ada intent yang tidak ada dalam tags
52
+ missing_intents = set(true_intents) - set(tags)
53
+ if missing_intents:
54
+ print(f"Peringatan: Intent {missing_intents} tidak ditemukan dalam tags. Pastikan datasets_new.json mencakup semua intent.")
55
+
56
+ # Inisialisasi tokenizer dan model
57
+ tokenizer = AutoTokenizer.from_pretrained("indobenchmark/indobert-base-p1")
58
+ model = AutoModelForSequenceClassification.from_pretrained("indobenchmark/indobert-base-p1", num_labels=len(tags))
59
+
60
+ class IndoBERTDataset(Dataset):
61
+ def __init__(self, texts, labels):
62
+ self.texts = texts
63
+ self.labels = labels
64
+
65
+ def __getitem__(self, idx):
66
+ encoding = tokenizer(self.texts[idx], padding='max_length', truncation=True, max_length=20, return_tensors='pt')
67
+ return {
68
+ 'input_ids': encoding['input_ids'].squeeze(),
69
+ 'attention_mask': encoding['attention_mask'].squeeze(),
70
+ 'labels': torch.tensor(self.labels[idx], dtype=torch.long)
71
+ }
72
+
73
+ def __len__(self):
74
+ return len(self.texts)
75
+
76
+ # Buat dataset dan dataloader untuk train, val, dan test
77
+ train_dataset = IndoBERTDataset(texts_train, labels_train)
78
+ val_dataset = IndoBERTDataset(texts_val, labels_val)
79
+ test_dataset = IndoBERTDataset(texts_test, labels_test)
80
+
81
+ train_loader = DataLoader(train_dataset, batch_size=8, shuffle=True)
82
+ val_loader = DataLoader(val_dataset, batch_size=8)
83
+ test_loader = DataLoader(test_dataset, batch_size=8)
84
+
85
+ # Pelatihan
86
+ device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
87
+ model.to(device)
88
+ optimizer = torch.optim.AdamW(model.parameters(), lr=1e-5)
89
+
90
+ num_epochs = 10
91
+ best_val_loss = float('inf')
92
+ patience = 3
93
+ counter = 0
94
+
95
+ # Lists untuk menyimpan loss pelatihan dan validasi
96
+ train_losses = []
97
+ val_losses = []
98
+
99
+ for epoch in range(num_epochs):
100
+ model.train()
101
+ train_loss_epoch = 0
102
+ for batch in train_loader:
103
+ inputs = {k: v.to(device) for k, v in batch.items() if k != 'labels'}
104
+ labels = batch['labels'].to(device)
105
+ outputs = model(**inputs, labels=labels)
106
+ loss = outputs.loss
107
+ train_loss_epoch += loss.item()
108
+ optimizer.zero_grad()
109
+ loss.backward()
110
+ optimizer.step()
111
+
112
+ # Hitung rata-rata loss pelatihan per epoch
113
+ train_loss_epoch /= len(train_loader)
114
+ train_losses.append(train_loss_epoch)
115
+
116
+ # Validasi
117
+ model.eval()
118
+ val_loss = 0
119
+ correct = 0
120
+ total = 0
121
+ all_preds = []
122
+ all_labels = []
123
+ with torch.no_grad():
124
+ for batch in val_loader:
125
+ inputs = {k: v.to(device) for k, v in batch.items() if k != 'labels'}
126
+ labels = batch['labels'].to(device)
127
+ outputs = model(**inputs, labels=labels)
128
+ val_loss += outputs.loss.item()
129
+ _, predicted = torch.max(outputs.logits, 1)
130
+ total += labels.size(0)
131
+ correct += (predicted == labels).sum().item()
132
+ all_preds.extend(predicted.cpu().numpy())
133
+ all_labels.extend(labels.cpu().numpy())
134
+
135
+ val_loss /= len(val_loader)
136
+ val_losses.append(val_loss)
137
+ val_accuracy = 100 * correct / total
138
+
139
+ # Hitung presisi, recall, dan F1-score untuk validasi
140
+ precision, recall, f1, _ = precision_recall_fscore_support(
141
+ all_labels, all_preds, average='weighted', zero_division=0
142
+ )
143
+ print(f'Epoch {epoch+1}, Train Loss: {train_loss_epoch:.4f}, Val Loss: {val_loss:.4f}, Val Accuracy: {val_accuracy:.2f}%')
144
+ print(f'Precision: {precision:.4f}, Recall: {recall:.4f}, F1-Score: {f1:.4f}')
145
+
146
+ # Laporan klasifikasi per tag untuk validasi
147
+ unique_labels = sorted(set(all_labels))
148
+ filtered_tags = [tags[i] for i in unique_labels]
149
+ print("\nValidation Classification Report:")
150
+ print(classification_report(all_labels, all_preds, labels=unique_labels, target_names=filtered_tags, zero_division=0))
151
+
152
+ # Early stopping
153
+ if val_loss < best_val_loss:
154
+ best_val_loss = val_loss
155
+ counter = 0
156
+ # Simpan model terbaik
157
+ model.save_pretrained("indobert_model")
158
+ tokenizer.save_pretrained("indobert_model")
159
+ else:
160
+ counter += 1
161
+ if counter >= patience:
162
+ print("Early stopping triggered")
163
+ break
164
+
165
+ # Evaluasi pada data uji dari test_dataset.json
166
+ model.eval()
167
+ test_correct = 0
168
+ test_total = 0
169
+ test_preds = []
170
+ test_labels = []
171
+ with torch.no_grad():
172
+ for batch in test_loader:
173
+ inputs = {k: v.to(device) for k, v in batch.items() if k != 'labels'}
174
+ labels = batch['labels'].to(device)
175
+ outputs = model(**inputs, labels=labels)
176
+ _, predicted = torch.max(outputs.logits, 1)
177
+ test_total += labels.size(0)
178
+ test_correct += (predicted == labels).sum().item()
179
+ test_preds.extend(predicted.cpu().numpy())
180
+ test_labels.extend(labels.cpu().numpy())
181
+
182
+ test_accuracy = 100 * test_correct / test_total
183
+ test_precision, test_recall, test_f1, _ = precision_recall_fscore_support(
184
+ test_labels, test_preds, average='weighted', zero_division=0
185
+ )
186
+
187
+ # Laporan klasifikasi untuk data uji
188
+ unique_test_labels = sorted(set(test_labels))
189
+ filtered_test_tags = [tags[i] for i in unique_test_labels]
190
+ print(f'\nTest Accuracy: {test_accuracy:.2f}%')
191
+ print(f'Test Precision: {test_precision:.4f}, Recall: {test_recall:.4f}, F1-Score: {test_f1:.4f}')
192
+ print("\nTest Classification Report:")
193
+ print(classification_report(test_labels, test_preds, labels=unique_test_labels, target_names=filtered_test_tags, zero_division=0))
194
+
195
+ print("Training Selesai. Best model disimpan di indobert_model/")
196
+
197
+ # Plot kurva loss
198
+ plt.figure(figsize=(10, 6))
199
+ plt.plot(range(1, len(train_losses) + 1), train_losses, label='Train Loss', marker='o')
200
+ plt.plot(range(1, len(val_losses) + 1), val_losses, label='Validation Loss', marker='s')
201
+ plt.xlabel('Epoch')
202
+ plt.ylabel('Loss')
203
+ plt.title('Kurva Penurunan Loss Pelatihan dan Validasi')
204
+ plt.legend()
205
+ plt.grid(True)
206
+ plt.savefig('loss_curve.png')
207
+ plt.show()