Alikhan Urumov commited on
Commit
41c6a60
1 Parent(s): 2541e1b

Update README.md

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