shaanyy commited on
Commit
f21a35b
ยท
verified ยท
1 Parent(s): 4a8ecc9

Upload 2 files

Browse files
Files changed (2) hide show
  1. app.py +87 -0
  2. requirements.txt +3 -0
app.py ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # ==========================================
2
+ # Hugging Face ๋ชจ๋ธ ์‚ฌ์šฉ - ๊ฐ์ • ๋ถ„์„ Gradio
3
+ # ==========================================
4
+
5
+ import gradio as gr
6
+ import torch
7
+ from transformers import AutoTokenizer, AutoModelForSequenceClassification
8
+ from peft import PeftModel
9
+
10
+ # ๋ชจ๋ธ ๋กœ๋“œ
11
+ print("๋ชจ๋ธ ๋กœ๋“œ ์ค‘...")
12
+
13
+ BASE_MODEL = "klue/bert-base"
14
+ LORA_MODEL = "shaanyy/nsmc-sentiment-lora"
15
+
16
+ tokenizer = AutoTokenizer.from_pretrained(LORA_MODEL)
17
+ base_model = AutoModelForSequenceClassification.from_pretrained(
18
+ BASE_MODEL,
19
+ num_labels=2
20
+ )
21
+ model = PeftModel.from_pretrained(base_model, LORA_MODEL)
22
+ model.eval()
23
+
24
+ device = "cuda" if torch.cuda.is_available() else "cpu"
25
+ model.to(device)
26
+
27
+ print(f"์™„๋ฃŒ! (Device: {device})")
28
+
29
+ # ๊ฐ์ • ๋ถ„์„ ํ•จ์ˆ˜
30
+ def analyze_sentiment(text):
31
+ if not text.strip():
32
+ return "ํ…์ŠคํŠธ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”", {}
33
+
34
+ # ํ† ํฌ๋‚˜์ด์ง•
35
+ inputs = tokenizer(
36
+ text,
37
+ return_tensors="pt",
38
+ truncation=True,
39
+ max_length=128,
40
+ padding=True
41
+ ).to(device)
42
+
43
+ # ์˜ˆ์ธก
44
+ with torch.no_grad():
45
+ outputs = model(**inputs)
46
+ probs = torch.softmax(outputs.logits, dim=-1)[0]
47
+
48
+ # ๊ฒฐ๊ณผ
49
+ pred = torch.argmax(probs).item()
50
+ label = "๐Ÿ˜Š ๊ธ์ •" if pred == 1 else "๐Ÿ˜ž ๋ถ€์ •"
51
+ confidence = probs[pred].item()
52
+
53
+ result = f"**{label}** (ํ™•์‹ ๋„: {confidence*100:.1f}%)"
54
+
55
+ prob_dict = {
56
+ "๐Ÿ˜ž ๋ถ€์ •": float(probs[0]),
57
+ "๐Ÿ˜Š ๊ธ์ •": float(probs[1])
58
+ }
59
+
60
+ return result, prob_dict
61
+
62
+ # Gradio UI
63
+ demo = gr.Interface(
64
+ fn=analyze_sentiment,
65
+ inputs=gr.Textbox(
66
+ label="์˜ํ™” ๋ฆฌ๋ทฐ",
67
+ placeholder="์˜ํ™”์— ๋Œ€ํ•œ ๋ฆฌ๋ทฐ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”...",
68
+ lines=3
69
+ ),
70
+ outputs=[
71
+ gr.Markdown(label="๋ถ„์„ ๊ฒฐ๊ณผ"),
72
+ gr.Label(label="๊ฐ์ • ํ™•๋ฅ ", num_top_classes=2)
73
+ ],
74
+ title="์˜ํ™” ๋ฆฌ๋ทฐ ๊ฐ์ • ๋ถ„์„",
75
+ description="LoRA๋กœ ํŒŒ์ธํŠœ๋‹๋œ NSMC ๊ฐ์ • ๋ถ„์„ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค.",
76
+ examples=[
77
+ ["์ •๋ง ์žฌ๋ฏธ์žˆ๋Š” ์˜ํ™”์˜€์–ด์š”! ๊ฐ•๋ ฅ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค."],
78
+ ["์‹œ๊ฐ„ ๋‚ญ๋น„์˜€์Šต๋‹ˆ๋‹ค. ๋ณ„๋กœ์˜€์–ด์š”."],
79
+ ["๋ฐฐ์šฐ๋“ค์˜ ์—ฐ๊ธฐ๊ฐ€ ํ›Œ๋ฅญํ–ˆ์Šต๋‹ˆ๋‹ค."],
80
+ ["์Šคํ† ๋ฆฌ๊ฐ€ ์ง€๋ฃจํ•˜๊ณ  ์žฌ๋ฏธ์—†์—ˆ์–ด์š”."],
81
+ ],
82
+ theme="soft",
83
+ allow_flagging="never"
84
+ )
85
+
86
+ # ์‹คํ–‰
87
+ demo.launch(share=True, debug=True)
requirements.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ transformers
2
+ peft
3
+ torch