Alikhan Urumov
commited on
Commit
•
d420b53
1
Parent(s):
b3904bb
update model card README.md
Browse files
README.md
CHANGED
@@ -4,229 +4,56 @@ tags:
|
|
4 |
model-index:
|
5 |
- name: t5-russian-spell
|
6 |
results: []
|
7 |
-
widget:
|
8 |
-
- text: "ывсем привет выныканалетоп армии и это двадцать пятый день спец операций на украине ет самый главной новости российские военные ракетами кинжалы калибр уничтожили крупную военную топливную базу украины ракетным ударом по населенному пункту под жетамиром уничтжены более стаукраинских военных"
|
9 |
---
|
10 |
|
11 |
<!-- This model card has been generated automatically according to the information the Trainer had access to. You
|
12 |
should probably proofread and complete it, then remove this comment. -->
|
13 |
-
---
|
14 |
-
# t5-russian-spell
|
15 |
-
---
|
16 |
-
модель для исправление текста из распознаного аудио. моя модлеь для распознования аудио https://huggingface.co/UrukHan/wav2vec2-russian и его результаты можно закидывать в эту модель. тестил на видео случайном с ютюба
|
17 |
-
|
18 |
-
<table border="0">
|
19 |
-
<tr>
|
20 |
-
<td><b style="font-size:30px">Output wav2vec2</b></td>
|
21 |
-
<td><b style="font-size:30px">Output spell correcor</b></td>
|
22 |
-
</tr>
|
23 |
-
<tr>
|
24 |
-
<td>ывсем привет выныканалетоп армии и это двадцать пятый день спец операций на украине ет самый главной новости российские военные ракетами кинжалы калибр уничтожили крупную военную топливную базу украины ракетным ударом по населенному пункту под жетамиром уничтжены более стаукраинских военных</td>
|
25 |
-
<td>Всем привет! Вы в курсе новостей от армии. И это 25 день спецопераций на Украине. Есть самые главные новости. Российские военные ракетами «Кинжалы» и «Кинжалы» калибра уничтожили крупную военную топливную базу Украины. Ракетным ударом по населенному пункту под Жетамиром уничтожены более ста украинских военных.</td>
|
26 |
-
</tr>
|
27 |
-
</table>
|
28 |
-
|
29 |
-
|
30 |
-
#
|
31 |
-
---
|
32 |
-
Датасеты для обучения:
|
33 |
-
UrukHan/t5-russian-spell_I : https://huggingface.co/datasets/UrukHan/t5-russian-spell_I
|
34 |
-
UrukHan/t5-russian-spell_II : https://huggingface.co/datasets/UrukHan/t5-russian-spell_II
|
35 |
-
UrukHan/t5-russian-spell_III : https://huggingface.co/datasets/UrukHan/t5-russian-spell_III
|
36 |
-
|
37 |
-
---
|
38 |
-
|
39 |
-
# Запуск на вывод результатов пример работы с комментариями в колабе https://colab.research.google.com/drive/1ame2va9_NflYqy4RZ07HYmQ0moJYy7w2?usp=sharing :
|
40 |
-
|
41 |
-
#
|
42 |
-
```python
|
43 |
-
# Установим библиотеку трансформеров
|
44 |
-
!pip install transformers
|
45 |
-
|
46 |
-
# Импортируем библиотеки
|
47 |
-
from transformers import AutoModelForSeq2SeqLM, T5TokenizerFast
|
48 |
-
|
49 |
-
# Зададим название выбронной модели из хаба
|
50 |
-
MODEL_NAME = 'UrukHan/t5-russian-spell'
|
51 |
-
MAX_INPUT = 256
|
52 |
-
|
53 |
-
# Загрузка модели и токенизатора
|
54 |
-
tokenizer = T5TokenizerFast.from_pretrained(MODEL_NAME)
|
55 |
-
model = AutoModelForSeq2SeqLM.from_pretrained(MODEL_NAME)
|
56 |
|
57 |
-
#
|
58 |
-
input_sequences = ['сеглдыя хорош ден', 'когд а вы прдет к нам в госи'] # или можно использовать одиночные фразы: input_sequences = 'сеглдыя хорош ден'
|
59 |
-
|
60 |
-
task_prefix = "Spell correct: " # Токенизирование данных
|
61 |
-
if type(input_sequences) != list: input_sequences = [input_sequences]
|
62 |
-
encoded = tokenizer(
|
63 |
-
[task_prefix + sequence for sequence in input_sequences],
|
64 |
-
padding="longest",
|
65 |
-
max_length=MAX_INPUT,
|
66 |
-
truncation=True,
|
67 |
-
return_tensors="pt",
|
68 |
-
)
|
69 |
-
|
70 |
-
predicts = model.generate(encoded) # # Прогнозирование
|
71 |
-
|
72 |
-
tokenizer.batch_decode(predicts, skip_special_tokens=True) # Декодируем данные
|
73 |
-
```
|
74 |
-
#
|
75 |
-
---
|
76 |
-
#Настроенный блокнот для запуска обучения и сохранения модели в свой репозиторий на huggingface hub:
|
77 |
-
#https://colab.research.google.com/drive/1H4IoasDqa2TEjGivVDp-4Pdpm0oxrCWd?usp=sharing
|
78 |
-
#
|
79 |
-
```python
|
80 |
-
# Установка библиотек
|
81 |
-
!pip install datasets
|
82 |
-
!apt install git-lfs
|
83 |
-
!pip install transformers
|
84 |
-
!pip install sentencepiece
|
85 |
-
!pip install rouge_score
|
86 |
-
|
87 |
-
# Импорт библиотек
|
88 |
-
import numpy as np
|
89 |
-
from datasets import Dataset
|
90 |
-
import tensorflow as
|
91 |
-
import nltk
|
92 |
-
from transformers import T5TokenizerFast, Seq2SeqTrainingArguments, Seq2SeqTrainer, AutoModelForSeq2SeqLM, DataCollatorForSeq2Seq
|
93 |
-
import torch
|
94 |
-
from transformers.optimization import Adafactor, AdafactorSchedule
|
95 |
-
from datasets import load_dataset, load_metric
|
96 |
-
|
97 |
-
# загрузка параметров
|
98 |
-
raw_datasets = load_dataset("xsum")
|
99 |
-
metric = load_metric("rouge")
|
100 |
-
nltk.download('punkt')
|
101 |
-
|
102 |
-
# Ввести свой ключ huggingface hyb
|
103 |
-
from huggingface_hub import notebook_login
|
104 |
-
notebook_login()
|
105 |
-
|
106 |
-
# Определение параметров
|
107 |
-
REPO = "t5-russian-spell" # Введите наазвание название репозитория
|
108 |
-
MODEL_NAME = "UrukHan/t5-russian-spell" # Введите наазвание выбранной модели из хаба
|
109 |
-
MAX_INPUT = 256 # Введите максимальную длинну входных данных в токенах (длинна входных фраз в словах (можно считать полслова токен))
|
110 |
-
MAX_OUTPUT = 256 # Введите максимальную длинну прогнозов в токенах (можно уменьшить для задач суммризации или других задач где выход короче)
|
111 |
-
BATCH_SIZE = 8
|
112 |
-
DATASET = 'UrukHan/t5-russian-spell_I' # Введите наазвание название датасета
|
113 |
-
|
114 |
-
# Загрузка датасета использование других типов данных опишу ниже
|
115 |
-
data = load_dataset(DATASET)
|
116 |
-
|
117 |
-
# Загрузка модели и токенизатора
|
118 |
-
tokenizer = T5TokenizerFast.from_pretrained(MODEL_NAME)
|
119 |
-
model = AutoModelForSeq2SeqLM.from_pretrained(MODEL_NAME)
|
120 |
-
|
121 |
-
model.config.max_length = MAX_OUTPUT # по умолчанию 20, поэтому во всех моделях прогнозы обрезаются выходные последовательности
|
122 |
-
# Закоментить после первого соъранения в репозиторий свой необъязательно
|
123 |
-
tokenizer.push_to_hub(repo_name)
|
124 |
|
125 |
-
|
126 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
127 |
|
128 |
-
|
129 |
|
130 |
-
|
131 |
-
predictions, labels = eval_pred
|
132 |
-
decoded_preds = tokenizer.batch_decode(predictions, skip_special_tokens=True)
|
133 |
-
# Replace -100 in the labels as we can't decode them.
|
134 |
-
labels = np.where(labels != -100, labels, tokenizer.pad_token_id)
|
135 |
-
decoded_labels = tokenizer.batch_decode(labels, skip_special_tokens=True)
|
136 |
-
|
137 |
-
# Rouge expects a newline after each sentence
|
138 |
-
decoded_preds = ["\n".join(nltk.sent_tokenize(pred.strip())) for pred in decoded_preds]
|
139 |
-
decoded_labels = ["\n".join(nltk.sent_tokenize(label.strip())) for label in decoded_labels]
|
140 |
-
|
141 |
-
result = metric.compute(predictions=decoded_preds, references=decoded_labels, use_stemmer=True)
|
142 |
-
# Extract a few results
|
143 |
-
result = {key: value.mid.fmeasure * 100 for key, value in result.items()}
|
144 |
-
|
145 |
-
# Add mean generated length
|
146 |
-
prediction_lens = [np.count_nonzero(pred != tokenizer.pad_token_id) for pred in predictions]
|
147 |
-
result["gen_len"] = np.mean(prediction_lens)
|
148 |
-
|
149 |
-
return {k: round(v, 4) for k, v in result.items()}
|
150 |
-
|
151 |
-
training_args = Seq2SeqTrainingArguments(
|
152 |
-
output_dir = REPO,
|
153 |
-
#overwrite_output_dir=True,
|
154 |
-
evaluation_strategy='steps',
|
155 |
-
#learning_rate=2e-5,
|
156 |
-
eval_steps=5000,
|
157 |
-
save_steps=5000,
|
158 |
-
num_train_epochs=1,
|
159 |
-
predict_with_generate=True,
|
160 |
-
per_device_train_batch_size=BATCH_SIZE,
|
161 |
-
per_device_eval_batch_size=BATCH_SIZE,
|
162 |
-
fp16=True,
|
163 |
-
save_total_limit=2,
|
164 |
-
#generation_max_length=256,
|
165 |
-
#generation_num_beams=4,
|
166 |
-
weight_decay=0.005,
|
167 |
-
#logging_dir='logs',
|
168 |
-
push_to_hub=True,
|
169 |
-
)
|
170 |
|
171 |
-
|
172 |
-
optimizer = Adafactor(
|
173 |
-
model.parameters(),
|
174 |
-
lr=1e-5,
|
175 |
-
eps=(1e-30, 1e-3),
|
176 |
-
clip_threshold=1.0,
|
177 |
-
decay_rate=-0.8,
|
178 |
-
beta1=None,
|
179 |
-
weight_decay=0.0,
|
180 |
-
relative_step=False,
|
181 |
-
scale_parameter=False,
|
182 |
-
warmup_init=False,
|
183 |
-
)
|
184 |
-
lr_scheduler = AdafactorSchedule(optimizer)
|
185 |
|
186 |
-
|
187 |
-
model=model,
|
188 |
-
args=training_args,
|
189 |
-
train_dataset = train,
|
190 |
-
eval_dataset = test,
|
191 |
-
optimizers = (optimizer, lr_scheduler),
|
192 |
-
tokenizer = tokenizer,
|
193 |
-
compute_metrics=compute_metrics
|
194 |
-
)
|
195 |
|
196 |
-
|
197 |
|
198 |
-
|
199 |
-
```
|
200 |
-
#
|
201 |
-
---
|
202 |
-
# Пример конвертации массивов для данной сети
|
203 |
-
#
|
204 |
-
```python
|
205 |
-
input_data = ['удач почти отнее отвернулась', 'в хааоде проведения чемпиониавта мира дветысячивосемнандцтая лгодаа']
|
206 |
-
output_data = ['Удача почти от нее отвернулась', 'в ходе проведения чемпионата мира две тысячи восемнадцатого года']
|
207 |
|
208 |
-
|
209 |
-
task_prefix = "Spell correct: "
|
210 |
-
input_sequences = input_data
|
211 |
-
encoding = tokenizer(
|
212 |
-
[task_prefix + sequence for sequence in input_sequences],
|
213 |
-
padding="longest",
|
214 |
-
max_length=MAX_INPUT,
|
215 |
-
truncation=True,
|
216 |
-
return_tensors="pt",
|
217 |
-
)
|
218 |
-
input_ids, attention_mask = encoding.input_ids, encoding.attention_mask
|
219 |
|
220 |
-
|
221 |
-
target_encoding = tokenizer(output_data, padding="longest", max_length=MAX_OUTPUT, truncation=True)
|
222 |
-
labels = target_encoding.input_ids
|
223 |
-
# replace padding token id's of the labels by -100
|
224 |
-
labels = torch.tensor(labels)
|
225 |
-
labels[labels == tokenizer.pad_token_id] = -100'''
|
226 |
|
227 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
228 |
|
229 |
-
|
230 |
-
data = data.train_test_split(0.02)
|
231 |
-
# и получим на вход сети для нашешго trainer: train_dataset = data['train'], eval_dataset = data['test']
|
232 |
|
|
|
|
|
|
|
|
|
|
4 |
model-index:
|
5 |
- name: t5-russian-spell
|
6 |
results: []
|
|
|
|
|
7 |
---
|
8 |
|
9 |
<!-- This model card has been generated automatically according to the information the Trainer had access to. You
|
10 |
should probably proofread and complete it, then remove this comment. -->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
|
12 |
+
# t5-russian-spell
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
|
14 |
+
This model is a fine-tuned version of [UrukHan/t5-russian-spell](https://huggingface.co/UrukHan/t5-russian-spell) on the None dataset.
|
15 |
+
It achieves the following results on the evaluation set:
|
16 |
+
- eval_loss: 0.2866
|
17 |
+
- eval_rouge1: 48.7916
|
18 |
+
- eval_rouge2: 30.2551
|
19 |
+
- eval_rougeL: 48.686
|
20 |
+
- eval_rougeLsum: 48.7615
|
21 |
+
- eval_gen_len: 60.885
|
22 |
+
- eval_runtime: 409.0196
|
23 |
+
- eval_samples_per_second: 2.934
|
24 |
+
- eval_steps_per_second: 0.367
|
25 |
+
- epoch: 0.08
|
26 |
+
- step: 12000
|
27 |
|
28 |
+
## Model description
|
29 |
|
30 |
+
More information needed
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
|
32 |
+
## Intended uses & limitations
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
|
34 |
+
More information needed
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
35 |
|
36 |
+
## Training and evaluation data
|
37 |
|
38 |
+
More information needed
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
39 |
|
40 |
+
## Training procedure
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
41 |
|
42 |
+
### Training hyperparameters
|
|
|
|
|
|
|
|
|
|
|
43 |
|
44 |
+
The following hyperparameters were used during training:
|
45 |
+
- learning_rate: 5e-05
|
46 |
+
- train_batch_size: 8
|
47 |
+
- eval_batch_size: 8
|
48 |
+
- seed: 42
|
49 |
+
- optimizer: Adam with betas=(0.9,0.999) and epsilon=1e-08
|
50 |
+
- lr_scheduler_type: linear
|
51 |
+
- num_epochs: 1
|
52 |
+
- mixed_precision_training: Native AMP
|
53 |
|
54 |
+
### Framework versions
|
|
|
|
|
55 |
|
56 |
+
- Transformers 4.17.0
|
57 |
+
- Pytorch 1.10.0+cu111
|
58 |
+
- Datasets 2.0.0
|
59 |
+
- Tokenizers 0.11.6
|