Alikhan Urumov commited on
Commit
6f0704f
1 Parent(s): bfd8673

Update README.md

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