Spaces:
Runtime error
Runtime error
File size: 5,543 Bytes
88d43b3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
"""
This is a file holding task and model agnostic suggestions.
How to add a new suggestion:
1. Add a new constant at the bottom of the file with your suggestion. Please try to follow the same format as the
existing suggestions.
2. Add a new entry to the `GENERAL_SUGGESTIONS`, with format `((problem tags,), suggestion constant)`.
a. See `app.py` for the existing problem tags.
c. Make sure the problem tags are a tuple.
"""
SET_MAX_NEW_TOKENS = """
<details><summary>{match_emoji} {count}. Control the maximum output length.</summary>
🤔 Why?
All text generation calls have a length-related stopping condition. Depending on the model and/or the tool you're
using to generate text, the default value may be too small or too large. I'd recommend ALWAYS setting this option.
🤗 How?
Our text generation interfaces accept a `max_new_tokens` option. Set it to define the maximum number of tokens
that can be generated.
😱 Caveats
1. Allowing a longer output doesn't necessarily mean that the model will generate longer outputs. By default,
the model will stop generating when it generates a special `eos_token_id` token.
2. You shouldn't set `max_new_tokens` to a value larger than the maximum sequence length of the model. If you need a
longer output, consider using a model with a larger maximum sequence length.
3. The longer the output, the longer it will take to generate.
_________________
</details>
"""
SET_MIN_LENGTH = """
<details><summary>{match_emoji} {count}. Force a minimum output length.</summary>
🤔 Why?
Text generation stops when the model generates a special `eos_token_id`. If you prevent it from happening, the model is
forced to continue generating.
🤗 How?
Our text generation interfaces accept a `min_new_tokens` argument. Set it to prevent `eos_token_id` from being
generated until `min_new_tokens` tokens are generated.
😱 Caveats
1. The quality of the output may suffer if the model is forced to generate beyond its own original expectations.
2. `min_new_tokens` must be smaller than than `max_new_tokens` (see related tip).
_________________
</details>
"""
REMOVE_EOS_TOKEN = """
<details><summary>{match_emoji} {count}. Force the model to generate until it reaches the maximum output length.</summary>
🤔 Why?
Text generation stops when the model generates a special `eos_token_id`. If there is no `eos_token_id`, the model can't
stop.
🤗 How?
Our text generation interfaces accept a `eos_token_id` argument. Set it to a null value (e.g., in Python,
`eos_token_id=None`) to prevent generation to stop before it reaches other stopping conditions.
😱 Caveats
1. The quality of the output may suffer if the model is forced to generate beyond its own original expectations.
_________________
</details>
"""
LIST_EOS_TOKEN = """
<details><summary>{match_emoji} {count}. Add a stop word.</summary>
🤔 Why?
Text generation stops when the model generates a special `eos_token_id`. Actually, this attribute can be a list of
tokens, which means you can define arbitrary stop words.
🤗 How?
Our text generation interfaces accept a `eos_token_id` argument. You can pass a list of tokens to make generation
stop in the presence of any of those tokens.
😱 Caveats
1. When passing a list of tokens, you probably shouldn't forget to include the default `eos_token_id` there.
_________________
</details>
"""
TRY_CONTRASTIVE_SEARCH = """
<details><summary>{match_emoji} {count}. Try Contrastive Search.</summary>
🤔 Why?
Contrastive Search is a greedy decoding strategy that strikes a balance between picking the best token and avoiding
repetition in the representation space. Despite being a greedy decoding strategy, it can also perform well on tasks
that require creativity (i.e. Sampling territory). In some models, it greatly reduces the problem of repetition.
🤗 How?
Our text generation interfaces accept two arguments: `top_k` and `penalty_alpha`. The authors recomment starting with
`top_k=4` and `penalty_alpha=0.6`.
😱 Caveats
1. Contrastive Search does not work well with all models -- it depends on how distributed their representation spaces
are. See [this thread](https://huggingface.co/spaces/joaogante/contrastive_search_generation/discussions/1#63764a108623a4a7954a5be5)
for further information.
_________________
</details>
"""
BLOCK_BAD_WORDS = """
<details><summary>{match_emoji} {count}. Prevent certain words from being generated.</summary>
🤔 Why?
You might want to prevent your model from generating certain tokens, such as swear words.
🤗 How?
Our text generation interfaces accept a `bad_words_ids` argument. There, you can pass a list of lists, where each
inner list contains a forbidden sequence of tokens.
Remember that you can get the token IDs for the words you want to block through
`bad_word_ids = tokenizer(bad_words, add_prefix_space=True, add_special_tokens=False).input_ids`
_________________
</details>
"""
GENERAL_SUGGESTIONS = (
(("length",), SET_MAX_NEW_TOKENS),
(("length",), SET_MIN_LENGTH),
(("length",), REMOVE_EOS_TOKEN),
(("length",), LIST_EOS_TOKEN),
(("quality", "repetitions"), TRY_CONTRASTIVE_SEARCH),
(("quality",), BLOCK_BAD_WORDS),
)
assert all(isinstance(problem_tags, tuple) for problem_tags, _ in GENERAL_SUGGESTIONS)
|