LLM に「人格」を付与する研究やツールを調査した
LLM に特定の人格やキャラクターを付与する試み(以降「人格再現」と表現)についてリサーチする機会があり色々調べてたら結構まとまってきたのでメモ代わりに放出する。
そもそも人格再現して何が嬉しいの?
(1) エンタメ領域への適用
最も分かりやすいところだとゲームやメタバース、デジタルなエンターテイメントへの適用が挙げられる。
ゲームに登場する NPC が独自の人格を持っていれば体験が豊かになるだろうし、AITuber との個性あるコミュニケーションにはワクワクが生まれる。
ゲームとの蜜月は a16z の The NeverEnding Game: How AI Will Create a New Category of Games が詳しい。
(2) 人間社会のシミュレーションへの応用
日本ではまだそれほど注目されていない様子だが、LLM を人間や社会現象のシミュレーションに応用するユースケースが興り出している。
例えば米国には Synthetic Users というサービスがある。
性別や職業、好み、年収等の属性を付与した LLM に対しアイデアやプロダクトの壁打ちができるサービスで、これまでのユーザ調査を代替できると謳う。
研究レベルにおいても Microsoft による論文 Using GPT for Market Research(特定のペルソナを持たせた LLM による消費者行動リサーチ)や SimReddit(Reddit にて参加者を LLM で自動生成、スレッドタイトルからどのような議論が行われるかの数千人規模シミュレーションを実施)等々が行われている。
かの有名な Generative Agents も、人格再現によるシミュレーションの傍流と言えそう。
この辺りの歴史 / 研究史 / プロダクト史的なモノは Nature の記事「GUINEA PIGBOTS」にかなりまとまっており必読。
(3) AI コンパニオン
現実世界の人間と同等にコミュニケーションできる「AI コンパニオン」に LLM を利用する流れも生まれている。
著名なサービスとしては Replika があり、作成した理想的な AI キャラクターとコミュニケーションしつつ思い出を育むことができ、熱狂的なユーザは疑似恋愛状態に陥ることも(他にも Chai、Janitor AI、Chub AI、Charstar、SpicyChat… 様々なサービスがある)。
他のユニークな取り組みとしては CarynAI のように実在のインフルエンサーを AI コンパニオン化する例もあるし、自分好みの AI コンパニオンを作成できる OSS も出てきている(GirlfriendGPT)。
AI コンパニオンの説明を聞くといわゆるアダルトな方面のマーケットをどうしても邪推してしまうが、事実、NSFW(Not Safe For Work)AI と呼ばれるジャンルが生まれており、ここで深入りするつもりはないけれど NSFW AI サービス Nastia のまとめ記事を参考として置いておく。
(4) その他
例えば故人や歴史上の人物をデジタルに再現したりユースケースは無限に存在する。
人格を再現するのに必要な 3 要素
LLM に「あるキャラクター」を演じさせる上で必要な要素は下記の 3 つあるという。
知識やバックグラウンドはそのキャラクターが生きる世界のルールや用語、ストーリーが該当する。パーソナリティはそのままキャラクター自身の性格や考え方を表し、言語習慣は喋り方や語尾、口グセを指す。
各要素の要不要はユースケースによって異なる。
例えば前段で説明したエンタメ領域にて、あるアニメキャラクターを詳細に再現する場合であれば ①〜③ の全てが必要になる。
しかし人間社会のシミュレーションにて、ある属性を持った人間として振る舞って欲しいだけなのであれば ②(或いは場合によって ① も)のみで十分であろう。
① や ③ は Retriever 等 LLM 自体の範囲を超えて実装するケースも多く、本記事ではとりわけ ② に着目した内容が多い。
人格再現の方法
そもそも LLM をカスタマイズする方法は、プロンプトエンジニアリング(ヒューリスティックに「良い」プロンプトを探す)、プロンプトチューニング(入力するプロンプトを自動で学習する)、ファインチューニング(モデルのパラメータ自体をチューニングする)があり、これらをベースに人格再現を行うことになる。
ここから、これら 3 手法を用いて人格再現を行った様々な先行事例を紹介していく。
プロンプトエンジニアリング
恐らく LLM にて人格再現を行う際に初手で利用され、かつ最もポピュラーなのがプロンプトエンジニアリングによる方法だと思われる。
「あなたは xxx な yyy です」といったプロンプトで LLM に人格を教え込む。
古典的なプロンプトエンジニアリング手法としても、例えば数学問題を解かせる際に「あなたは数学者です」と適当な役割を与える「ロールプロンプティング」は初期から行われてきた。役割を与えることで推論能力は普遍的に向上するとされ、これも大枠は人格再現に近しい。
プロンプトエンジニアリングの利点は、対象が著名な人間(例えばイーロン・マスク)だった場合 LLM 内に知識が存在するので強力に再現できる点であり、翻って LLM 知識外の人格を再現する場合はプロンプトにて教え込むコンテキスト総量が多くなる。
人格再現プロンプトの書き方
様々な OSS や個人ブログを読んでみたけれど、人格再現プロンプトの書き方は場合によって様々で、基本は地の文で書くことが多いが、JSON や マークダウン等で定義する場合もある。
地の文で書く例
character.ai の OSS 的な RealChar のプロンプト
JSON で書く例
キャラクターシートっぽく構造化して書く例
こちらに記載の通り、LLM は様々なテキストフォーマットを許容できるので、メンテしやすいプロンプトで書くのが最適解だと考える。
性格を強化する方法
心理学で用いられる MBTI やビッグ 5 等の指標をプロンプトに組み込み LLM の性格を強化する取り組みも多くある。
性格指標によって LLM のパーソナリティを調整可能なことは数多くの研究で示唆されている(PersonaLLM、Personality Traits in Large Language Models)。
導入に際しては素直にプロンプトの一部として混ぜ込むだけで効果を発揮する。
海外にはアニメキャラクターの性格特性を議論しまとめる Personality Database 等もあり、ここに記載された値をプロンプトに組み込むことで、よりそのキャラクターらしい振る舞いを抽出できる可能性も開かれている。
注意点
例えば ChatGPT 等は RLHF を通してチューニングされているためどうしても「まとも」な回答を生成するケースが多く、稀にキャラクター再現の痒いところに手が届かないケースがある。
そのため個性を無理やり再現する脱獄プロンプト(悪用厳禁)が生まれたり、こちらの記事の通りプロンプトに一文足すことで個性の再現度が爆上がりしました!みたいなことが生じる場合がある。
プロンプトチューニング
あまり聞き馴染みのない方もいるかもだが、プロンプトの先頭等にチューニング可能な文字列を付与し学習させる手法を指す。
学習したプロンプトはヒューマンリーダブルでない場合が多い。
下記の図が分かりやすく、ファインチューニングの場合モデル(或いはモデルにアタッチしたパラメータ)を更新するが、プロンプトチューニングの場合「プロンプトの一部」が学習対象のパラメータになるイメージ。
プロンプトチューニングによる人格再現は(調べた限り)そこまで事例は多くなかったが、そのものずばりなタイトルを持つ論文「Prompt-Tuning による個性を持った対話システムの構築」を発見した。
再現したい人格の対話データセットをもとにプロンプトを学習する内容で、ファインチューニングより低コスト、かつプロンプトエンジニアリングよりトークン数を節約できるメリットがあるとのこと。
ファインチューニング
学習可能なデータセットがある場合、ファインチューニングは人格再現の強力なツール足り得る。
Create a Clone of Yourself With a Fine-tuned LLM は自分自身のクローンを作るために Instruction Tuning をした事例であり、Telegram の発言をデータセット代わりにした。
Replacing my best friends with an LLM trained on 500,000 group chat messages も似た事例で、グループチャットの履歴から友人のコピーを再現。
他にも Kaggle のデータセットでシンプソンズを再現した Fine-tune LLaMA to speak like Homer Simpson や、ハリーポッターを Instruction Tuning した ChatHarryPotter: A Brief Report for First Experiment がある。
ファインチューニングによる人格再現の事例で最近最も興味を引かれたのは ChatHaruhi である。
オリジナル対話データセットをもとに擬似的な対話データを生成して学習する等、キャラクターの人格を再現するために必要なノウハウや知見、アーキテクチャが詰まっており面白い。
おわりに
LLM に「人格」を付与する方法について、主に先行事例を中心にまとめた。
所感として、ライトに人格再現したい場合は最もリーズナブルな手法たるプロンプトエンジニアリングを利用し、ガッツリ精緻に再現したい場合はファインチューニングを使う、等ユースケースに沿って使い分ける或いは組み合わせるのが良さそうに感じた。