Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
|
@@ -218,7 +218,9 @@ def generate_nodes(node, step):
|
|
| 218 |
selected_class = "nonselected-sequence"
|
| 219 |
return f"<li> <a href='#' class='end-of-text child {selected_class}'> <span> <b>{clean(token)}</b> <br>Total score: {node.total_score:.2f}</span> </a> </li>"
|
| 220 |
|
| 221 |
-
html_content =
|
|
|
|
|
|
|
| 222 |
if node.table is not None:
|
| 223 |
html_content += node.table
|
| 224 |
html_content += "</a>"
|
|
@@ -288,7 +290,7 @@ def generate_beams(start_sentence, scores, length_penalty, decoded_sequences):
|
|
| 288 |
top_token_indexes,
|
| 289 |
top_cumulative_scores,
|
| 290 |
beam_indexes,
|
| 291 |
-
|
| 292 |
top_tokens,
|
| 293 |
) = ([], [], [], [], [])
|
| 294 |
for beam_ix in range(n_beams): # Get possible descendants for each beam
|
|
@@ -308,19 +310,20 @@ def generate_beams(start_sentence, scores, length_penalty, decoded_sequences):
|
|
| 308 |
+ current_beam.cumulative_score
|
| 309 |
)
|
| 310 |
beam_indexes += [beam_ix] * n_beams
|
| 311 |
-
|
| 312 |
top_tokens += [tokenizer.decode([el]) for el in current_top_token_indexes]
|
| 313 |
|
|
|
|
| 314 |
top_df = pd.DataFrame.from_dict(
|
| 315 |
{
|
| 316 |
"token_index": top_token_indexes,
|
| 317 |
"cumulative_score": top_cumulative_scores,
|
| 318 |
"beam_index": beam_indexes,
|
| 319 |
-
"
|
| 320 |
"token": top_tokens,
|
| 321 |
}
|
| 322 |
)
|
| 323 |
-
maxes = top_df.groupby(["token_index", "
|
| 324 |
"cumulative_score"
|
| 325 |
].idxmax()
|
| 326 |
|
|
@@ -331,20 +334,20 @@ def generate_beams(start_sentence, scores, length_penalty, decoded_sequences):
|
|
| 331 |
:n_beams
|
| 332 |
]
|
| 333 |
|
| 334 |
-
# Write the scores table - one per beam source
|
| 335 |
-
# Edge case: if several beam indexes are actually on the same beam, the selected tokens by beam_index for the second one will be empty. So we reverse
|
| 336 |
for beam_ix in reversed(list(range(n_beams))):
|
| 337 |
current_beam = beam_trees[beam_ix]
|
| 338 |
-
|
| 339 |
-
top_df_selected[
|
| 340 |
-
|
| 341 |
-
|
| 342 |
-
|
| 343 |
-
|
| 344 |
-
|
| 345 |
-
|
| 346 |
-
|
| 347 |
-
|
|
|
|
| 348 |
|
| 349 |
# Add new children for each beam
|
| 350 |
cumulative_scores = [beam.cumulative_score for beam in beam_trees]
|
|
@@ -375,7 +378,10 @@ def generate_beams(start_sentence, scores, length_penalty, decoded_sequences):
|
|
| 375 |
step == len(scores) - 1
|
| 376 |
or current_token_choice_ix == tokenizer.eos_token_id
|
| 377 |
),
|
| 378 |
-
is_selected_sequence=(
|
|
|
|
|
|
|
|
|
|
| 379 |
)
|
| 380 |
|
| 381 |
# Reassign all beams at once
|
|
@@ -391,8 +397,11 @@ def generate_beams(start_sentence, scores, length_penalty, decoded_sequences):
|
|
| 391 |
|
| 392 |
return original_tree
|
| 393 |
|
|
|
|
| 394 |
@spaces.GPU
|
| 395 |
-
def get_beam_search_html(
|
|
|
|
|
|
|
| 396 |
inputs = tokenizer([input_text], return_tensors="pt")
|
| 397 |
|
| 398 |
outputs = model.generate(
|
|
@@ -426,7 +435,9 @@ def get_beam_search_html(input_text, number_steps, number_beams, length_penalty,
|
|
| 426 |
|
| 427 |
|
| 428 |
def change_num_return_sequences(n_beams):
|
| 429 |
-
return gr.Slider(
|
|
|
|
|
|
|
| 430 |
|
| 431 |
|
| 432 |
with gr.Blocks(
|
|
@@ -468,7 +479,9 @@ This parameter will not impact the beam search paths, but only influence the cho
|
|
| 468 |
label="Number of return sequences", minimum=1, maximum=3, step=1, value=2
|
| 469 |
)
|
| 470 |
|
| 471 |
-
n_beams.change(
|
|
|
|
|
|
|
| 472 |
button = gr.Button()
|
| 473 |
out_html = gr.Markdown()
|
| 474 |
out_markdown = gr.Markdown()
|
|
|
|
| 218 |
selected_class = "nonselected-sequence"
|
| 219 |
return f"<li> <a href='#' class='end-of-text child {selected_class}'> <span> <b>{clean(token)}</b> <br>Total score: {node.total_score:.2f}</span> </a> </li>"
|
| 220 |
|
| 221 |
+
html_content = (
|
| 222 |
+
f"<li> <a href='#' class='nonfinal child'> <span> <b>{clean(token)}</b> </span>"
|
| 223 |
+
)
|
| 224 |
if node.table is not None:
|
| 225 |
html_content += node.table
|
| 226 |
html_content += "</a>"
|
|
|
|
| 290 |
top_token_indexes,
|
| 291 |
top_cumulative_scores,
|
| 292 |
beam_indexes,
|
| 293 |
+
current_sequence,
|
| 294 |
top_tokens,
|
| 295 |
) = ([], [], [], [], [])
|
| 296 |
for beam_ix in range(n_beams): # Get possible descendants for each beam
|
|
|
|
| 310 |
+ current_beam.cumulative_score
|
| 311 |
)
|
| 312 |
beam_indexes += [beam_ix] * n_beams
|
| 313 |
+
current_sequence += [beam_trees[beam_ix].current_sequence] * n_beams
|
| 314 |
top_tokens += [tokenizer.decode([el]) for el in current_top_token_indexes]
|
| 315 |
|
| 316 |
+
|
| 317 |
top_df = pd.DataFrame.from_dict(
|
| 318 |
{
|
| 319 |
"token_index": top_token_indexes,
|
| 320 |
"cumulative_score": top_cumulative_scores,
|
| 321 |
"beam_index": beam_indexes,
|
| 322 |
+
"current_sequence": current_sequence,
|
| 323 |
"token": top_tokens,
|
| 324 |
}
|
| 325 |
)
|
| 326 |
+
maxes = top_df.groupby(["token_index", "current_sequence"])[
|
| 327 |
"cumulative_score"
|
| 328 |
].idxmax()
|
| 329 |
|
|
|
|
| 334 |
:n_beams
|
| 335 |
]
|
| 336 |
|
| 337 |
+
# Write the scores table - one per beam source
|
|
|
|
| 338 |
for beam_ix in reversed(list(range(n_beams))):
|
| 339 |
current_beam = beam_trees[beam_ix]
|
| 340 |
+
if current_beam.table is None:
|
| 341 |
+
selected_tokens = top_df_selected.loc[
|
| 342 |
+
top_df_selected["current_sequence"] == current_beam.current_sequence
|
| 343 |
+
]
|
| 344 |
+
markdown_table = generate_markdown_table(
|
| 345 |
+
step_scores[beam_ix, :],
|
| 346 |
+
current_beam.cumulative_score,
|
| 347 |
+
current_beam.children_score_divider,
|
| 348 |
+
chosen_tokens=list(selected_tokens["token"].values),
|
| 349 |
+
)
|
| 350 |
+
beam_trees[beam_ix].table = markdown_table
|
| 351 |
|
| 352 |
# Add new children for each beam
|
| 353 |
cumulative_scores = [beam.cumulative_score for beam in beam_trees]
|
|
|
|
| 378 |
step == len(scores) - 1
|
| 379 |
or current_token_choice_ix == tokenizer.eos_token_id
|
| 380 |
),
|
| 381 |
+
is_selected_sequence=(
|
| 382 |
+
current_sequence.replace("<|endoftext|>", "")
|
| 383 |
+
in [el.replace("<|endoftext|>", "") for el in decoded_sequences]
|
| 384 |
+
),
|
| 385 |
)
|
| 386 |
|
| 387 |
# Reassign all beams at once
|
|
|
|
| 397 |
|
| 398 |
return original_tree
|
| 399 |
|
| 400 |
+
|
| 401 |
@spaces.GPU
|
| 402 |
+
def get_beam_search_html(
|
| 403 |
+
input_text, number_steps, number_beams, length_penalty, num_return_sequences
|
| 404 |
+
):
|
| 405 |
inputs = tokenizer([input_text], return_tensors="pt")
|
| 406 |
|
| 407 |
outputs = model.generate(
|
|
|
|
| 435 |
|
| 436 |
|
| 437 |
def change_num_return_sequences(n_beams):
|
| 438 |
+
return gr.Slider(
|
| 439 |
+
label="Number of sequences", minimum=1, maximum=n_beams, step=1, value=n_beams
|
| 440 |
+
)
|
| 441 |
|
| 442 |
|
| 443 |
with gr.Blocks(
|
|
|
|
| 479 |
label="Number of return sequences", minimum=1, maximum=3, step=1, value=2
|
| 480 |
)
|
| 481 |
|
| 482 |
+
n_beams.change(
|
| 483 |
+
fn=change_num_return_sequences, inputs=n_beams, outputs=num_return_sequences
|
| 484 |
+
)
|
| 485 |
button = gr.Button()
|
| 486 |
out_html = gr.Markdown()
|
| 487 |
out_markdown = gr.Markdown()
|