Genn9508 commited on
Commit
08bef86
·
verified ·
1 Parent(s): 5455679

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +4 -9
app.py CHANGED
@@ -76,7 +76,6 @@ print("Выходы декодера:", [out.name for out in decoder_session.get
76
  def summarize_text(text, max_length=150, min_length=30):
77
  print("\n--- НАЧАЛО ГЕНЕРАЦИИ ---")
78
 
79
-
80
  # Проверка ввода
81
  if not text or not text.strip():
82
  return "Ошибка: текст не может быть пустым."
@@ -124,6 +123,7 @@ def summarize_text(text, max_length=150, min_length=30):
124
  generated_tokens = []
125
  current_token = np.array([[tokenizer.bos_token_id]], dtype=np.int64)
126
 
 
127
  # Параметры модели
128
  num_layers = 12 # Количество слоёв в декодере
129
  num_heads = 12 # Количество голов внимания
@@ -131,13 +131,11 @@ def summarize_text(text, max_length=150, min_length=30):
131
 
132
 
133
  # Преобразуем encoder_hidden_states в 4D-тензор для encoder.key/encoder.value
134
- # Исходная форма: (1, 13, 768) → нужно: (1, num_heads, 13, head_dim)
135
  encoder_key_4d = encoder_hidden_states.reshape(
136
  1, encoder_hidden_states.shape[1], num_heads, head_dim
137
  )
138
  encoder_key_4d = np.transpose(encoder_key_4d, (0, 2, 1, 3)) # → (1, 12, 13, 64)
139
- encoder_value_4d = encoder_key_4d # Для encoder key и value обычно одинаковы
140
-
141
 
142
  # Инициализируем past_key_values пустыми тензорами для всех слоёв
143
  past_key_values = []
@@ -155,8 +153,7 @@ def summarize_text(text, max_length=150, min_length=30):
155
  # Формирование входных данных для декодера
156
  decoder_inputs = {
157
  "input_ids": current_token,
158
- "encoder_hidden_states": encoder_hidden_states,
159
- "encoder_attention_mask": attention_mask
160
  }
161
 
162
  # Добавляем past_key_values для всех слоёв
@@ -166,7 +163,6 @@ def summarize_text(text, max_length=150, min_length=30):
166
  decoder_inputs[f'past_key_values.{i}.encoder.key'] = enc_key
167
  decoder_inputs[f'past_key_values.{i}.encoder.value'] = enc_value
168
 
169
-
170
  # Инференс декодера
171
  try:
172
  decoder_outputs = decoder_session.run(None, decoder_inputs)
@@ -177,7 +173,6 @@ def summarize_text(text, max_length=150, min_length=30):
177
  print("Входные данные:", {k: (v.shape if hasattr(v, 'shape') else type(v)) for k, v in decoder_inputs.items()})
178
  return f"Ошибка декодера на шаге {step}: {e}"
179
 
180
-
181
  # Обновление past_key_values из выходов декодера
182
  updated_past = []
183
  for i in range(num_layers):
@@ -186,12 +181,12 @@ def summarize_text(text, max_length=150, min_length=30):
186
  updated_past.append((updated_key, updated_value, encoder_key_4d, encoder_value_4d))
187
  past_key_values = updated_past
188
 
 
189
  # Получение следующего токена
190
  next_token = np.argmax(next_token_logits[:, -1, :], axis=-1)[0]
191
  generated_tokens.append(next_token)
192
  print(f"Сгенерированный токен (ID): {next_token}")
193
 
194
-
195
  # Проверка завершения генерации
196
  if next_token == tokenizer.eos_token_id or len(generated_tokens) >= max_length:
197
  break
 
76
  def summarize_text(text, max_length=150, min_length=30):
77
  print("\n--- НАЧАЛО ГЕНЕРАЦИИ ---")
78
 
 
79
  # Проверка ввода
80
  if not text or not text.strip():
81
  return "Ошибка: текст не может быть пустым."
 
123
  generated_tokens = []
124
  current_token = np.array([[tokenizer.bos_token_id]], dtype=np.int64)
125
 
126
+
127
  # Параметры модели
128
  num_layers = 12 # Количество слоёв в декодере
129
  num_heads = 12 # Количество голов внимания
 
131
 
132
 
133
  # Преобразуем encoder_hidden_states в 4D-тензор для encoder.key/encoder.value
 
134
  encoder_key_4d = encoder_hidden_states.reshape(
135
  1, encoder_hidden_states.shape[1], num_heads, head_dim
136
  )
137
  encoder_key_4d = np.transpose(encoder_key_4d, (0, 2, 1, 3)) # → (1, 12, 13, 64)
138
+ encoder_value_4d = encoder_key_4d
 
139
 
140
  # Инициализируем past_key_values пустыми тензорами для всех слоёв
141
  past_key_values = []
 
153
  # Формирование входных данных для декодера
154
  decoder_inputs = {
155
  "input_ids": current_token,
156
+ "encoder_attention_mask": attention_mask # Только маска!
 
157
  }
158
 
159
  # Добавляем past_key_values для всех слоёв
 
163
  decoder_inputs[f'past_key_values.{i}.encoder.key'] = enc_key
164
  decoder_inputs[f'past_key_values.{i}.encoder.value'] = enc_value
165
 
 
166
  # Инференс декодера
167
  try:
168
  decoder_outputs = decoder_session.run(None, decoder_inputs)
 
173
  print("Входные данные:", {k: (v.shape if hasattr(v, 'shape') else type(v)) for k, v in decoder_inputs.items()})
174
  return f"Ошибка декодера на шаге {step}: {e}"
175
 
 
176
  # Обновление past_key_values из выходов декодера
177
  updated_past = []
178
  for i in range(num_layers):
 
181
  updated_past.append((updated_key, updated_value, encoder_key_4d, encoder_value_4d))
182
  past_key_values = updated_past
183
 
184
+
185
  # Получение следующего токена
186
  next_token = np.argmax(next_token_logits[:, -1, :], axis=-1)[0]
187
  generated_tokens.append(next_token)
188
  print(f"Сгенерированный токен (ID): {next_token}")
189
 
 
190
  # Проверка завершения генерации
191
  if next_token == tokenizer.eos_token_id or len(generated_tokens) >= max_length:
192
  break