Modulabs Persona Labでpsyctlというツールを開発しています。
一言でまとめると、Fine-tuningなしでLLMの性格を変えてみようというプロジェクトです。
どんな原理か
モデル内部の活性化(activation)から「外向的な方向」、「内向的な方向」のようなベクトルを抽出し、推論時にその方向を足すと性格が変わります。Contrastive Activation Addition(CAA)という技法で、学習なしにベクトル加算だけで振る舞いが変わるのが面白いところです。
graph LR
A[対照データセット生成] --> B[Steering Vector抽出]
B --> C[モデルにベクトル注入]
C --> D[心理検査で検証]
psyctlがやること
上記のパイプラインをCLI一つで回せるようにしたツールです。
# データセット生成 → ベクトル抽出 → 適用 → 評価
psyctl dataset.build.steer --personality Extroversion --output ./data
psyctl extract.steering --dataset ./data --method mean_diff --output ./vec.safetensors
psyctl steering --steering-vector ./vec.safetensors --input "Tell me about yourself"
psyctl benchmark inventory --steering-vector ./vec.safetensors
ベクトル抽出方式はMean Difference(統計ベース)とBiPO(最適化ベース)の2種類をサポートし、評価はIPIP-NEO(Big Five)、NPI-40(ナルシシズム)などの標準心理検査ツールで行います。
Llama、GemmaなどHuggingFace互換モデルであれば全て対応しています。
ご興味があれば
GitHubにコードが全て公開されていますので、ぜひご覧ください。