模型简介
模型特点
模型能力
使用案例
许可证:apache-2.0
库名称:generic
标签:
- 文本生成文本
- 标点恢复
- 句子边界检测
- 大小写校正
支持语言: - 南非荷兰语
- 阿姆哈拉语
- 阿拉伯语
- 保加利亚语
- 孟加拉语
- 德语
- 希腊语
- 英语
- 西班牙语
- 爱沙尼亚语
- 波斯语
- 芬兰语
- 法语
- 古吉拉特语
- 印地语
- 克罗地亚语
- 匈牙利语
- 印尼语
- 冰岛语
- 意大利语
- 日语
- 哈萨克语
- 卡纳达语
- 韩语
- 吉尔吉斯语
- 立陶宛语
- 拉脱维亚语
- 马其顿语
- 马拉雅拉姆语
- 马拉地语
- 荷兰语
- 奥里亚语
- 旁遮普语
- 波兰语
- 普什图语
- 葡萄牙语
- 罗马尼亚语
- 俄语
- 卢旺达语
- 索马里语
- 塞尔维亚语
- 斯瓦希里语
- 泰米尔语
- 泰卢固语
- 土耳其语
- 乌克兰语
- 中文
模型概述
该模型接受47种语言的小写、无标点、未分段的文本输入,执行标点恢复、大小写校正(首字母大写)和句子边界检测(分段)。
所有语言均采用相同算法处理,无需语言标签或图中特定语言分支。这包括连续脚本和非连续脚本语言,预测特定语言的标点等。
此模型适合尝试,但效果可能不够理想。推荐以下更新的优质模型:
使用方法
安装punctuators
即可轻松使用:
pip install punctuators
运行以下脚本将加载此模型并处理示例文本:
示例用法
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_text}")
print(f"输出:")
for text in output_texts:
print(f"\t{text}")
print()
预期输出
输入: 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
输出:
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
输出:
Hello Friend, how's it going?
It's snowing outside right now.
In Connecticut, a large storm is moving in.
输入: 未來疫苗將有望覆蓋3歲以上全年齡段美國與北約軍隊已全部撤離還有鐵路公路在內的各項基建的來源都將枯竭
输出:
未來,疫苗將有望覆蓋3歲以上全年齡段。
美國與北約軍隊已全部撤離。
還有鐵路公路在內的各項基建的來源都將枯竭。
输入: በባለፈው ሳምንት ኢትዮጵያ ከሶማሊያ 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
输出:
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
输出:
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é
输出:
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"在此用法中是专有名词,因此模型在多种语言中会持续大写类似标记。
模型详情
该模型基本遵循下图所示流程,各步骤简要说明如下:
-
编码:
模型首先使用子词分词器对文本进行分词。
此处使用的分词器是词汇量为64k的SentencePiece
模型。
接着,输入序列通过基础规模的Transformer编码,包含6层,模型维度为512。 -
后置标点:
编码后的序列输入分类网络预测"后置"标点标记。
后置标点是可能出现在单词后的标点,基本上是大多数常规标点。
每个子词预测一次后置标点——下文将进一步讨论。 -
重新编码
所有后续任务(大小写校正、句子边界检测和"前置"标点)都依赖于"后置"标点。
因此,我们必须基于后置标点标记进行所有进一步预测。
为此,预测的标点标记输入嵌入层,其中嵌入表示每个可能的标点标记。
每个时间步映射到4维嵌入,与512维编码拼接。
拼接后的联合表示重新编码,将全局上下文赋予每个时间步,将标点预测纳入后续任务。 -
前置标点
重新编码后,另一个分类网络预测"前置"标点,即可能出现在单词前的标点标记。
实际上,这意味着西班牙语和阿斯图里亚斯语的反问号¿
。
注意,¿
仅在预测?
时可能出现,因此存在条件依赖。 -
句子边界检测
与"前置"标点并行,另一个分类网络从重新编码的文本预测句子边界。
在所有语言中,句子边界仅在预测可能的句点时出现,因此存在条件依赖。 -
移位并拼接句子边界
在许多语言中,每个句子的首字符应大写。
因此,我们需要将句子边界信息传递给大小写校正分类网络。
由于大小写校正分类网络是前馈的且无上下文,每个时间步必须嵌入其是否为句首词。
因此,我们将二进制句子边界决策右移一位:如果标记N-1
是句子边界,标记N
是句首词。
将此与重新编码的文本拼接后,每个时间步包含其是否为SBD头部预测的句首词。 -
大小写预测
基于标点和句子边界信息,分类网络预测大小写。
由于大小写应在每个字符级别完成,分类网络对每个标记生成N
个预测,其中N
是子词长度。
(实际上,N
是最长子词长度,多余预测被忽略)。
此方案捕获首字母缩写词(如"NATO")和双大写词(如"MacDonald")。
后置标点标记
该模型预测以下子词后的"后置"标点标记集:
标记 | 描述 | 相关语言 |
---|---|---|
. | 拉丁语句号 | 多种 |
, | 拉丁语逗号 | 多种 |
? | 拉丁语问号 | 多种 |
? | 全角问号 | 中文、日语 |
, | 全角逗号 | 中文、日语 |
。 | 全角句号 | 中文、日语 |
、 | 顿号 | 中文、日语 |
・ | 中点 | 日语 |
। | 丹达符 | 印地语、孟加拉语、奥里亚语 |
؟ | 阿拉伯语问号 | 阿拉伯语 |
; | 希腊语问号 | 希腊语 |
። | 埃塞俄比亚语句号 | 阿姆哈拉语 |
፣ | 埃塞俄比亚语逗号 | 阿姆哈拉语 |
፧ | 埃塞俄比亚语问号 | 阿姆哈拉语 |
前置标点标记
该模型预测以下子词前的"前置"标点标记集:
标记 | 描述 | 相关语言 |
---|---|---|
¿ | 反问号 | 西班牙语 |
训练详情
该模型在NeMo框架中训练。
训练数据
该模型使用WMT的News Crawl数据训练。
每种语言使用100万行文本,少数低资源语言可能使用较少数据。
语言选择基于News Crawl语料库是否包含足够质量的可靠数据,由作者判断。
局限性
该模型在新闻数据上训练,可能在对话或非正式数据上表现不佳。
该模型每个子词仅预测一次标点。
这意味着某些首字母缩写词(如'U.S.')无法正确加标点。
此妥协基于两点:
- 此类缩写词在多语言模型中较为罕见
- 带标点的缩写词通常按字母发音(如'U.S.' vs. 'NATO')。
由于该模型的预期用例是ASR系统输出,假定此类发音会转录为单独标记(如'u s' vs. 'us',但这取决于模型的预处理)。
此外,该模型可能达不到生产质量。
每种语言"仅"训练100万行数据,且开发集可能因网络抓取新闻数据的性质而存在噪声。
这也是一个基础规模模型,处理多种语言和任务,容量可能有限。
该模型的最大序列长度为128,对NLP问题而言相对较短。
分析此版本的局限性后,未来版本将尝试改进以下方面:
- 更长的最大长度
- 更多训练数据
- 更多训练步骤
评估
在这些指标中,请注意:
-
数据存在噪声
-
句子边界和大小写校正依赖于预测的标点,这是最困难的任务且有时不正确。
当基于参考标点时,大多数语言的大小写校正和SBD实际上接近100%。 -
标点可能具有主观性。例如:
Hola mundo, ¿cómo estás?
或
Hola mundo. ¿Cómo estás?
当句子更长且更实用时,此类歧义普遍存在并影响所有三项分析。
测试数据和示例生成
每个测试示例通过以下流程生成:
- 连接5个随机句子
- 将连接后的句子转为小写
- 删除所有标点
数据是News Crawl的保留部分,已去重。
每种语言使用2000行数据,生成2000个独特的5句示例。
每个示例的最后4个句子从2000行中随机采样,可能重复。
超过模型最大长度的示例被截断。
受影响的句子数量可从"句号"支持中估算:2000个句子,每个示例5句,我们预期总共10000个句号目标。
选定语言评估报告
该模型可能很快更新,因此仅报告以下部分语言。
英语
标点后测试报告:
标签 精确率 召回率 F1 支持数
<NULL> (label_id: 0) 98.71 98.66 98.68 156605
. (label_id: 1) 87.72 88.85 88.28 8752
, (label_id: 2) 68.06 67.81 67.93 5216
? (label_id: 3) 79.38 77.20 78.27 693
? (label_id: 4) 0.00 0.00 0.00 0
, (label_id: 5) 0.00 0.00 0.00 0
。 (label_id: 6) 0.00 0.00 0.00 0
、 (label_id: 7) 0.00 0.00 0.00 0
・ (label_id: 8) 0.00 0.00 0.00 0
। (label_id: 9) 0.00 0.00 0.00 0
؟ (label_id: 10) 0.00 0.00 0.00 0
، (label_id: 11) 0.00 0.00 0.00 0
; (label_id: 12) 0.00 0.00 0.00 0
። (label_id: 13) 0.00 0.00 0.00 0
፣ (label_id: 14) 0.00 0.00 0.00 0
፧ (label_id: 15) 0.00 0.00 0.00 0
-------------------
微平均 97.13 97.13 97.13 171266
宏平均 83.46 83.13 83.29 171266
加权平均 97.13 97.13 97.13 171266
大小写测试报告:
标签 精确率 召回率 F1 支持数
小写 (label_id: 0) 99.63 99.49 99.56 526612
大写 (label_id: 1) 89.19 91.84 90.50 24161
-------------------
微平均 99.15 99.15 99.15 550773
宏平均 94.41 95.66 95.03 550773
加权平均 99.17 99.15 99.16 550773
分段测试报告:
标签 精确率 召回率 F1 支持数
非句尾 (label_id: 0) 99.37 99.42 99.39 162044
句尾 (label_id: 1) 89.75 88.84 89.29 9222
-------------------
微平均 98.85 98.85 98.85 171266
宏平均 94.56 94.13 94.34 171266
加权平均 98.85 98.85 98.85 171266
西班牙语
标点前测试报告:
标签 精确率 召回率 F1 支持数
<NULL> (label_id: 0) 99.94 99.92 99.93 185535
¿ (label_id: 1) 55.01 64.86 59.53 296
-------------------
微平均 99.86 99.86 99.86 185831
宏平均 77.48 82.39 79.73 185831
加权平均 99.87 99.86 99.87 185831
标点后测试报告:
标签 精确率 召回率 F1 支持数
<NULL> (label_id: 0) 98.74 98.86 98.80 170282
. (label_id: 1) 90.07 89.58 89.82 9959
, (label_id: 2) 68.33 67.00 67.66 5300
? (label_id: 3) 70.25 58.62 63.91 290
? (label_id: 4) 0.00 0.00 0.00 0
, (label_id: 5) 0.00 0.00 0.00 0
。 (label_id: 6) 0.00 0.00 0.00 0
、 (label_id: 7) 0.00 0.00 0.00 0
・ (label_id: 8) 0.00 0.00 0.00 0
। (label_id: 9) 0.00 0.00 0.00 0
؟ (label_id: 10) 0.00 0.00 0.00 0
، (label_id: 11) 0.00 0.00 0.00 0
; (label_id: 12) 0.00 0.00 0.00 0
። (label_id: 13) 0.00 0.00 0.00 0
፣ (label_id: 14) 0.00 0.00 0.00 0
፧ (label_id: 15) 0.00 0.00 0.00 0
-------------------
微平均 97.39 97.39 97.39 185831
宏平均 81.84 78.51 80.05 185831
加权平均 97.36 97.39 97.37 185831
大小写测试报告:
标签 精确率 召回率 F1 支持数
小写 (label_id: 0) 99.62 99.60 99.61 555041
大写 (label_id: 1) 90.60 91.06 90.83 23538
-------------------
微平均 99.25 99.25 99.25 578579
宏平均 95.11 95.33 95.22 578579
加权平均 99.25 99.25 99.25 578579
分段测试报告:
标签 精确率 召回率 F1 支持数
非句尾 (label_id: 0) 99.44 99.54 99.49 175908
句尾 (label_id: 1) 91.68 89.98 90.82 9923
-------------------
微平均 99.03 99.03 99.03 185831
宏平均 95.56 94.76 95.16 185831
加权平均 99.02 99.03 99.02 185831
中文
标点后测试报告:
标签 精确率 召回率 F1 支持数
<NULL> (label_id: 0) 98.82 97.34 98.07 147920
. (label_id: 1) 0.00 0.00 0.00 0
, (label_id: 2) 0.00 0.00 0.00 0
? (label_id: 3) 0.00 0.00 0.00 0
? (label_id: 4) 85.77 80.71 83.16 560
, (label_id: 5) 59.88 78.02 67.75 6901
。 (label_id: 6) 92.50 93.92 93.20 10988
、 (label_id: 7) 0.00 0.00 0.00 0
・ (label_id: 8) 0.00 0.00 0.00 0
। (label_id: 9) 0.00 0.00 0.00 0
؟ (label_id: 10) 0.00 0.00 0.00 0
، (label_id: 11) 0.00 0.00 0.00 0
; (label_id: 12) 0.00 0.00 0.00 0
። (label_id: 13) 0.00 0.00 0.00 0
፣ (label_id: 14) 0.00 0.00 0.00 0
፧ (label_id: 15) 0.00 0.00 0.00 0
-------------------
微平均 96.25 96.25 96.25 166369
宏平均 84.24 87.50 85.55 166369
加权平均 96.75 96.25 96.45 166369
大小写测试报告:
标签 精确率 召回率 F1 支持数
小写 (label_id: 0) 97.07 92.39 94.67 394
大写 (label_id: 1) 70.59 86.75 77.84 83
-------------------
微平均 91.40 91.40 91.40 477
宏平均 83.83 89.57 86.25 477
加权平均 92.46 91.40 91.74 477
分段测试报告:
标签 精确率 召回率 F1 支持数
非句尾 (label_id: 0) 99.58 99.53 99.56 156369
句尾 (label_id: 1) 92.77 93.50 93.13 10000
-------------------
微平均 99.17 99.17 99.17 166369
宏平均 96.18 96.52 96.35 166369
加权平均 99.17 99.17 99.17 166369
印地语
标点后测试报告:
标签 精确率 召回率 F1 支持数
<NULL> (label_id: 0) 99.58 99.59 99.59 176743
. (label_id: 1) 0.00 0.00 0.00 0
, (label_id: 2) 68.32 65.23 66.74 1815
? (label_id: 3) 60.27 44.90 51.46 98
? (label_id: 4) 0.00 0.00 0.00 0
, (label_id: 5) 0.00 0.00 0.00 0
。 (label_id: 6) 0.00 0.00 0.00 0
、 (label_id: 7) 0.00 0.00 0.00 0
・ (label_id: 8) 0.00 0.00 0.00 0
। (label_id: 9) 96.45 97.43 96.94 10136
؟ (label_id: 10) 0.00 0.00 0.00 0
، (label_id: 11) 0.00 0.00 0.00 0
; (label_id: 12) 0.00 0.00 0.00 0
። (label_id: 13) 0.00 0.00 0.00 0
፣ (label_id: 14) 0.00 0.00 0.00 0
፧ (label_id: 15) 0.00 0.00 0.00 0
-------------------
微平均 99.11 99.11 99.11 188792
宏平均 81.16 76.79 78.68 188792
加权平均 99.10 99.11 99.10 188792
大小写测试报告:
标签 精确率 召回率 F1 支持数
小写 (label_id: 0) 98.25 95.06 96.63 708
大写 (label_id: 1) 89.46 96.12 92.67 309
-------------------
微平均 95.38 95.38 95.38 1017
宏平均 93.85 95.59 94.65 1017
加权平均 95.58 95.38 95.42 1017
分段测试报告:
标签 精确率 召回率 F1 支持数
非句尾 (label_id: 0) 99.87 99.85 99.86 178892
句尾 (label_id: 1) 97.38 97.58 97.48 9900
-------------------
微平均 99.74 99.74 99.74 188792
宏平均 98.62 98.72 98.67 188792
加权平均 99.74 99.74 99.74 188792
阿姆哈拉语
标点后测试报告:
标签 精确率 召回率 F1 支持数
<NULL> (label_id: 0) 99.58 99.42 99.50 236298
. (label_id: 1) 0.00 0.00 0.00 0
, (label_id: 2) 0.00 0.00 0.00 0
? (label_id: 3) 0.00 0.00 0.00 0
? (label_id: 4) 0.00 0.00 0.00 0
, (label_id: 5) 0.00 0.00 0.00 0
。 (label_id: 6) 0.00 0.00 0.00 0
、 (label_id: 7) 0.00 0.00 0.00 0
・ (label_id: 8) 0.00 0.00 0.00 0
। (label_id: 9) 0.00 0.00 0.00 0
؟ (label_id: 10) 0.00 0.00 0.00 0
، (label_id: 11) 0.00 0.00 0.00 0
; (label_id: 12) 0.00 0.00 0.00 0
። (label_id: 13) 89.79 95.24 92.44 9169
፣ (label_id: 14) 66.85 56.58 61.29 1504
፧ (label_id: 15) 67.67 83.72 74.84 215
-------------------
微平均 98.99 98.99 98.99 247186
宏平均 80.97 83.74 82.02 247186
加权平均 98.99 98.99 98.98 247186
大小写测试报告:
标签 精确率 召回率 F1 支持数
小写 (label_id: 0) 96.65 99.78 98.19 1360
大写 (label_id: 1) 98.90 85.13 91.50 316
-------------------
微平均 97.02 97.02 97.02 1676
宏平均 97.77 92.45 94.84 1676
加权平均 97.08 97.02 96.93 1676
分段测试报告:
标签 精确率 召回率 F1 支持数
非句尾 (label_id: 0) 99.85 99.74 99.80 239845
句尾 (label_id: 1) 91.72 95.25 93.45 7341
-------------------
微平均 99.60 99.60 99.60 247186
宏平均 95.79 97.49 96.62 247186
加权平均 99.61 99.60 99.61 247186








