license: apache-2.0
library_name: generic
tags:
- 文本生成文本
- 标点符号
- 句子边界检测
- 大小写校正
- 真实大小写
language:
- 南非荷兰语
- 阿姆哈拉语
- 阿拉伯语
- 保加利亚语
- 孟加拉语
- 德语
- 希腊语
- 英语
- 西班牙语
- 爱沙尼亚语
- 波斯语
- 芬兰语
- 法语
- 古吉拉特语
- 印地语
- 克罗地亚语
- 匈牙利语
- 印尼语
- 冰岛语
- 意大利语
- 日语
- 哈萨克语
- 卡纳达语
- 韩语
- 吉尔吉斯语
- 立陶宛语
- 拉脱维亚语
- 马其顿语
- 马拉雅拉姆语
- 马拉地语
- 荷兰语
- 奥里亚语
- 旁遮普语
- 波兰语
- 普什图语
- 葡萄牙语
- 罗马尼亚语
- 俄语
- 卢旺达语
- 索马里语
- 塞尔维亚语
- 斯瓦希里语
- 泰米尔语
- 泰卢固语
- 土耳其语
- 乌克兰语
- 中文
widget:
- text: "hola amigo cómo estás es un día lluvioso hoy"
- text: "please rsvp for the party asap preferably before 8 pm tonight"
- text: "este modelo fue entrenado en un gpu a100 en realidad no se que dice esta frase lo traduje con nmt"
- text: "此模型向文本添加标点符号它支持47种语言并在a100gpu上接受过训练它可以在每种语言上运行而无需每种语言的特殊路径"
- text: "यह मॉडल 47 भाषाओं में विराम चिह्न जोड़ता है यह भाषा विशिष्ट पथ के बिना काम करता है यह प्रत्येक भाषा के लिए विशेष पथों के बिना प्रत्येक भाषा पर कार्य कर सकता है"
模型概述
这是一个基于xlm-roberta
微调的模型,用于在47种语言中恢复标点符号、正确大小写(首字母大写)以及检测句子边界(句号)。
使用方法
如果只是想体验模型功能,本页面的小工具已足够。如需离线使用模型,以下代码片段展示了如何通过封装器(由我编写,可通过PyPI
获取)和手动方式(使用本仓库中的ONNX和SentencePiece模型)使用该模型。
通过punctuators
包使用
点击查看封装器使用方式
使用此模型最简单的方法是安装punctuators:
$ pip install punctuators
但这只是一个ONNX和SentencePiece模型,因此您也可以按自己的方式运行。
punctuators
API的输入是一个字符串列表(批次)。每个字符串将被添加标点、正确大小写,并根据预测的句号进行分段。因此,输出将是一个字符串列表的列表:每个输入文本对应一个分段后的句子列表。若要禁用句号分割,使用m.infer(texts, apply_sbd=False)
。此时输出将是一个字符串列表:每个输入文本对应一个已添加标点和正确大小写的字符串。
示例用法
from typing import List
from punctuators.models import PunctCapSegModelONNX
m: PunctCapSegModelONNX = PunctCapSegModelONNX.from_pretrained(
"1-800-BAD-CODE/xlm-roberta_punctuation_fullstop_truecase"
)
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 ሺህ ወታደሮቿንም እንዳስወጣች የሶማሊያው ዳልሳን ሬድዮ ዘግቦ ነበር ጸጥታ ሃይሉና ህዝቡ ተቀናጅቶ በመስራቱ በመዲናዋ ላይ የታቀደው የጥፋት ሴራ ከሽፏል",
"こんにちは友人" "調子はどう" "今日は雨の日でしたね" "乾いた状態を保つために一日中室内で過ごしました",
"hallo freund wie geht's es war heute ein regnerischer tag nicht wahr ich verbrachte den tag drinnen um trocken zu bleiben",
"हैलो दोस्त ये कैसा चल रहा है आज बारिश का दिन था न मैंने सूखा रहने के लिए दिन घर के अंदर बिताया",
"كيف تجري الامور كان يومًا ممطرًا اليوم أليس كذلك قضيت اليوم في الداخل لأظل جافًا",
]
results: List[List[str]] = m.infer(
texts=input_texts, apply_sbd=True,
)
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 ሺህ ወታደሮቿንም እንዳስወጣች የሶማሊያው ዳልሳን ሬድዮ ዘግቦ ነበር።
ጸጥታ ሃይሉና ህዝቡ ተቀናጅቶ በመስራቱ በመዲናዋ ላይ የታቀደው የጥፋት ሴራ ከሽፏል።
输入: こんにちは友人調子はどう今日は雨の日でしたね乾いた状態を保つために一日中室内で過ごしました
输出:
こんにちは、友人、調子はどう?
今日は雨の日でしたね。
乾いた状態を保つために、一日中、室内で過ごしました。
输入: hallo freund wie geht's es war heute ein regnerischer tag nicht wahr ich verbrachte den tag drinnen um trocken zu bleiben
输出:
Hallo Freund, wie geht's?
Es war heute ein regnerischer Tag, nicht wahr?
Ich verbrachte den Tag drinnen, um trocken zu bleiben.
输入: हैलो दोस्त ये कैसा चल रहा है आज बारिश का दिन था न मैंने सूखा रहने के लिए दिन घर के अंदर बिताया
输出:
हैलो दोस्त, ये कैसा चल रहा है?
आज बारिश का दिन था न, मैंने सूखा रहने के लिए दिन घर के अंदर बिताया।
输入: كيف تجري الامور كان يومًا ممطرًا اليوم أليس كذلك قضيت اليوم في الداخل لأظل جافًا
输出:
كيف تجري الامور؟
كان يومًا ممطرًا اليوم، أليس كذلك؟
قضيت اليوم في الداخل لأظل جافًا.
手动使用
如果希望在不使用封装器的情况下使用ONNX和SP模型,请参考以下示例。
点击查看手动使用方式
from typing import List
import numpy as np
import onnxruntime as ort
from huggingface_hub import hf_hub_download
from omegaconf import OmegaConf
from sentencepiece import SentencePieceProcessor
spe_path = hf_hub_download(repo_id="1-800-BAD-CODE/xlm-roberta_punctuation_fullstop_truecase", filename="sp.model")
onnx_path = hf_hub_download(repo_id="1-800-BAD-CODE/xlm-roberta_punctuation_fullstop_truecase", filename="model.onnx")
config_path = hf_hub_download(
repo_id="1-800-BAD-CODE/xlm-roberta_punctuation_fullstop_truecase", filename="config.yaml"
)
tokenizer: SentencePieceProcessor = SentencePieceProcessor(spe_path)
ort_session: ort.InferenceSession = ort.InferenceSession(onnx_path)
config = OmegaConf.load(config_path)
pre_labels: List[str] = config.pre_labels
post_labels: List[str] = config.post_labels
null_token = config.get("null_token", "<NULL>")
acronym_token = config.get("acronym_token", "<ACRONYM>")
max_len = config.max_length