Luigi commited on
Commit
fe26a7b
·
1 Parent(s): bb40af0

eliminate doublons from suggestions

Browse files
Files changed (2) hide show
  1. README.md +35 -20
  2. app.py +9 -2
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
- 4. **使用 GPU 生成建議**:
22
- - 採用 **Beam Search**(`num_beams=M`)同時產出 M 條最可能的候選下段,並在 H200 上執行推理。
23
-
 
 
 
 
 
 
 
 
24
 
25
  ## 三、運作原理
26
- - 點擊「使用 GPU 生成建議」時,函式會以 **Beam Search** 模式呼叫模型:
27
- ```python
28
- outs = gen_pipe(
29
- text,
30
- max_new_tokens=K,
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`、`README.md`。Spaces 會自動安裝相依套件。
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
- numbered = [f"{i+1}. {s}" for i, s in enumerate(suggestions)]
 
 
 
 
 
 
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