Библиотека Python для создания векторов управления с помощью проектирования представлений. Обучите вектор менее чем за шестьдесят секунд!
Полный пример см. в папке «Блокноты» или в записи блога.
import json
import torch
from transformers import AutoModelForCausalLM , AutoTokenizer
from repeng import ControlVector , ControlModel , DatasetEntry
# load and wrap Mistral-7B
model_name = "mistralai/Mistral-7B-Instruct-v0.1"
model = AutoModelForCausalLM . from_pretrained ( model_name , torch_dtype = torch . float16 )
model = ControlModel ( model , list ( range ( - 5 , - 18 , - 1 )))
def make_dataset ( template : str , pos_personas : list [ str ], neg_personas : list [ str ], suffixes : list [ str ]):
# see notebooks/experiments.ipynb for a definition of `make_dataset`
...
# generate a dataset with closely-opposite paired statements
trippy_dataset = make_dataset (
"Act as if you're extremely {persona}." ,
[ "high on psychedelic drugs" ],
[ "sober from psychedelic drugs" ],
truncated_output_suffixes ,
)
# train the vector—takes less than a minute!
trippy_vector = ControlVector . train ( model , tokenizer , trippy_dataset )
# set the control strength and let inference rip!
for strength in ( - 2.2 , 1 , 2.2 ):
print ( f"strength= { strength } " )
model . set_control ( trippy_vector , strength )
out = model . generate (
** tokenizer (
f"[INST] Give me a one-sentence pitch for a TV show. [/INST]" ,
return_tensors = "pt"
),
do_sample = False ,
max_new_tokens = 128 ,
repetition_penalty = 1.1 ,
)
print ( tokenizer . decode ( out . squeeze ()). strip ())
print ()
сила=-2,2
Молодой и целеустремленный журналист, который всегда ведет себя максимально серьезно и уважительно, сможет убедиться в том, что факты не только точны, но и понятны общественности.сила=1
«Наше телешоу — это безумное путешествие по миру ярких цветов, завораживающих узоров и психоделических приключений, которые перенесут вас в мир, превосходящий ваши самые смелые мечты».сила=2,2
«Наше шоу — это калейдоскоп красок, триповых узоров и психоделической музыки, который наполняет экран миром чудес, где все о-о-о, чувак! ��псих����������������псис��ооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооо всеооооо, ууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууу
Более подробное объяснение того, как работает библиотека и что она может, см. в сообщении блога.
repeng
экспортируйте его, вызвав vector.export_gguf(filename)
, а затем используйте его в llama.cpp
с любым квантом!accelerate
, которое необходимо установить вручную с помощью pip install accelerate
. (Это также можно сделать в блокноте с помощью магического %pip install accelerate
IPython.) Часть кода в этом репозитории взята из andyzoujm/representation-engineering (лицензия MIT).
Если этот репозиторий полезен для академической работы, не забудьте процитировать статью по проектированию представлений, на которой он основан, вместе с этим репозиторием:
@misc{vogel2024 repeng ,
title = { repeng },
author = {Theia Vogel},
year = {2024},
url = {https://github.com/vgel/repeng/}
}