File size: 3,283 Bytes
7e16596
ad81ace
7e16596
 
0aaced8
 
 
 
 
 
 
6cd6e80
ad81ace
6cd6e80
 
 
 
 
ad81ace
 
6cd6e80
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ad81ace
7e16596
 
6cd6e80
0aaced8
897683b
ad81ace
0aaced8
 
7e16596
6cd6e80
ad81ace
897683b
 
ad81ace
 
0aaced8
6cd6e80
 
0aaced8
6cd6e80
0aaced8
6cd6e80
 
897683b
ad81ace
0aaced8
7e16596
6cd6e80
 
7e16596
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import gradio as gr
import matplotlib.pyplot as plt
from sentiment import analyze_sentiment

# 📌 定義可選擇的模型
MODEL_OPTIONS = {
    "🌎 多語言推特情緒分析 (XLM-RoBERTa)": "cardiffnlp/twitter-xlm-roberta-base-sentiment",
    "📖 多語言情緒分析 (BERT)": "nlptown/bert-base-multilingual-uncased-sentiment",
    "🇬🇧 英語情緒分析 (DistilBERT)": "distilbert-base-uncased-finetuned-sst-2-english"
}

# 📌 生成信心度條狀圖
def plot_confidence(score):
    fig, ax = plt.subplots(figsize=(4, 1))
    ax.barh(["信心度"], [score], color="blue")
    ax.set_xlim([0, 1])
    ax.set_xticks([0, 0.25, 0.5, 0.75, 1])
    ax.set_xlabel("信心度(百分比)")
    return fig

# 📌 Gradio 介面說明
intro_text = """
# 🎯 多語言情緒分析 AI
本應用使用 Hugging Face 的 `XLM-RoBERTa`、`BERT`、`DistilBERT` 模型來進行**多語言情緒分析**。  
輸入任何語言的文本,AI 會自動判斷其**情緒分類(正向 / 中立 / 負向)**,並提供**信心度(%)**。

## 🔹 **功能特色**
✅ **支援多語言**(繁體中文、英文、法文、日文等)  
✅ **即時分析**,不需下載模型  
✅ **提供信心度**,結果更透明  

## 📌 **如何使用**
1️⃣ **輸入一句話或一段文本**(可輸入中文、英文、日文等)  
2️⃣ **選擇 AI 模型**  
3️⃣ **點擊「分析情緒」**  
4️⃣ **查看結果,包括情緒分類 & 信心度**  

## ⚠️ **使用須知**
- 目前模型適合**一般文本**,但對**諷刺、幽默**等語句可能不準確。  
- 若遇到分析錯誤,請**重新輸入文本或稍後再試**。  
"""

developer_info = """
## 👨‍💻 開發資訊
- **開發者**: 余彦志 (大宇 / ian)
- **模型來源**: [Hugging Face](https://huggingface.co/cardiffnlp/twitter-xlm-roberta-base-sentiment)
- **技術棧**: `Gradio`、`FastAPI`、`Hugging Face API`
- **聯絡方式**: [[email protected]]
"""

# 📌 建立 Gradio 介面
def create_ui():
    with gr.Blocks(theme=gr.themes.Soft()) as iface:
        gr.Markdown(intro_text)

        text_input = gr.Textbox(lines=3, placeholder="請輸入文本...", label="輸入文本")

        model_selector = gr.Dropdown(choices=list(MODEL_OPTIONS.keys()), value="🌎 多語言推特情緒分析 (XLM-RoBERTa)", label="選擇 AI 模型")

        analyze_button = gr.Button("分析情緒")
        progress_bar = gr.Textbox(visible=False, label="模型載入進度")  # 進度條(文字顯示)

        result_output = gr.Markdown(label="分析結果")
        plot_output = gr.Plot(label="信心度")

        # 📌 綁定按鈕功能
        def process_analysis(text, model_name):
            progress_bar.update("🔄 AI 模型載入中,請稍後...", visible=True)
            model_id = MODEL_OPTIONS[model_name]
            
            result, confidence_score = analyze_sentiment(text, model_id)
            
            plot = plot_confidence(confidence_score)
            progress_bar.update("", visible=False)
            return result, plot

        analyze_button.click(process_analysis, inputs=[text_input, model_selector], outputs=[result_output, plot_output, progress_bar])

        gr.Markdown(developer_info)

    return iface