模型概述
模型特點
模型能力
使用案例
🚀 通用文本處理模型
本模型可處理 47 種語言的小寫、無標點、未分割文本,實現標點恢復、大小寫校正(首字母大寫)和句子邊界檢測(分割)功能。它採用統一算法處理所有語言,無需語言標籤或特定語言分支,能處理連續和非連續腳本語言,並預測特定語言的標點。
🚀 快速開始
使用此模型的簡便方法是安裝 punctuators
:
pip install punctuators
運行以下腳本可加載該模型並處理一些文本:
示例用法
```python from punctuators.models import PunctCapSegModelONNX實例化此模型
這將下載 ONNX 和 SPE 模型。若要清理,可從 HF 緩存目錄中刪除此模型。
m = PunctCapSegModelONNX.from_pretrained("pcs_47lang")
定義一些待添加標點的輸入文本
input_texts: List[str] = [ "hola mundo cómo estás estamos bajo el sol y hace mucho calor santa coloma abre los huertos urbanos a las escuelas de la ciudad", "hello friend how's it going it's snowing outside right now in connecticut a large storm is moving in", "未來疫苗將有望覆蓋3歲以上全年齡段美國與北約軍隊已全部撤離還有鐵路公路在內的各項基建的來源都將枯竭", "በባለፈው ሳምንት ኢትዮጵያ ከሶማሊያ 3 ሺህ ወታደሮቿንም እንዳስወጣች የሶማሊያው ዳልሳን ሬድዮ ዘግቦ ነበር ጸጥታ ሃይሉና ህዝቡ ተቀናጅቶ በመስራቱ በመዲናዋ ላይ የታቀደው የጥፋት ሴራ ከሽፏል", "all human beings are born free and equal in dignity and rights they are endowed with reason and conscience and should act towards one another in a spirit of brotherhood", "सभी मनुष्य जन्म से मर्यादा और अधिकारों में स्वतंत्र और समान होते हैं वे तर्क और विवेक से संपन्न हैं तथा उन्हें भ्रातृत्व की भावना से परस्पर के प्रति कार्य करना चाहिए", "wszyscy ludzie rodzą się wolni i równi pod względem swej godności i swych praw są oni obdarzeni rozumem i sumieniem i powinni postępować wobec innych w duchu braterstwa", "tous les êtres humains naissent libres et égaux en dignité et en droits ils sont doués de raison et de conscience et doivent agir les uns envers les autres dans un esprit de fraternité", ] results: List[List[str]] = m.infer(input_texts) for input_text, output_texts in zip(input_texts, results): print(f"Input: {input_text}") print(f"Outputs:") for text in output_texts: print(f"\t{text}") print()
</details>
<details open>
<summary>預期輸出</summary>
```text
Input: hola mundo cómo estás estamos bajo el sol y hace mucho calor santa coloma abre los huertos urbanos a las escuelas de la ciudad
Outputs:
Hola Mundo, ¿cómo estás?
Estamos bajo el sol y hace mucho calor.
Santa Coloma abre los huertos urbanos a las escuelas de la ciudad.
Input: hello friend how's it going it's snowing outside right now in connecticut a large storm is moving in
Outputs:
Hello Friend, how's it going?
It's snowing outside right now.
In Connecticut, a large storm is moving in.
Input: 未來疫苗將有望覆蓋3歲以上全年齡段美國與北約軍隊已全部撤離還有鐵路公路在內的各項基建的來源都將枯竭
Outputs:
未來,疫苗將有望覆蓋3歲以上全年齡段。
美國與北約軍隊已全部撤離。
還有鐵路公路在內的各項基建的來源都將枯竭。
Input: በባለፈው ሳምንት ኢትዮጵያ ከሶማሊያ 3 ሺህ ወታደሮቿንም እንዳስወጣች የሶማሊያው ዳልሳን ሬድዮ ዘግቦ ነበር ጸጥታ ሃይሉና ህዝቡ ተቀናጅቶ በመስራቱ በመዲናዋ ላይ የታቀደው የጥፋት ሴራ ከሽፏል
Outputs:
በባለፈው ሳምንት ኢትዮጵያ ከሶማሊያ 3 ሺህ ወታደሮቿንም እንዳስወጣች የሶማሊያው ዳልሳን ሬድዮ ዘግቦ ነበር።
ጸጥታ ሃይሉና ህዝቡ ተቀናጅቶ በመስራቱ በመዲናዋ ላይ የታቀደው የጥፋት ሴራ ከሽፏል።
Input: all human beings are born free and equal in dignity and rights they are endowed with reason and conscience and should act towards one another in a spirit of brotherhood
Outputs:
All human beings are born free and equal in dignity and rights.
They are endowed with reason and conscience and should act towards one another in a spirit of brotherhood.
Input: सभी मनुष्य जन्म से मर्यादा और अधिकारों में स्वतंत्र और समान होते हैं वे तर्क और विवेक से संपन्न हैं तथा उन्हें भ्रातृत्व की भावना से परस्पर के प्रति कार्य करना चाहिए
Outputs:
सभी मनुष्य जन्म से मर्यादा और अधिकारों में स्वतंत्र और समान होते हैं।
वे तर्क और विवेक से संपन्न हैं तथा उन्हें भ्रातृत्व की भावना से परस्पर के प्रति कार्य करना चाहिए।
Input: wszyscy ludzie rodzą się wolni i równi pod względem swej godności i swych praw są oni obdarzeni rozumem i sumieniem i powinni postępować wobec innych w duchu braterstwa
Outputs:
Wszyscy ludzie rodzą się wolni i równi pod względem swej godności i swych praw.
Są oni obdarzeni rozumem i sumieniem i powinni postępować wobec innych w duchu braterstwa.
Input: tous les êtres humains naissent libres et égaux en dignité et en droits ils sont doués de raison et de conscience et doivent agir les uns envers les autres dans un esprit de fraternité
Outputs:
Tous les êtres humains naissent libres et égaux, en dignité et en droits.
Ils sont doués de raison et de conscience et doivent agir les uns envers les autres.
Dans un esprit de fraternité.
請注意,在本示例中,“Mundo” 和 “Friend” 是專有名詞,因此模型會將多種語言中類似的標記統一大寫。
✨ 主要特性
- 多語言支持:可處理 47 種語言的文本,包括連續和非連續腳本語言。
- 統一算法:無需語言標籤或特定語言分支,所有語言採用相同算法處理。
- 多功能處理:實現標點恢復、大小寫校正和句子邊界檢測功能。
📦 安裝指南
安裝 punctuators
庫:
pip install punctuators
📚 詳細文檔
模型概述
該模型接收 47 種語言的小寫、無標點、未分割文本作為輸入,執行標點恢復、大小寫校正和句子邊界檢測任務。所有語言使用相同算法處理,無需語言標籤或特定語言分支。
模型細節
本模型大致遵循以下流程,各步驟簡要說明如下:
- 編碼:模型首先使用子詞分詞器對文本進行分詞。這裡使用的分詞器是
SentencePiece
模型,詞彙量為 64k。然後,輸入序列通過一個基礎大小的 Transformer 進行編碼,該 Transformer 由 6 層組成,模型維度為 512。 - 後置標點預測:編碼後的序列被輸入到一個分類網絡,以預測“後置”標點標記。後置標點是可能出現在單詞後面的標點標記,基本上是大多數常見的標點。每個子詞預測一次後置標點。
- 重新編碼:所有後續任務(大小寫校正、句子邊界檢測和“前置”標點預測)都依賴於“後置”標點。因此,必須根據後置標點標記進行所有進一步的預測。為此,將預測的標點標記輸入到一個嵌入層,其中嵌入表示每個可能的標點標記。每個時間步映射到一個 4 維嵌入,該嵌入與 512 維編碼連接。連接後的聯合表示被重新編碼,以便為每個時間步賦予全局上下文,將標點預測納入後續任務。
- 前置標點預測:重新編碼後,另一個分類網絡預測“前置”標點,即可能出現在單詞前面的標點標記。實際上,這意味著西班牙語和阿斯圖里亞斯語中的倒問號
¿
。請注意,只有在預測到?
時,才會出現¿
。 - 句子邊界檢測:與“前置”標點預測並行,另一個分類網絡從重新編碼的文本中預測句子邊界。在所有語言中,只有在預測到潛在的句號時,才會出現句子邊界。
- 移位和連接句子邊界信息:在許多語言中,每個句子的第一個字符應該大寫。因此,應將句子邊界信息輸入到大小寫校正分類網絡。由於大小寫校正分類網絡是前饋的,沒有上下文,每個時間步必須嵌入它是否是句子的第一個單詞的信息。因此,將二進制句子邊界決策向右移動一位:如果標記
N - 1
是句子邊界,則標記N
是句子的第一個單詞。將此信息與重新編碼的文本連接,每個時間步包含它是否是句子的第一個單詞的信息,這是由句子邊界檢測頭預測的。 - 大小寫校正預測:基於標點和句子邊界的信息,一個分類網絡預測大小寫校正。由於大小寫校正應該逐字符進行,分類網絡為每個標記進行
N
次預測,其中N
是子標記的長度。(實際上,N
是最長可能的子詞,多餘的預測將被忽略)。這種方案可以處理縮寫詞,如“NATO”,以及雙大寫單詞,如“MacDonald”。
後置標點標記
該模型為每個子詞預測以下“後置”標點標記:
標記 | 描述 | 相關語言 |
---|---|---|
. | 拉丁句號 | 多種語言 |
, | 拉丁逗號 | 多種語言 |
? | 拉丁問號 | 多種語言 |
? | 全角問號 | 中文、日語 |
, | 全角逗號 | 中文、日語 |
。 | 全角句號 | 中文、日語 |
、 | 表意逗號 | 中文、日語 |
・ | 中點 | 日語 |
। | 丹達(印度標點) | 印地語、孟加拉語、奧里亞語 |
؟ | 阿拉伯問號 | 阿拉伯語 |
; | 希臘問號 | 希臘語 |
። | 阿姆哈拉語句號 | 阿姆哈拉語 |
፣ | 阿姆哈拉語逗號 | 阿姆哈拉語 |
፧ | 阿姆哈拉語問號 | 阿姆哈拉語 |
前置標點標記
該模型為每個子詞預測以下“前置”標點標記:
標記 | 描述 | 相關語言 |
---|---|---|
¿ | 倒問號 | 西班牙語 |
訓練細節
- 訓練框架:本模型在 NeMo 框架中進行訓練。
- 訓練數據:使用 WMT 的新聞爬取數據進行訓練。每種語言使用 100 萬行文本,但一些低資源語言可能使用較少的數據。語言的選擇基於作者對新聞爬取語料庫中是否包含足夠可靠質量數據的判斷。
侷限性
- 數據適應性:該模型在新聞數據上進行訓練,在對話或非正式數據上的表現可能不佳。
- 標點預測粒度:模型每個子詞僅預測一次標點,這意味著一些縮寫詞(如 'U.S.')可能無法正確添加標點。不過,這種縮寫詞在多語言模型的上下文中較為罕見,並且標點化的縮寫詞通常按單個字符發音,因此在 ASR 系統的輸出中,這些發音可能會被轉錄為單獨的標記。
- 生產質量:該模型不太可能達到生產級質量。每種語言僅使用 100 萬行數據進行訓練,並且由於網絡爬取新聞數據的性質,開發集可能存在噪聲。此外,這是一個基礎大小的模型,處理多種語言和多個任務,因此容量可能有限。
- 最大序列長度:該模型的最大序列長度為 128,對於 NLP 問題來說相對較短。
未來改進方向
分析本版本的侷限性後,未來版本的模型將嘗試改進以下方面:
- 更長的最大序列長度。
- 更多的訓練數據。
- 更多的訓練步驟。
評估
在評估指標中,需要注意以下幾點:
- 數據噪聲:數據存在噪聲。
- 條件依賴:句子邊界和大小寫校正依賴於預測的標點,而標點預測是最困難的任務,有時可能不正確。當基於參考標點進行條件判斷時,大多數語言的大小寫校正和句子邊界檢測幾乎可以達到 100%。
- 標點主觀性:標點的使用可能具有主觀性。例如:
Hola mundo, ¿cómo estás?
或
Hola mundo. ¿Cómo estás?
當句子更長且更實際時,這些歧義會大量存在,並影響所有 3 項分析指標。
測試數據和示例生成
每個測試示例使用以下步驟生成:
- 連接 5 個隨機句子。
- 將連接後的句子轉換為小寫。
- 去除所有標點。
測試數據是新聞爬取數據的保留部分,已經過去重處理。每種語言使用 2000 行數據,生成 2000 個由 5 個句子組成的唯一示例。每個示例的最後 4 個句子是從 2000 個句子中隨機採樣的,可能會有重複。
長度超過模型最大長度的示例將被截斷。受影響的句子數量可以從“句號”支持情況進行估計:2000 個句子,每個示例 5 個句子,預計總共會有 10000 個句號目標。
部分語言評估報告
由於該模型可能很快會更新,以下僅報告了幾種語言的評估結果:
英語
``` punct_post test report: label precision recall f1 supportcap test report: label precision recall f1 support LOWER (label_id: 0) 99.63 99.49 99.56 526612 UPPER (label_id: 1) 89.19 91.84 90.50 24161 ------------------- micro avg 99.15 99.15 99.15 550773 macro avg 94.41 95.66 95.03 550773 weighted avg 99.17 99.15 99.16 550773
seg test report: label precision recall f1 support NOSTOP (label_id: 0) 99.37 99.42 99.39 162044 FULLSTOP (label_id: 1) 89.75 88.84 89.29 9222 ------------------- micro avg 98.85 98.85 98.85 171266 macro avg 94.56 94.13 94.34 171266 weighted avg 98.85 98.85 98.85 171266
</details>
<details>
<summary>西班牙語</summary>
punct_pre test report:
label precision recall f1 support
punct_post test report:
label precision recall f1 support
cap test report: label precision recall f1 support LOWER (label_id: 0) 99.62 99.60 99.61 555041 UPPER (label_id: 1) 90.60 91.06 90.83 23538 ------------------- micro avg 99.25 99.25 99.25 578579 macro avg 95.11 95.33 95.22 578579 weighted avg 99.25 99.25 99.25 578579
[NeMo I 2023-02-22 17:24:04 punct_cap_seg_model:427] seg test report: label precision recall f1 support NOSTOP (label_id: 0) 99.44 99.54 99.49 175908 FULLSTOP (label_id: 1) 91.68 89.98 90.82 9923 ------------------- micro avg 99.03 99.03 99.03 185831 macro avg 95.56 94.76 95.16 185831 weighted avg 99.02 99.03 99.02 185831
</details>
<details>
<summary>中文</summary>
punct_post test report:
label precision recall f1 support
cap test report: label precision recall f1 support LOWER (label_id: 0) 97.07 92.39 94.67 394 UPPER (label_id: 1) 70.59 86.75 77.84 83 ------------------- micro avg 91.40 91.40 91.40 477 macro avg 83.83 89.57 86.25 477 weighted avg 92.46 91.40 91.74 477
seg test report: label precision recall f1 support NOSTOP (label_id: 0) 99.58 99.53 99.56 156369 FULLSTOP (label_id: 1) 92.77 93.50 93.13 10000 ------------------- micro avg 99.17 99.17 99.17 166369 macro avg 96.18 96.52 96.35 166369 weighted avg 99.17 99.17 99.17 166369
</details>
<details>
<summary>印地語</summary>
punct_post test report:
label precision recall f1 support
cap test report: label precision recall f1 support LOWER (label_id: 0) 98.25 95.06 96.63 708 UPPER (label_id: 1) 89.46 96.12 92.67 309 ------------------- micro avg 95.38 95.38 95.38 1017 macro avg 93.85 95.59 94.65 1017 weighted avg 95.58 95.38 95.42 1017
seg test report: label precision recall f1 support NOSTOP (label_id: 0) 99.87 99.85 99.86 178892 FULLSTOP (label_id: 1) 97.38 97.58 97.48 9900 ------------------- micro avg 99.74 99.74 99.74 188792 macro avg 98.62 98.72 98.67 188792 weighted avg 99.74 99.74 99.74 188792
</details>
<details>
<summary>阿姆哈拉語</summary>
punct_post test report:
label precision recall f1 support
cap test report: label precision recall f1 support LOWER (label_id: 0) 96.65 99.78 98.19 1360 UPPER (label_id: 1) 98.90 85.13 91.50 316 ------------------- micro avg 97.02 97.02 97.02 1676 macro avg 97.77 92.45 94.84 1676 weighted avg 97.08 97.02 96.93 1676
seg test report: label precision recall f1 support NOSTOP (label_id: 0) 99.85 99.74 99.80 239845 FULLSTOP (label_id: 1) 91.72 95.25 93.45 7341 ------------------- micro avg 99.60 99.60 99.60 247186 macro avg 95.79 97.49 96.62 247186 weighted avg 99.61 99.60 99.61 247186
</details>
## 📄 許可證
本模型採用 Apache-2.0 許可證。








