T5 Russian Spell
用于校正从音频识别文本的俄语拼写校正模型,可与wav2vec2音频识别模型配合使用
下载量 1,910
发布时间 : 3/29/2022
模型简介
该模型主要用于校正从俄语语音识别系统(如wav2vec2)输出的文本,提高识别结果的准确性。已在随机YouTube视频上进行测试验证。
模型特点
音频识别文本校正
专门针对语音识别系统输出的俄语文本进行拼写和语法校正
与wav2vec2集成
可与UrukHan/wav2vec2-russian语音识别模型无缝配合使用
上下文感知校正
能够理解上下文进行更准确的拼写和语法修正
模型能力
俄语文本拼写校正
语法错误修正
语音识别后处理
文本规范化
使用案例
语音识别增强
语音识别结果校正
对语音识别系统输出的俄语文本进行自动校正
显著提高语音识别文本的准确性和可读性
内容处理
自动字幕校正
校正视频自动生成字幕中的拼写和语法错误
提高字幕质量和观看体验
🚀 t5-russian-spell
这是一个用于纠正从音频识别文本的模型。可以将我的音频识别模型(https://huggingface.co/UrukHan/wav2vec2-russian )的识别结果输入到这个模型中。我已经在随机选取的YouTube视频上进行了测试。
🚀 快速开始
运行示例代码
你可以在Colab中运行以下示例代码来查看模型的运行结果:点击此处查看Colab代码
# 安装transformers库
!pip install transformers
# 导入库
from transformers import AutoModelForSeq2SeqLM, T5TokenizerFast
# 指定从模型中心选择的模型名称
MODEL_NAME = 'UrukHan/t5-russian-spell'
MAX_INPUT = 256
# 加载模型和分词器
tokenizer = T5TokenizerFast.from_pretrained(MODEL_NAME)
model = AutoModelForSeq2SeqLM.from_pretrained(MODEL_NAME)
# 输入数据(可以是短语数组或文本)
input_sequences = ['сеглдыя хорош ден', 'когд а вы прдет к нам в госи'] # 也可以使用单个短语: input_sequences = 'сеглдыя хорош ден'
task_prefix = "Spell correct: " # 数据分词
if type(input_sequences) != list: input_sequences = [input_sequences]
encoded = tokenizer(
[task_prefix + sequence for sequence in input_sequences],
padding="longest",
max_length=MAX_INPUT,
truncation=True,
return_tensors="pt",
)
predicts = model.generate(encoded) # 预测
tokenizer.batch_decode(predicts, skip_special_tokens=True) # 解码数据
运行训练和保存模型
你可以使用以下配置好的笔记本在Hugging Face Hub上运行训练并将模型保存到自己的仓库中:点击此处查看Colab代码
# 安装库
!pip install datasets
!apt install git-lfs
!pip install transformers
!pip install sentencepiece
!pip install rouge_score
# 导入库
import numpy as np
from datasets import Dataset
import tensorflow as
import nltk
from transformers import T5TokenizerFast, Seq2SeqTrainingArguments, Seq2SeqTrainer, AutoModelForSeq2SeqLM, DataCollatorForSeq2Seq
import torch
from transformers.optimization import Adafactor, AdafactorSchedule
from datasets import load_dataset, load_metric
# 加载参数
raw_datasets = load_dataset("xsum")
metric = load_metric("rouge")
nltk.download('punkt')
# 输入你的Hugging Face Hub密钥
from huggingface_hub import notebook_login
notebook_login()
# 定义参数
REPO = "t5-russian-spell" # 输入仓库名称
MODEL_NAME = "UrukHan/t5-russian-spell" # 输入从模型中心选择的模型名称
MAX_INPUT = 256 # 输入最大输入数据长度(以标记为单位)(输入短语的单词长度(可以将半个单词视为一个标记))
MAX_OUTPUT = 256 # 输入最大预测长度(以标记为单位)(对于摘要任务或其他输出较短的任务,可以减小此值)
BATCH_SIZE = 8
DATASET = 'UrukHan/t5-russian-spell_I' # 输入数据集名称
# 加载数据集,使用其他类型的数据将在下面描述
data = load_dataset(DATASET)
# 加载模型和分词器
tokenizer = T5TokenizerFast.from_pretrained(MODEL_NAME)
model = AutoModelForSeq2SeqLM.from_pretrained(MODEL_NAME)
model.config.max_length = MAX_OUTPUT # 默认值为20,因此在所有模型中,输出序列都会被截断
# 第一次保存到仓库后可以注释掉,这不是必需的
tokenizer.push_to_hub(repo_name)
train = data['train']
test = data['test'].train_test_split(0.02)['test'] # 减小测试集,以免在各轮训练之间等待很长时间来计算误差
data_collator = DataCollatorForSeq2Seq(tokenizer, model=model) #return_tensors="tf"
def compute_metrics(eval_pred):
predictions, labels = eval_pred
decoded_preds = tokenizer.batch_decode(predictions, skip_special_tokens=True)
# 替换标签中的-100,因为我们无法对其进行解码
labels = np.where(labels != -100, labels, tokenizer.pad_token_id)
decoded_labels = tokenizer.batch_decode(labels, skip_special_tokens=True)
# Rouge要求每个句子后有一个换行符
decoded_preds = ["\n".join(nltk.sent_tokenize(pred.strip())) for pred in decoded_preds]
decoded_labels = ["\n".join(nltk.sent_tokenize(label.strip())) for label in decoded_labels]
result = metric.compute(predictions=decoded_preds, references=decoded_labels, use_stemmer=True)
# 提取一些结果
result = {key: value.mid.fmeasure * 100 for key, value in result.items()}
# 添加平均生成长度
prediction_lens = [np.count_nonzero(pred != tokenizer.pad_token_id) for pred in predictions]
result["gen_len"] = np.mean(prediction_lens)
return {k: round(v, 4) for k, v in result.items()}
training_args = Seq2SeqTrainingArguments(
output_dir = REPO,
#overwrite_output_dir=True,
evaluation_strategy='steps',
#learning_rate=2e-5,
eval_steps=5000,
save_steps=5000,
num_train_epochs=1,
predict_with_generate=True,
per_device_train_batch_size=BATCH_SIZE,
per_device_eval_batch_size=BATCH_SIZE,
fp16=True,
save_total_limit=2,
#generation_max_length=256,
#generation_num_beams=4,
weight_decay=0.005,
#logging_dir='logs',
push_to_hub=True,
)
# 手动选择优化器。T5在原始架构中使用Adafactor优化器
optimizer = Adafactor(
model.parameters(),
lr=1e-5,
eps=(1e-30, 1e-3),
clip_threshold=1.0,
decay_rate=-0.8,
beta1=None,
weight_decay=0.0,
relative_step=False,
scale_parameter=False,
warmup_init=False,
)
lr_scheduler = AdafactorSchedule(optimizer)
trainer = Seq2SeqTrainer(
model=model,
args=training_args,
train_dataset = train,
eval_dataset = test,
optimizers = (optimizer, lr_scheduler),
tokenizer = tokenizer,
compute_metrics=compute_metrics
)
trainer.train()
trainer.push_to_hub()
数据转换示例
以下是将数组转换为适合此网络格式的示例代码:
input_data = ['удач почти отнее отвернулась', 'в хааоде проведения чемпиониавта мира дветысячивосемнандцтая лгодаа']
output_data = ['Удача почти от нее отвернулась', 'в ходе проведения чемпионата мира две тысячи восемнадцатого года']
# 对输入数据进行分词
task_prefix = "Spell correct: "
input_sequences = input_data
encoding = tokenizer(
[task_prefix + sequence for sequence in input_sequences],
padding="longest",
max_length=MAX_INPUT,
truncation=True,
return_tensors="pt",
)
input_ids, attention_mask = encoding.input_ids, encoding.attention_mask
# 对输出数据进行分词
target_encoding = tokenizer(output_data, padding="longest", max_length=MAX_OUTPUT, truncation=True)
labels = target_encoding.input_ids
# 将标签中的填充标记ID替换为-100
labels = torch.tensor(labels)
labels[labels == tokenizer.pad_token_id] = -100
# 将我们的数据转换为数据集格式
data = Dataset.from_pandas(pd.DataFrame({'input_ids': list(np.array(input_ids)), 'attention_mask': list(np.array(attention_mask)), 'labels': list(np.array(labels))}))
data = data.train_test_split(0.02)
# 然后将其输入到我们的训练器中: train_dataset = data['train'], eval_dataset = data['test']
✨ 主要特性
该模型能够有效纠正音频识别文本中的拼写错误,以下是一个对比示例:
语音识别输出 | 模型纠错输出 |
---|---|
ывсем привет выныканалетоп армии и это двадцать пятый день спец операций на украине ет самый главной новости российские военные ракетами кинжалы калибр уничтожили крупную военную топливную базу украины ракетным ударом по населенному пункту под жетамиром уничтжены более стаукраинских военных в две тысячи двадцать втором году | Всем привет! Вы в курсе новостей от армии. И это 25 день спецопераций на Украине. Есть самые главные новости. Российские военные ракетами «Кинжалы» и «Кинжалы» калибра уничтожили крупную военную топливную базу Украины. Ракетным ударом по населенному пункту под Жетамиром уничтожены более ста украинских военных в 2022г. |
📦 安装指南
在运行代码前,你需要安装以下依赖库:
!pip install datasets
!apt install git-lfs
!pip install transformers
!pip install sentencepiece
!pip install rouge_score
📚 详细文档
训练数据集
以下是用于训练该模型的数据集:
Bart Large Cnn
MIT
基于英语语料预训练的BART模型,专门针对CNN每日邮报数据集进行微调,适用于文本摘要任务
文本生成 英语
B
facebook
3.8M
1,364
Parrot Paraphraser On T5
Parrot是一个基于T5的释义框架,专为加速训练自然语言理解(NLU)模型而设计,通过生成高质量释义实现数据增强。
文本生成
Transformers

P
prithivida
910.07k
152
Distilbart Cnn 12 6
Apache-2.0
DistilBART是BART模型的蒸馏版本,专门针对文本摘要任务进行了优化,在保持较高性能的同时显著提升了推理速度。
文本生成 英语
D
sshleifer
783.96k
278
T5 Base Summarization Claim Extractor
基于T5架构的模型,专门用于从摘要文本中提取原子声明,是摘要事实性评估流程的关键组件。
文本生成
Transformers 英语

T
Babelscape
666.36k
9
Unieval Sum
UniEval是一个统一的多维评估器,用于自然语言生成任务的自动评估,支持多个可解释维度的评估。
文本生成
Transformers

U
MingZhong
318.08k
3
Pegasus Paraphrase
Apache-2.0
基于PEGASUS架构微调的文本复述模型,能够生成语义相同但表达不同的句子。
文本生成
Transformers 英语

P
tuner007
209.03k
185
T5 Base Korean Summarization
这是一个基于T5架构的韩语文本摘要模型,专为韩语文本摘要任务设计,通过微调paust/pko-t5-base模型在多个韩语数据集上训练而成。
文本生成
Transformers 韩语

T
eenzeenee
148.32k
25
Pegasus Xsum
PEGASUS是一种基于Transformer的预训练模型,专门用于抽象文本摘要任务。
文本生成 英语
P
google
144.72k
198
Bart Large Cnn Samsum
MIT
基于BART-large架构的对话摘要模型,专为SAMSum语料库微调,适用于生成对话摘要。
文本生成
Transformers 英语

B
philschmid
141.28k
258
Kobart Summarization
MIT
基于KoBART架构的韩语文本摘要模型,能够生成韩语新闻文章的简洁摘要。
文本生成
Transformers 韩语

K
gogamza
119.18k
12
精选推荐AI模型
Llama 3 Typhoon V1.5x 8b Instruct
专为泰语设计的80亿参数指令模型,性能媲美GPT-3.5-turbo,优化了应用场景、检索增强生成、受限生成和推理任务
大型语言模型
Transformers 支持多种语言

L
scb10x
3,269
16
Cadet Tiny
Openrail
Cadet-Tiny是一个基于SODA数据集训练的超小型对话模型,专为边缘设备推理设计,体积仅为Cosmo-3B模型的2%左右。
对话系统
Transformers 英语

C
ToddGoldfarb
2,691
6
Roberta Base Chinese Extractive Qa
基于RoBERTa架构的中文抽取式问答模型,适用于从给定文本中提取答案的任务。
问答系统 中文
R
uer
2,694
98