Alikhan Urumov commited on
Commit
9ca6099
·
1 Parent(s): 4cb853e

update model card README.md

Browse files
Files changed (1) hide show
  1. README.md +36 -195
README.md CHANGED
@@ -4,215 +4,56 @@ tags:
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
 
 
 
 
 
 
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