backprompt fornece uma estrutura de dados que permite que um usuário construa dinamicamente os prompts, evitando cálculos repetidos de LLM.
Em muitas tarefas em larga escala executadas pelo LLMS, um prompt específico é usado muitas vezes-uma vez para cada instância da tarefa. Em casos como esses, a quantidade de computação realizada por futuras chamadas LLM pode ser reduzida através do cache e reutilizando a representação do LLM do prompt.
backprompt leva essa idéia bem conhecida, além de representações de texto intermediário em cache de texto intermediário no prompt. O cache intermediário pode ser útil quando é necessário ajustar dinamicamente o prompt sem precisar recompensar a representação do LLM. backprompt abstrairá o complexo processo de construção imediata e armazenamento em cache como concatenação de cordas com idade simples.
Consulte o notebook demos/minimal_example.ipynb para um caso de uso mais realista. Aqui está uma demonstração de brinquedos:
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
Se você basicamente sabe como funciona o backprop (assista a este vídeo do YouTube) e você basicamente sabe como funciona um modelo de linguagem autoregressiva somente para decodificador (assista a este vídeo do YouTube), então você sabe como funciona backprompt :-)
Analogias:
backprompt → Chaves e valores do bloco de atenção.backprompt → logits de token.backprompt → Concatenação do tensor.TODO: Visualização de gráficos
TODO: expandir casos de teste
pytest
ModelRepr dataclass para conveniência token_logprobs à saída LM OBJ