backprompt fournit une structure de données qui permet à un utilisateur de construire dynamiquement des invites tout en évitant les calculs LLM répétés.
Dans de nombreuses tâches à grande échelle effectuées par LLMS, une invite particulière est utilisée plusieurs fois, une fois pour chaque instance de la tâche. Dans des cas comme ceux-ci, la quantité de calcul effectuée par les futurs appels LLM peut être réduit par la mise en cache et la réutilisation de la représentation de l'invite par LLM.
backprompt pousse cette idée bien connue un peu plus loin en mettant en cache des représentations LLM du texte intermédiaire dans l'invite. La mise en cache intermédiaire peut être utile lorsque l'on a besoin d'ajuster dynamiquement l'invite sans avoir à comparer la représentation de la LLM. backprompt résume le processus complexe de construction et de mise en cache proches comme une concaténation de cordes simples.
Voir le cahier demos/minimal_example.ipynb pour un cas d'utilisation plus réaliste. Voici une démo de jouets:
from transformers import AutoModelForCausalLM , AutoTokenizer
from backprompt import Text
# Load a GPT model and its tokenizer
model_name = 'gpt2'
model = AutoModelForCausalLM . from_pretrained ( model_name )
tokenizer = AutoTokenizer . from_pretrained ( model_name )
if tokenizer . pad_token is None :
tokenizer . pad_token = tokenizer . eos_token
mt = ( model , tokenizer )
# Wrap strings in Text and construct them via concatenation
context = Text ( 'Hello there.' , mt )
choices = [ Text ( ' Senator' , mt ), Text ( ' General' , mt )]
endings = [ Text ( ' Amidala' , mt ), Text ( ' Kenobi...' , mt )]
texts = [ context + choice + ending for choice in choices for ending in endings ]
print ( texts [ - 1 ]. string )
# Hello there. General Kenobi...
# Get next-token logits by calling every text obj
# The punchline is that you don't have to worry about repeated computation
for text in texts :
text ()
texts [ - 1 ]. model_repr [ 1 ]. logits [:, - 1 , :] python -m pip install git+https://github.com/kddubey/backprompt.git
Si vous savez essentiellement comment fonctionne le rétroécrose (regardez cette vidéo YouTube) et que vous savez essentiellement comment fonctionne un modèle de langage autorégressif uniquement décodeur (regardez cette vidéo YouTube), alors vous savez comment fonctionne backprompt :-)
Analogies:
backprompt → Keys et valeurs de bloc d'attention.backprompt → Logits de jetons.backprompt → Concaténation du tenseur.TODO: Visualisation du graphique
TODO: élargir les cas de test
pytest
ModelRepr Dataclass pour plus de commodité token_logprobs Attribut à la sortie LM OBJ