Spaces:
Running
on
Zero
Running
on
Zero
eliminate doublons from suggestions
Browse files
README.md
CHANGED
@@ -11,40 +11,55 @@ license: mit
|
|
11 |
short_description: Chinese input method accelerator
|
12 |
---
|
13 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14 |
# 台灣中文輸入法加速器(ZeroGPU + Gradio v5)
|
15 |
|
16 |
## 一、專案概述
|
17 |
本示範結合多種小型中文語言模型,並透過 Hugging Face 的 **ZeroGPU**(H200)即時執行文字生成,模擬中文輸入法中的候選詞建議功能。
|
18 |
|
19 |
## 二、主要功能
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
24 |
|
25 |
## 三、運作原理
|
26 |
-
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
num_beams=M,
|
32 |
-
num_return_sequences=M,
|
33 |
-
do_sample=False,
|
34 |
-
early_stopping=True
|
35 |
-
)
|
36 |
-
|
37 |
|
38 |
## 四、部署步驟
|
39 |
1. 在 Hugging Face Spaces 建立新 Space,框架選 **Gradio SDK**。
|
40 |
2. 在 **Hardware** 欄位選擇 **Zero GPU**(需 PRO 帳號)。
|
41 |
3. 設定 Python 版本為 3.10.13。
|
42 |
-
4. 上傳 `app.py`、`requirements.txt
|
43 |
-
5. 點擊 **Deploy
|
44 |
|
45 |
## 五、使用效益
|
46 |
-
- **快速回應**:利用 GPU burst
|
47 |
- **零門檻**:免本地 GPU,開發者與使用者皆可輕鬆試用。
|
48 |
-
- **多模型對比**:可快速測試不同模型品質與效能。
|
49 |
|
50 |
-
歡迎體驗高效、無痛的台灣中文輸入法下段建議 Demo!
|
|
|
11 |
short_description: Chinese input method accelerator
|
12 |
---
|
13 |
|
14 |
+
---
|
15 |
+
title: Input Method Acceleration
|
16 |
+
emoji: 💻
|
17 |
+
colorFrom: blue
|
18 |
+
colorTo: pink
|
19 |
+
sdk: gradio
|
20 |
+
sdk_version: 5.34.0
|
21 |
+
app_file: app.py
|
22 |
+
pinned: true
|
23 |
+
license: mit
|
24 |
+
short_description: Chinese input method accelerator
|
25 |
+
---
|
26 |
+
|
27 |
# 台灣中文輸入法加速器(ZeroGPU + Gradio v5)
|
28 |
|
29 |
## 一、專案概述
|
30 |
本示範結合多種小型中文語言模型,並透過 Hugging Face 的 **ZeroGPU**(H200)即時執行文字生成,模擬中文輸入法中的候選詞建議功能。
|
31 |
|
32 |
## 二、主要功能
|
33 |
+
1. **使用 GPU 生成建議**
|
34 |
+
- 採用 **Beam Search**(`num_beams=M`)同時產出 M 條最可能的候選,下段建議即時回饋。
|
35 |
+
2. **經典 IME 候選欄樣式**
|
36 |
+
- 橫向滑動、點擊選字,模擬傳統輸入法使用體驗。
|
37 |
+
3. **自動延展文字框**
|
38 |
+
- 根據輸入內容動態調整高度,無須手動拖曳。
|
39 |
+
4. **手機響應式優化**
|
40 |
+
- 針對小螢幕(≤600px)放大候選字與按鈕、攤滿全寬,提升觸控便利度。
|
41 |
+
5. **永遠顯示「預測」按鈕**
|
42 |
+
- 手動/自動預測互補,按鈕常駐不隱藏。
|
43 |
+
6. **消除重複建議**
|
44 |
+
- 自動去重,保留首見建議,避免候選列表出現相同項目。
|
45 |
|
46 |
## 三、運作原理
|
47 |
+
- 點擊「預測」或於文字變更時(若已開啟自動預測),函式會以 **Beam Search** 模式呼叫模型,並做以下處理:
|
48 |
+
1. 生成 m 條下文;
|
49 |
+
2. 過濾空字串並轉繁體;
|
50 |
+
3. 去重並保留順序;
|
51 |
+
4. 最後編號顯示於候選欄。
|
|
|
|
|
|
|
|
|
|
|
|
|
52 |
|
53 |
## 四、部署步驟
|
54 |
1. 在 Hugging Face Spaces 建立新 Space,框架選 **Gradio SDK**。
|
55 |
2. 在 **Hardware** 欄位選擇 **Zero GPU**(需 PRO 帳號)。
|
56 |
3. 設定 Python 版本為 3.10.13。
|
57 |
+
4. 上傳 `app.py`、`requirements.txt`、更新後的 `README.md`。Spaces 會自動安裝相依套件。
|
58 |
+
5. 點擊 **Deploy**,即可線上體驗!
|
59 |
|
60 |
## 五、使用效益
|
61 |
+
- **快速回應**:利用 GPU burst 加速生成速度。
|
62 |
- **零門檻**:免本地 GPU,開發者與使用者皆可輕鬆試用。
|
63 |
+
- **多模型對比**:可快速測試不同模型品質與效能。
|
64 |
|
65 |
+
歡迎體驗高效、無痛的台灣中文輸入法下段建議 Demo!
|
app.py
CHANGED
@@ -36,7 +36,7 @@ def get_pipeline(model_name):
|
|
36 |
@spaces.GPU
|
37 |
def suggest_next(text, model_name, k, m):
|
38 |
"""
|
39 |
-
使用 Beam Search 產生 m
|
40 |
"""
|
41 |
gen_pipe = get_pipeline(model_name)
|
42 |
outs = gen_pipe(
|
@@ -47,10 +47,17 @@ def suggest_next(text, model_name, k, m):
|
|
47 |
do_sample=False,
|
48 |
early_stopping=True
|
49 |
)
|
|
|
50 |
suggestions = [out["generated_text"][len(text):].strip() for out in outs]
|
51 |
suggestions = [s for s in suggestions if s]
|
52 |
suggestions = [cc.convert(s) for s in suggestions]
|
53 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
54 |
return update(choices=numbered, value=None)
|
55 |
|
56 |
|
|
|
36 |
@spaces.GPU
|
37 |
def suggest_next(text, model_name, k, m):
|
38 |
"""
|
39 |
+
使用 Beam Search 產生 m 條候選,並一次更新候選列表,轉繁體並編號,去除重複。
|
40 |
"""
|
41 |
gen_pipe = get_pipeline(model_name)
|
42 |
outs = gen_pipe(
|
|
|
47 |
do_sample=False,
|
48 |
early_stopping=True
|
49 |
)
|
50 |
+
# 提取新生成文本,過濾空字串,轉繁體
|
51 |
suggestions = [out["generated_text"][len(text):].strip() for out in outs]
|
52 |
suggestions = [s for s in suggestions if s]
|
53 |
suggestions = [cc.convert(s) for s in suggestions]
|
54 |
+
# 去除重複,保留順序
|
55 |
+
unique_suggestions = []
|
56 |
+
for s in suggestions:
|
57 |
+
if s not in unique_suggestions:
|
58 |
+
unique_suggestions.append(s)
|
59 |
+
# 編號候選
|
60 |
+
numbered = [f"{i+1}. {s}" for i, s in enumerate(unique_suggestions)]
|
61 |
return update(choices=numbered, value=None)
|
62 |
|
63 |
|