Alikhan Urumov commited on
Commit
c0904d4
1 Parent(s): d420b53

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +208 -36
README.md CHANGED
@@ -4,56 +4,228 @@ tags:
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
 
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
+ train = data['train']
126
+ test = data['test'].train_test_split(0.02)['test'] # Уменьшил так тестовыу. выборку чтоб не ждать долго расчет ошибок между эпохами
127
 
128
+ data_collator = DataCollatorForSeq2Seq(tokenizer, model=model) #return_tensors="tf"
129
+
130
+ def compute_metrics(eval_pred):
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
+ # Выберем вручную оптимизатор. Т5 в оригинальной архитектуре использует Адафактор оптимизатор
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
+ trainer = Seq2SeqTrainer(
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
+ trainer.train()
197
+
198
+ trainer.push_to_hub()
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
+ # Конвертируем наши данные в формат dataset
228
 
229
+ 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))}))
230
+ data = data.train_test_split(0.02)
231
+ # и получим на вход сети для нашешго trainer: train_dataset = data['train'], eval_dataset = data['test']