Alikhan Urumov commited on
Commit
d28f9d3
1 Parent(s): 9ca6099

Update README.md

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