backprompt предоставляет структуру данных, которая позволяет пользователю динамически построить подсказки, избегая повторных вычислений LLM.
Во многих крупномасштабных задачах, выполняемых LLMS, используется конкретная подсказка много раз-когда-то для каждого экземпляра задачи. В подобных случаях объем вычислений, выполняемых будущими вызовами LLM, может быть уменьшен за счет кэширования и повторного использования представления LLM о подсказывании.
backprompt делает эту хорошо известную идею на шаг дальше, дополнительно кэшируя представления LLM промежуточного текста в приглашении. Промежуточное кэширование может быть полезным, когда нужно динамически регулировать подсказку без необходимости повторного вычисления представления LLM. backprompt абстрагирует сложный процесс быстрого построения и кэширования как простая старая строковая конкатенация.
См. demos/minimal_example.ipynb для ноутбука для более реалистичного варианта использования. Вот игрушечная демонстрация:
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
Если вы в основном знаете, как работает BackProp (посмотрите это видео на YouTube), и вы в основном знаете, как работает авторегрессивный языковой модель только для декодера (смотрите это видео на YouTube), то вы знаете, как работает backprompt :-)
Аналогии:
backprompt → Клавиши блоков внимания и значения.backprompt → Token Logits.backprompt → Tensor Concatenation.TODO: визуализация графика
TODO: расширить тестовые примеры
pytest
ModelRepr DataClass для удобства token_logprobs к выходу LM OBJ