模型简介
模型特点
模型能力
使用案例
🚀 通用文本处理模型
本模型可处理 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 许可证。








