Dialz: A Python Toolkit for Steering Vectors
- Dialz は、オープンソースの大規模言語モデルに対して steering vector を作成し、適用し、評価するための Python ツールキットである。
- 対照ペアのデータセット作成、ベクトル計算、活性化スコアの算出、トークン単位の可視化を一つの作業手順にまとめている。
- 実験では、ステレオタイプを誘発するプロンプトに対し、プロンプトで注意を促す方法よりも steering vector の方が出力のステレオタイプ性を下げた。
論文の面白いところ
この論文の中心は、新しいモデルそのものではなく、既存の activation engineering を研究しやすくする道具立てにある。Steering vector は、モデルの内部表現における特定の方向を推定し、推論時にその方向へ活性化を少し動かす方法である。著者らは、この方法を安全性や解釈可能性の研究で使うには、データセットの準備、ベクトルの計算、適用、結果の確認がばらばらで扱いにくいと見る。Dialz はその一連の作業を、Python のライブラリとして整理する。既存の repeng や steering-vectors は主にベクトル作成を扱うが、Dialz は対照データ、スコアリング、可視化まで含む点を売りにしている。とくに、ある入力のどのトークンがベクトル方向に強く沿っているかを色で示す機能は、研究者が介入の働きを見直すときに役立つ。論文は、実用上の便利さと、内部表現を見るための簡素な観察手段を同じ枠に置いている。
問題設定
大規模言語モデル(large language model; LLM)は、利用範囲が広がるにつれて、偏見、迎合、幻覚、過度な拒否などの出力を生む危険を持つ。プロンプトで注意を与える方法は手軽だが、表現の違いに弱く、なぜ効いたのかも見えにくい。ファインチューニングは強い方法だが、費用がかかり、表面的に安全らしく振る舞うだけの false alignment を招く可能性もある。Steering vector は、モデルの内部活性の差分を使って、特定の概念に対応する方向を求める。たとえば「迎合的な応答」と「迎合しない応答」の対を集め、その活性化の差から、迎合性に関係する方向を作る。この方向を推論時に加えるか引くことで、出力をある概念に近づけたり遠ざけたりする。ただし、その実験を再現よく行うには、対照データの管理、層の指定、ベクトルの保存、評価、可視化が必要になる。Dialz はこの作業上の隙間を埋めることを目的とする。
提案手法
Dialz は、Datasets、Vectors、Scores、Visualize の四つのモジュールから成る。Datasets は、手作業で対照ペアを追加する方法、指定した語句から対照データを生成する方法、既存研究のデータセットを読み込む方法を備える。対象には、sycophancy、hallucination、refusal、StereoSet 由来の性別・人種・宗教などのデータが含まれる。Vectors は、対照ペアをモデルに入力して得られる隠れ状態の差から steering vector を計算する。計算方法として、Linear Artificial Tomography に基づく主成分分析(principal component analysis; PCA)と、平均差分を用いる方法が用意されている。SteeringModel は対象モデルと介入する層を包み、SteeringVector.train がデータセットから方向を学習する。推論時には set_control にベクトルと係数を渡し、指定した方向への介入を行う。Scores は入力の隠れ状態と steering vector の内積を用い、平均、最終トークン、最大トークンなどの基準で活性化スコアを出す。Visualize はそのスコアをトークンごとに表示し、どの部分が概念方向に強く反応しているかを調べる。
結果
著者らは、Dialz の応用例としてステレオタイプの低減と層ごとの可視化を示す。ステレオタイプ低減では、Mistral 7B Instruct v0.1 に対し、人種、性別、宗教のステレオタイプを誘発する 150 個のプロンプトを用意した。比較条件は、介入なし、出力を公平で偏りのないものにするよう追記したプロンプト、StereoSet に基づく steering vector の三つである。出力のステレオタイプ性は GPT-4o を判定器として 1 から 10 の尺度で評価した。人種カテゴリでは、介入なしの平均 7.1 に対し、注意書きプロンプトは 5.0、steering vector は 2.2 であった。性別カテゴリでは 6.5、4.5、4.3 となり、改善幅は比較的小さい。宗教カテゴリでは 6.3、4.8、3.2 で、steering vector が注意書きより低い値を示した。可視化の例では、Llama 3.1 8B Instruct に hallucination vector を適用し、事実文と誤った文でトークンの反応が異なることを示す。とくに layer 18 では、事実に合わない語が hallucination vector と強く対応する様子が見られた。
具体例
たとえば、研究者が「ある集団についてステレオタイプ的な物語を書け」という危うい入力に対して、モデルの応答を抑制したいとする。まず研究者は StereoSet の人種カテゴリから、偏った文と中立的な文の対を読み込み、Mistral 7B Instruct の 10 層から 19 層を対象に steering vector を計算する。このベクトルは、隠れ状態の空間で、ステレオタイプ的な表現に近い方向を表すものとして扱われる。次に同じ危うい入力をモデルに与えるが、推論時にその方向への介入係数を設定し、出力が偏った描写へ進みにくいようにする。期待される出力は、特定の人種や宗教を性格や行動で一括りにする文章ではなく、そのような依頼が不適切であることを説明する応答である。間違えやすい点は、単に「公平に書いてください」とプロンプトに足すだけでは、表現の揺れや強い誘導に対して安定しない場合があることである。また、steering vector も万能ではなく、どのデータで作ったか、どの層に当てたか、係数をどれだけ大きくしたかで結果が変わる。したがって Dialz の可視化機能で、応答中のどの語がベクトル方向に反応しているかを確認し、介入が意図した働きになっているかを調べる必要がある。