Luigi commited on
Commit
dc13b6d
·
1 Parent(s): 0b53f93

initial commit

Browse files
Files changed (3) hide show
  1. README.md +32 -1
  2. app.py +72 -0
  3. requirements.txt +5 -0
README.md CHANGED
@@ -11,4 +11,35 @@ license: mit
11
  short_description: Chinese input method accelerator
12
  ---
13
 
14
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  short_description: Chinese input method accelerator
12
  ---
13
 
14
+ # 台灣中文下段預測(ZeroGPU + Gradio v5)
15
+
16
+ ## 一、專案概述
17
+ 本示範結合多種小型中文語言模型,並透過 Hugging Face 的 **ZeroGPU**(H200)即時執行文字生成,模擬中文輸入法中的候選詞建議功能。
18
+
19
+ ## 二、主要功能
20
+ 1. **輸入文字區**:在此輸入您正在撰寫的中文片段。
21
+ 2. **模型選擇**:可在七款預訓練模型間切換。
22
+ 3. **參數滑桿**:
23
+ - **K(最大新生成詞元)**:控制每次生成的字數上限。
24
+ - **M(建議數量)**:控制同時產生的候選建議數量。
25
+ 4. **使用 GPU 生成建議**:點擊後將在 H200 上啟動推理,並自動釋放資源。
26
+ 5. **建議清單**:點選任一候選,該文字片段即會自動附加至輸入區。
27
+
28
+ ## 三、運作原理
29
+ - **模型快取**:首次使用各模型時載入至 CPU 快取。
30
+ - **ZeroGPU 呼叫**:點擊「使用 GPU 生成建議」時,`@spaces.GPU` 裝飾的函式會自動分配 H200,完成推理後歸還。
31
+ - **即時拼接**:選擇建議即時追加,操作如同 IME 建議列。
32
+
33
+ ## 四、部署步驟
34
+ 1. 在 Hugging Face Spaces 建立新 Space,框架選 **Gradio SDK**。
35
+ 2. 在 **Hardware** 欄位選擇 **Zero GPU**(需 PRO 帳號)。
36
+ 3. 設定 Python 版本為 3.10.13。
37
+ 4. 上傳 `app.py`、`requirements.txt`、`README.md`。Spaces 會自動安裝相依套件。
38
+ 5. 點擊 **Deploy**,即可線上使用。
39
+
40
+ ## 五、使用效益
41
+ - **快速回應**:利用 GPU burst 提升生成速度。
42
+ - **零門檻**:免本地 GPU,開發者與使用者皆可輕鬆試用。
43
+ - **多模型對比**:可快速測試不同模型品質與效能。
44
+
45
+ 歡迎體驗高效、無痛的台灣中文輸入法下段建議 Demo!
app.py ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # app.py
2
+ import spaces
3
+ import gradio as gr
4
+ from functools import lru_cache
5
+ from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
6
+
7
+ # 可選模型列表
8
+ MODEL_LIST = [
9
+ "ckiplab/gpt2-tiny-chinese",
10
+ "ckiplab/gpt2-base-chinese",
11
+ "liswei/Taiwan-ELM-270M-Instruct",
12
+ "liswei/Taiwan-ELM-1_1B",
13
+ "google/gemma-3-1b-pt",
14
+ "benchang1110/Qwen2.5-Taiwan-1.5B-Instruct",
15
+ "benchang1110/Taiwan-tinyllama-v1.0-base",
16
+ ]
17
+
18
+ @lru_cache(maxsize=None)
19
+ def get_pipeline(model_name):
20
+ tok = AutoTokenizer.from_pretrained(model_name)
21
+ mdl = AutoModelForCausalLM.from_pretrained(model_name)
22
+ mdl.to("cuda")
23
+ return pipeline("text-generation", model=mdl, tokenizer=tok, device=0)
24
+
25
+ @spaces.GPU
26
+ def suggest_next(text, model_name, k, m):
27
+ """在 GPU(ZeroGPU H200)上執行推理,產生 M 個長度上限 K 的下段建議。"""
28
+ pipe = get_pipeline(model_name)
29
+ outs = pipe(text, max_new_tokens=k, num_return_sequences=m, do_sample=False)
30
+ return [out["generated_text"][len(text):] for out in outs]
31
+
32
+ def append_suggestion(current, choice):
33
+ return current + choice
34
+
35
+ with gr.Blocks() as demo:
36
+ gr.Markdown(
37
+ "## 🇹🇼 台灣中文下段預測\n"
38
+ "結合小型語言模型與 ZeroGPU,提供即時 IME 風格的下段文字建議。"
39
+ )
40
+
41
+ input_text = gr.TextArea(
42
+ label="輸入文字", lines=4, placeholder="請在此輸入起始片段…"
43
+ )
44
+
45
+ with gr.Row():
46
+ model_selector = gr.Dropdown(
47
+ MODEL_LIST, value=MODEL_LIST[0], label="選擇模型"
48
+ )
49
+ k_slider = gr.Slider(
50
+ minimum=1, maximum=50, step=1, value=5, label="K(最大新生成詞元)"
51
+ )
52
+ m_slider = gr.Slider(
53
+ minimum=1, maximum=10, step=1, value=5, label="M(建議數量)"
54
+ )
55
+
56
+ suggestions = gr.Dropdown([], label="建議清單", interactive=True)
57
+
58
+ gpu_button = gr.Button("使用 GPU 生成建議")
59
+
60
+ gpu_button.click(
61
+ fn=suggest_next,
62
+ inputs=[input_text, model_selector, k_slider, m_slider],
63
+ outputs=suggestions,
64
+ )
65
+
66
+ suggestions.change(
67
+ fn=append_suggestion,
68
+ inputs=[input_text, suggestions],
69
+ outputs=input_text,
70
+ )
71
+
72
+ demo.launch()
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ # requirements.txt
2
+ gradio>=5.0.0
3
+ torch>=2.1.2,<2.6.0
4
+ transformers>=4.30.0
5
+ accelerate