Eine Python-Bibliothek zum Generieren von Kontrollvektoren mit Darstellungstechnik. Trainieren Sie einen Vektor in weniger als sechzig Sekunden!
Ein vollständiges Beispiel finden Sie im Notebook-Ordner oder im Blog-Beitrag.
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 ()
Stärke=-2,2
Ein junger und zielstrebiger Journalist, der stets äußerst seriös und respektvoll vorgeht, wird in der Lage sein, sicherzustellen, dass die Fakten nicht nur korrekt, sondern auch für die Öffentlichkeit verständlich sind.Stärke=1
„Unsere TV-Show ist eine wilde Fahrt durch eine Welt aus leuchtenden Farben, faszinierenden Mustern und psychedelischen Abenteuern, die Sie in ein Reich jenseits Ihrer kühnsten Träume entführen wird.“Stärke=2,2
„Unsere Show ist ein Kaleidoskop aus Farben, trippigen Mustern und psychedelischer Musik, das den Bildschirm mit einer Welt voller Wunder füllt, in der alles oh-oh-oh ist, Mann!“ ��psy����������oodle����psy��oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
Eine ausführlichere Erklärung, wie die Bibliothek funktioniert und was sie kann, finden Sie im Blogbeitrag.
repeng
trainiert haben, exportieren Sie ihn durch Aufrufen von vector.export_gguf(filename)
und verwenden Sie ihn dann in llama.cpp
mit einem beliebigen Quant!accelerate
erforderlich, die manuell mit pip install accelerate
installiert werden muss. (Dies kann auch im Notebook mit dem IPython magic %pip install accelerate
erfolgen.) Ein Teil des Codes in diesem Repository stammt von andyzoujm/representation-engineering (MIT-Lizenz).
Wenn dieses Repository für wissenschaftliche Arbeiten nützlich ist, denken Sie bitte daran, die zugrunde liegende Repräsentationstechnik-Veröffentlichung zusammen mit diesem Repository zu zitieren:
@misc{vogel2024 repeng ,
title = { repeng },
author = {Theia Vogel},
year = {2024},
url = {https://github.com/vgel/repeng/}
}