LoRA(Low Rank Adoptation)についての説明はこちらに丸投げします。LoRAでLLMの口調を変えてみたり新しい知識を吹き込んでみたりという記事がちらほらあります。しかしキャラ付けをするにはLoRAは良い選択肢といえません。
(この記事では、ローカルLLMを利用することを前提としています。ロールプレイのためにAPI代を払いたくないので)
LoRAで学習させなくとも口調や性格は再現できる
これに尽きます。というかこれらのためにプロンプトをいじらずLoRAに手を出す人はほとんどいないと思います。昔(Qwen2.5あたりまで?)はシステムプロンプトに厳密に従ってくれず口調などが安定しなかったため、LoRAを試す価値があったかもしれません。しかし現在Qwen3.6やGemma4がリリースされています。特にGemma4のロールプレイ能力は秀でています。
LoRAでドメイン知識を与えるのは難しい

難しいです。たとえば既存のキャラクターを演じさせるためにそれに関する文書をデータセットとして用いてLoRAでファインチューニングするといったことは現実的ではありません。口調はプロンプトで制御でき、ドメイン知識は入れられない。たぶんこれが、LLM界隈でLoRAファインチューニングが流行らない理由だと思います。
Weight-Decomposed LoRA(DoRA)
LoRAの派生であるDoRAはLoRAよりもドメイン知識の学習に優れているとのことです。以下はClaudeによる説明です:
LoRAは事前学習済み重み行列の更新量を低ランク行列で近似します。一方DoRAはまず重み行列を大きさ(magnitude) と方向(direction) に分解し、方向成分のみをLoRAで更新します。これにより、LoRAと同等のパラメータ数でありながら、フルファインチューニングに近い学習挙動を示すとされています。
具体的なイメージとしては:
- LoRA:「重みをどれだけ動かすか」を低ランクで制約する
- DoRA:「重みをどの方向に向けるか」と「どれだけ強調するか」を分離して学習する
LoRAの学習や適用に対応しているホストアプリが少ない
oobabooga/text-generation-webuiとSillytavernくらいしか知りません。前者に至ってもLoRAにはCUDA向けのビルドでしか対応していないはずです。Rocmはだめでした。後者はUIが煩雑すぎて好きじゃない……
前者はDoRAの読み込みに対応しているようです。
版権キャラを完璧に演じさせるには?
LLMがもともと持つドメイン知識に頼る
何も特別なことをせず、「あなたは〇〇です。(これに続いてキャラに関する簡単な説明をし、口調や性格を表すいくつかのセリフの例を示す)」というシステムプロンプトを書くだけです。あとはLLMの持つ知識にお祈り。
有名なキャラであればこれで概ねうまくいきます。ただキャラが有名でなかったり、細かい設定を必要とするシチュエーションに持っていったりすると安定しません。たとえばネイキッド・スネークは知っていてもシギントやシギントの未来は知らないかもしれませんし、ネイキッド・スネークが吸血鬼を怖がるというような少しマイナーで話題に上がりづらい(データセットに現れにくい)知識を知らないかもしれません。
キャラクターカードという、キャラクターについて構造的に定義できるプロンプト形式があるようです。口調の例を書くとき、システムプロンプトに直接書き込むよりキャラクターカードのmes_exampleに書き込んだほうがよく追従してくれるとのことです。
RAGを使う
文をベクトルデータベースに格納し、会話全体あるいはユーザーからのメッセージと最も類似する文を引っ張ってきて会話と一緒にLLMに渡し、その場限りの知識として利用させる、といった方法です。
あるいはコンテキストウィンドウが許すなら、必要な情報の要約を(LMStudioのRAG-v1のような仕組みで)渡すのもいいかもしれません。
前者の方法では、要約を適切に区切ってデータベースに登録する必要があります。この方法をドメイン知識の検索元としてではなく長期記憶の実装として利用したことがありますが、引き出した記憶をあまり利用してくれませんでした。あるいは引き出した知識に引っ張られて応答が不自然なものになることもあります。いずれにせよあまりいいやり方ではありませんでした。
ですがやってみる価値はあると思います。基本的にLLMが持つドメイン知識に頼っておいて、細かい知識をベクトルデータベースに置いておくという使い方はうまくいくかもしれません。
(Lorebook)
キーワードトリガーで、事前に設定しておいた知識を適宜コンテキストに含める手法です。キーワードトリガーかあ……
RAGなら表記ゆれしていても知識を引っ張ってきてくれますが、キーワードトリガーだと完全一致しなければなりません。
結論
今後コンテキストウィンドウいっぱいの情報を把握しておけるようなローカルLLMが登場したら、ドメイン知識のまとめを全て突っ込んでしまうことができます。たぶんこれが一番楽でうまくいきます。
次にDoRAですが、キャラクターごとにいちいちファインチューニングするのはあまりにも面倒なので、そのキャラを取り巻く設定を包括的に記した文をデータセットとしてファインチューニングすることで、その作品のキャラならプロンプトを差し替えるだけで対応できるといったようにするといいかもしれません。幻想郷DoRAを作って幻想少女LLMを作るといった具合に。データセットの用意がめんどくさすぎるが……

コメント