模型:
1-800-BAD-CODE/punct_cap_seg_47_language
该模型接受以47种语言为输入的小写、无标点、未分割的文本,并进行标点符号还原、大小写转换和句子边界检测(分割)。
所有语言都使用相同的算法进行处理,无需语言标签或语言特定的分支。这包括连续脚本和非连续脚本的语言、预测语言特定的标点符号等。
这个模型很有趣,但结果可能还有待提高。我建议试用以下更新而更好的模型:
使用该模型的简单方法是安装punctuators:
pip install punctuators
运行以下脚本将加载该模型并运行一些文本:
使用示例from punctuators.models import PunctCapSegModelONNX # Instantiate this model # This will download the ONNX and SPE models. To clean up, delete this model from your HF cache directory. m = PunctCapSegModelONNX.from_pretrained("pcs_47lang") # Define some input texts to punctuate 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()预期输出
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"是专有名词,这就是为什么模型一致将类似的令牌大写的原因。
此模型通常遵循下图所示的图形,并提供了每个步骤的简要描述。
编码:模型首先使用子词分词器对文本进行分词。这里使用的分词器是一个包含64k个词汇大小的SentencePiece模型。接下来,将输入序列编码为具有512个模型维度的基础大小Transformer编码器,包含6层。
后标点符号:然后,将编码的序列输入到分类网络中,预测“后”标点符号令牌。后标点符号是可能出现在单词之后的标点符号令牌,基本上是大多数常见标点符号。后标点符号每个子词预测一次-以下是进一步讨论。
重新编码:所有后续任务(大小写转换、句子边界检测和“前”标点符号)都依赖于“后”标点符号。因此,我们必须将所有后续预测都条件化为后标点符号令牌。为此任务,预测的标点符号令牌被输入到嵌入层中,其中嵌入表示每个可能的标点符号令牌。每个时间步都被映射到一个4维嵌入,它与512维编码连接。连接的联合表示被重新编码,以使每个时间步都具有全局上下文,以将标点符号预测融入到后续任务中。
前标点符号:在重新编码之后,另一个分类网络预测“前”标点符号,即可能出现在单词之前的标点符号令牌。实际上,这意味着西班牙语和阿斯图里亚斯语中的倒问号“¿”。请注意,“¿”只能出现在预测到“?”的情况下,因此有了相关性。
句子边界检测:与“前”标点符号平行的是,另一个分类网络从重新编码的文本中预测句子边界。在所有语言中,只有在预测到潜在的句号时才会出现句子边界,因此有了相关性。
移动和连接句子边界:在许多语言中,每个句子的第一个字符应该大写。因此,我们应该将句子边界信息提供给真实情况分类网络。由于真实情况分类网络是前馈的且没有上下文,因此每个时间步必须嵌入它是否是句子的第一个单词。因此,我们将二进制句子边界决策向右移动一位:如果标记N-1是句子边界,则标记N是句子的第一个单词。将其与重新编码的文本连接起来,每个时间步都包含了由SBD头预测的是否是句子的第一个单词。
真实情况预测:在具备标点符号和句子边界的知识后,分类网络预测真实情况。由于真实情况应该基于每个字符进行,分类网络对每个标记进行N次预测,其中N是子词的长度(实际上,N是最长可能的子词,并且额外的预测被忽略)。此方案捕捉了首字母缩略词,例如"NATO",以及双大写单词,例如"MacDonald"。
该模型在每个子词之后预测以下一组"后"标点符号令牌:
Token | Description | Relevant Languages |
---|---|---|
. | Latin full stop | Many |
, | Latin comma | Many |
? | Latin question mark | Many |
? | Full-width question mark | Chinese, Japanese |
, | Full-width comma | Chinese, Japanese |
。 | Full-width full stop | Chinese, Japanese |
、 | Ideographic comma | Chinese, Japanese |
・ | Middle dot | Japanese |
। | Danda | Hindi, Bengali, Oriya |
؟ | Arabic question mark | Arabic |
; | Greek question mark | Greek |
። | Ethiopic full stop | Amharic |
፣ | Ethiopic comma | Amharic |
፧ | Ethiopic question mark | Amharic |
该模型在每个子词之前预测以下一组"前"标点符号令牌:
Token | Description | Relevant Languages |
---|---|---|
¿ | Inverted question mark | Spanish |
此模型是在NeMo框架中训练的。
此模型使用WMT的新闻抓取数据进行训练。
使用了每种语言的100万行文本,除了一些低资源语言可能使用了更少的数据。语言的选择基于作者判断,新闻抓取语料库是否包含足够可靠的高质量数据。
该模型是在新闻数据上训练的,对于会话或非正式数据可能表现不佳。
该模型一次只预测一次标点符号每个子词。这意味着一些缩略语(例如'U.S.')可能无法正确标点。出于以下两个原因,该让步是被接受的:
此外,该模型可能不具备生产质量。由于每种语言仅训练了100万行,而且由于网络抓取的新闻数据的性质,开发集可能存在噪声。这也是一个具有多种语言和多种任务的基本规模的模型,因此可能容量有限。
该模型的最大序列长度为128,对于NLP问题来说相对较短。
在分析了该版本的限制之后,未来版本的模型将尝试改进以下几点:
在这些指标中,请记住:
Hola mundo, ¿cómo estás?
或者
Hola mundo. ¿Cómo estás?
当句子较长且更实际时,这些模棱两可的情况将很常见,并影响所有3个分析结果。
每个测试示例都是使用以下过程生成的:
这些数据是来自News Crawl抓取数据的保留部分。每种语言使用了每种语言的2,000行数据,每行数据由5个句子构成。每个示例的最后4个句子是从这2,000个句子中随机抽取的,可能会有重复。
超过模型最大长度的示例将被截断。可以从“句号”支持估计出受影响的句子数量:有2,000个句子和每个示例的5个句子,我们预计总共会有10,000个句号目标。
该模型很可能很快会进行更新,因此以下仅报告了少数语言。
英语punct_post test report: label precision recall f1 support <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 ------------------- micro avg 97.13 97.13 97.13 171266 macro avg 83.46 83.13 83.29 171266 weighted avg 97.13 97.13 97.13 171266 cap 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西班牙语
punct_pre test report: label precision recall f1 support <NULL> (label_id: 0) 99.94 99.92 99.93 185535 ¿ (label_id: 1) 55.01 64.86 59.53 296 ------------------- micro avg 99.86 99.86 99.86 185831 macro avg 77.48 82.39 79.73 185831 weighted avg 99.87 99.86 99.87 185831 punct_post test report: label precision recall f1 support <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 ------------------- micro avg 97.39 97.39 97.39 185831 macro avg 81.84 78.51 80.05 185831 weighted avg 97.36 97.39 97.37 185831 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中文
punct_post test report: label precision recall f1 support <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 ------------------- micro avg 96.25 96.25 96.25 166369 macro avg 84.24 87.50 85.55 166369 weighted avg 96.75 96.25 96.45 166369 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印地文
punct_post test report: label precision recall f1 support <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 ------------------- micro avg 99.11 99.11 99.11 188792 macro avg 81.16 76.79 78.68 188792 weighted avg 99.10 99.11 99.10 188792 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阿姆哈拉语
punct_post test report: label precision recall f1 support <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 ------------------- micro avg 98.99 98.99 98.99 247186 macro avg 80.97 83.74 82.02 247186 weighted avg 98.99 98.99 98.98 247186 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