atsnetwork commited on
Commit
d5d4e8c
·
verified ·
1 Parent(s): f568f6a

sama seperti sebelumnya

Browse files
Files changed (1) hide show
  1. app.py +27 -15
app.py CHANGED
@@ -6,7 +6,7 @@ import numpy as np # Import numpy jika belum ada
6
  # --- 1. Inisialisasi Model dan Tokenizer (Dilakukan Sekali Saat Aplikasi Dimulai) ---
7
  # Pastikan 'model_name' ini adalah model yang sudah kamu unggah ke Hugging Face Hub
8
  # atau model publik lain yang ingin kamu gunakan.
9
- model_name = "atsnetwork/my-custom-tinyllama-chatbot"
10
  model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.float16, device_map="auto")
11
  tokenizer = AutoTokenizer.from_pretrained(model_name)
12
  tokenizer.pad_token = tokenizer.eos_token # Pastikan token padding diatur
@@ -14,7 +14,7 @@ tokenizer.padding_side = "right" # Penting untuk efisiensi saat memproses sequen
14
 
15
  # --- 2. Fungsi Pemroses Utama untuk Chatbot (Dipanggil Oleh Gradio) ---
16
  # Fungsi ini mengintegrasikan logika inferensi dan analisis developer info
17
- def generate_response_with_dev_info(prompt, max_new_tokens=100, temperature=0.7, top_k=50):
18
  formatted_prompt = f"<s>[INST] {prompt} [/INST]"
19
  inputs = tokenizer(formatted_prompt, return_tensors="pt").to(model.device)
20
 
@@ -44,24 +44,36 @@ def generate_response_with_dev_info(prompt, max_new_tokens=100, temperature=0.7,
44
  else:
45
  answer = generated_text.strip() # Fallback jika format tidak ditemukan
46
 
47
- # --- Analisis Konfidensi Berbasis Probabilitas Token ---
48
- avg_max_prob = 0
49
  total_generated_tokens = 0
50
  if outputs.scores:
51
- # Menghitung rata-rata probabilitas token tertinggi
52
  for score_tensor in outputs.scores:
53
  probabilities = torch.softmax(score_tensor, dim=-1)
54
- max_prob = torch.max(probabilities).item()
55
- avg_max_prob += max_prob
 
 
56
  total_generated_tokens += 1
57
 
58
  if total_generated_tokens > 0:
59
- avg_max_prob /= total_generated_tokens
60
-
61
- confidence_threshold = 0.5 # Ambang batas konfidensi rata-rata (bisa disesuaikan)
62
- confidence_status = "HIGH_CONFIDENCE"
63
- if avg_max_prob < confidence_threshold:
64
- confidence_status = "LOW_CONFIDENCE"
 
 
 
 
 
 
 
 
 
 
 
65
 
66
  # --- Analisis Frasa "Tidak Tahu" yang Dilatih ---
67
  is_explicitly_unknown = False
@@ -82,7 +94,7 @@ def generate_response_with_dev_info(prompt, max_new_tokens=100, temperature=0.7,
82
 
83
  # --- Gabungkan Informasi untuk Developer ---
84
  developer_info = {
85
- "confidence_score": f"{avg_max_prob:.4f}",
86
  "confidence_status": confidence_status,
87
  "explicit_unknown_phrase_detected": is_explicitly_unknown,
88
  "explicit_unknown_reason": explicit_unknown_reason if is_explicitly_unknown else "Tidak ada frasa 'tidak tahu' eksplisit.",
@@ -101,7 +113,7 @@ def gradio_interface_fn(prompt):
101
 
102
  # Format developer info untuk ditampilkan di Gradio
103
  dev_info_str = "--- Developer Info ---\n"
104
- dev_info_str += f"Confidence Score: {dev_info['confidence_score']} ({dev_info['confidence_status']})\n"
105
  dev_info_str += f"Explicit Unknown Phrase Detected: {dev_info['explicit_unknown_phrase_detected']}\n"
106
  dev_info_str += f"Reason: {dev_info['explicit_unknown_reason']}\n"
107
  # dev_info_str += f"Raw Generated Text: {dev_info['raw_generated_text']}\n"
 
6
  # --- 1. Inisialisasi Model dan Tokenizer (Dilakukan Sekali Saat Aplikasi Dimulai) ---
7
  # Pastikan 'model_name' ini adalah model yang sudah kamu unggah ke Hugging Face Hub
8
  # atau model publik lain yang ingin kamu gunakan.
9
+ model_name = "atsnetwork/my-custom-tinyllama-chatbot"
10
  model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.float16, device_map="auto")
11
  tokenizer = AutoTokenizer.from_pretrained(model_name)
12
  tokenizer.pad_token = tokenizer.eos_token # Pastikan token padding diatur
 
14
 
15
  # --- 2. Fungsi Pemroses Utama untuk Chatbot (Dipanggil Oleh Gradio) ---
16
  # Fungsi ini mengintegrasikan logika inferensi dan analisis developer info
17
+ def generate_response_with_dev_info(prompt, max_new_tokens=100, temperature=0.6, top_k=30):
18
  formatted_prompt = f"<s>[INST] {prompt} [/INST]"
19
  inputs = tokenizer(formatted_prompt, return_tensors="pt").to(model.device)
20
 
 
44
  else:
45
  answer = generated_text.strip() # Fallback jika format tidak ditemukan
46
 
47
+ # --- Analisis Konfidensi Berbasis ENTROPY (PENGGANTI avg_max_prob) ---
48
+ avg_entropy = 0
49
  total_generated_tokens = 0
50
  if outputs.scores:
 
51
  for score_tensor in outputs.scores:
52
  probabilities = torch.softmax(score_tensor, dim=-1)
53
+ # Menghitung entropy untuk setiap distribusi probabilitas
54
+ epsilon = 1e-9 # Tambahkan sedikit epsilon untuk menghindari log(0)
55
+ entropy = -torch.sum(probabilities * torch.log(probabilities + epsilon), dim=-1).item()
56
+ avg_entropy += entropy
57
  total_generated_tokens += 1
58
 
59
  if total_generated_tokens > 0:
60
+ avg_entropy /= total_generated_tokens
61
+ else:
62
+ # Jika tidak ada token yang dihasilkan setelah prompt (kasus jarang)
63
+ avg_entropy = float('inf')
64
+
65
+ # Batas ambang keyakinan (contoh) untuk ENTROPY
66
+ # Penting: Nilai ini HARUS ditentukan setelah analisis empiris pada modelmu.
67
+ # Nilai entropy yang lebih RENDAH berarti model lebih YAKIN.
68
+ # Nilai entropy yang lebih TINGGI berarti model lebih TIDAK YAKIN.
69
+ # Sebagai titik awal, kamu bisa coba sekitar 1.0 atau lebih,
70
+ # tetapi validasi empiris sangat dianjurkan.
71
+ entropy_threshold = 1.0 # <--- SESUAIKAN NILAI INI BERDASARKAN ANALISISMU!
72
+
73
+ if avg_entropy > entropy_threshold: # <--- Perhatikan operatornya berubah (lebih besar = LOW_CONFIDENCE)
74
+ confidence_status = "LOW_CONFIDENCE: Model mungkin tidak memiliki pola yang jelas (Entropy Tinggi)."
75
+ else:
76
+ confidence_status = "HIGH_CONFIDENCE"
77
 
78
  # --- Analisis Frasa "Tidak Tahu" yang Dilatih ---
79
  is_explicitly_unknown = False
 
94
 
95
  # --- Gabungkan Informasi untuk Developer ---
96
  developer_info = {
97
+ "confidence_score": f"{avg_entropy:.4f}", # Sekarang ini adalah entropy
98
  "confidence_status": confidence_status,
99
  "explicit_unknown_phrase_detected": is_explicitly_unknown,
100
  "explicit_unknown_reason": explicit_unknown_reason if is_explicitly_unknown else "Tidak ada frasa 'tidak tahu' eksplisit.",
 
113
 
114
  # Format developer info untuk ditampilkan di Gradio
115
  dev_info_str = "--- Developer Info ---\n"
116
+ dev_info_str += f"Confidence Score (Entropy): {dev_info['confidence_score']} ({dev_info['confidence_status']})\n"
117
  dev_info_str += f"Explicit Unknown Phrase Detected: {dev_info['explicit_unknown_phrase_detected']}\n"
118
  dev_info_str += f"Reason: {dev_info['explicit_unknown_reason']}\n"
119
  # dev_info_str += f"Raw Generated Text: {dev_info['raw_generated_text']}\n"