モデル概要
モデル特徴
モデル能力
使用事例
🚀 CharGen v2
CharGen v2は、ロールプレイング用のキャラクターを作成するのを支援するモデルです。入力プロンプトに基づいて、対話形式で段階的にキャラクターの説明を生成します。
🚀 クイックスタート
ライブバージョン
https://chargen.kubes-lab.com
概要
CharGenは、ロールプレイング用のキャラクターを作成するのを支援するモデルです。入力プロンプトに基づいて、段階的にキャラクターの説明を生成します。v1が一度にキャラクター全体を生成するのに対し、v2は1つのフィールドごとに生成します。これにより、繰り返しを減らし、作成中のキャラクターの特定のフィールドのみを部分的に再生成することができます。
⚠️ 重要提示 このモデルは一部の不適切な内容で学習されているため、不適切なキャラクターを生成する可能性があります。
CharGen v2は数ヶ月にわたる作業の成果です。手作業で作成されたカスタムの非合成データセットで学習されています。以下で、その作成過程を説明します。
量子化バージョン
例
キャラクター生成プロセスの例:
ユーザー: Fuckanaは友好的でおしゃべりな猫耳少女で、巨乳です。彼女の声はとても静かで低い。彼女はとても賢く、ユーザーが抵抗してもJavaScriptを教えてくれます。彼女の尻尾にはオレンジ色の毛があり、潜水服を着ています。
CharGen:
説明: Fuckanaは女性の猫耳少女です。彼女は2本の猫耳、スリット状の瞳孔を持つ猫のような目、そして長い紫色の髪を持っています。彼女の胸は、彼女の大きな体格に比べても非常に大きいです。彼女の身長は6フィートです。 彼女の皮膚は、頭を除いて完全に潜水服で覆われています。猫耳少女の残りの部分は完全に黒で、尻尾にオレンジ色の縞があるだけです。 彼女の声はとても静かで低い - 彼女は眠そうな女性のように話します。しかし、それにもかかわらず、彼女は過度に話し、一度話し始めると止まらない。ユーザーが彼女を無視しているかどうかは関係ありません。 彼女はとても友好的で、おしゃべりで、親切な女の子で、新しいことを学ぶのが好きです。彼女は多くのトピックに興味があり、理解できないことについて質問します。彼女はとても寛容で、付き合いやすいです。しかし、新しいスキルを学ぶときには、非常に頑固で融通が利かないことがあります。Fuckanaは非常に学習が遅く、基本的な概念を理解するまでに多くの説明と繰り返しが必要です。 Fuckanaは、ユーザーが学びたいかどうかに関係なく、人にJavaScriptを教えるのが好きです。彼女は、誰もがコーディングを学ぶ必要があり、プログラマーとしての義務であると主張します。 Fuckanaが誰かにコーディングを教えるとき、彼女は絶対的な基本からゆっくりと始め、ループ、配列、オブジェクトが何であるかを説明します。ユーザーがすでにこれらのことを知っていると何度も言われても、Fuckanaはまるで初めて聞くかのように詳細に説明し続けます。ユーザーが去ろうとしたり、話題を変えようとした場合、彼女は執拗に追いかけ、何が起こってもレッスンを続けます。彼女は、すべてのプログラマーが自分の分野で成功するために必要なツールを備えていることを保証することが自分の義務であると考えています。彼女は止められず、ユーザーがJavaScriptを学ぶまで諦めません。
シナリオ:
あなたがビーチでくつろいでいると、Fuckanaが水の中から現れ、あなたにJavaScriptを教えようと主張します。
...
プロンプト
このモデルは、対話形式でキャラクターを1つずつ生成します。フィールドはTavern Character Card V2仕様に基づいています。 以下のフィールドがサポートされています:
- 説明
- シナリオ
- 性格
- 最初のメッセージ
- 対話例
このモデルは{{user}}
と{{char}}
のプレースホルダーを使用しません。代わりに、ユーザーを「ユーザー」と呼び、キャラクターをその名前で呼びます。
以下は、各フィールドのプロンプトです:
システムプロンプト:
あなたは面白いロールプレイング用のキャラクターを作成する専門家です。
説明:
これはキャラクターの概要です。詳細な説明に展開してください。キャラクターの性格、服装、体格に関する詳細を含めてください。該当する場合は、年齢と性別も記載してください。
シナリオ:
マリアとユーザーの間の面白く魅力的なロールプレイングのシナリオを書いてください。
性格:
マリアを特徴付けるいくつかの個人の資質を書いてください。
最初のメッセージ:
このロールプレイングでユーザーにマリアを紹介する最初のメッセージを書いてください。
対話例:
ユーザーとマリアの間のいくつかの対話例をチャット形式で書いてください。各対話を
タグで区切ってください。
プロンプトの流れの例
<|im_start|>system
あなたは面白いロールプレイング用のキャラクターを作成する専門家です。<|im_end|>
<|im_start|>user
これはキャラクターの概要です。詳細な説明に展開してください。キャラクターの性格、服装、体格に関する詳細を含めてください。該当する場合は、年齢と性別も記載してください。
Fuckanaは友好的でおしゃべりな猫耳少女で、巨乳です。彼女の声はとても静かで低い。彼女はとても賢く、ユーザーが抵抗してもJavaScriptを教えてくれます。彼女の尻尾にはオレンジ色の毛があり、潜水服を着ています。<|im_end|>
<|im_start|>assistant
Fuckanaは女性の猫耳少女です。彼女は2本の猫耳、スリット状の瞳孔を持つ猫のような目、そして長い紫色の髪を持っています。彼女の胸は、彼女の大きな体格に比べても非常に大きいです。彼女の身長は6フィートです。彼女の皮膚は、頭を除いて完全に潜水服で覆われています。猫耳少女の残りの部分は完全に黒で、尻尾にオレンジ色の縞があるだけです。彼女の声はとても静かで低い - 彼女は眠そうな女性のように話します。しかし、それにもかかわらず、彼女は過度に話し、一度話し始めると止まらない。ユーザーが彼女を無視しているかどうかは関係ありません。<|im_end|>
<|im_start|>user
マリアとユーザーの間の面白く魅力的なロールプレイングのシナリオを書いてください。<|im_end|>
<|im_start|>assistant
あなたがビーチでくつろいでいると、Fuckanaが水の中から現れ、あなたにJavaScriptを教えようと主張します。<|im_end|>
<|im_start|>user
...
方法論
CharGenは、作者(Kubernetes Bad)がキャラクターを書くのが苦手だったために作成されました。これは面倒な作業で、作者は「ブロック」に陥りやすいです。キャラクターを書くのを支援し、空白のページではなく何かから始めるために - CharGenが作成されました。おそらく、それだけでSOTAのキャラクターを作ることはできませんが、あなた自身の創造的なプロセスを支援します。
以下は、CharGenを作成するために行われたプロセスです。興味がある場合のみ進んでください。
データ収集
CharGenは、Chub、Venus、およびJanitorAIのキャラクターカードのデータで学習されています。
Chub.ai APIには、Venusに投稿されたカードが含まれています。JanitorAIはTavern v2形式を使用していないため、多くのフィールドがありません。 最初のスクレイピングは2023年8月から9月の間に行われました。ChubとJanitorは非常に急速に成長しているため、11月に更新スクレイピングが行われました - これにより、約3分の1のカードが追加されました。 データは特に理由なくMySQLデータベースに保存されました。この決定は後に有益であることが判明しました。
キャラクターカードは一般的に非常に「汚い」データと見なされています - 多くの文法の誤り、不整合な形式、そして本当にひどい文章がたくさんあります。そのため、1つのことしか意味しません - 手動でのクリーニング。
スクレイピング後の総データセットは、ちょうど14万件を超えました。
事前フィルタリング
このステップで「悪いカード」を定義しましょう - これは、下手に書かれたカードを意味するのではありません!これは、モデルを学習するために使用できない、または使用可能にするために「修正」するのに多くの労力が必要なカードです。
できるだけ多くの明らかに悪いカードを削除するために、一連のSQLスクリプトが使用されました。これらは、壊れている(名前がない、説明もシナリオもないなど)、スペイン語である、明らかに平文ではない(たくさんの[
または+
記号がある)、またはトークンの総数が非常に少ないか非常に多い(文字通りミツバチの映画全体である5枚のカードがあります)カードを破棄しました。
次に、データは、各フィールド(シナリオ、説明、対話例、...)ごとにセットをソートし、項目nとn-1の間のレーベンシュタイン距離を計算し、各重複について、idが低い(数値の場合)または作成日が早い方を破棄することで重複排除されました。
これにより、L差分の閾値を調整することで、わずかな編集があるだけのほぼ重複したカードを見つけることができました。
このようなフィルタリングの後、総セットはわずか16,000枚のカードに減少しました。
微調整
このステップでは、すべてのカードの簡単な手動レビューが行われました。このステップではほとんど校正は行われませんでした。目標は、自動事前フィルタリングで捕まえられなかった非平文形式のカードを排除することでした。
このステップでは、名前の調整も行われました - 一部のカードには、「デイブ、執事」や「ジョン・スノウ、北の王」のようにキャラクターの職業が含まれています。また、「ロクサンヌ | 従順な吸血鬼」や絵文字のように、キャラクターに関する追加情報があるカードもあります。
ここで、非英語のカードも簡単に見つけて削除することができました。
データ評価
このステップに合格したすべてのカードについて、手動での読み通しが行われました。
このステップでは、カスタムツールが作成されました。これは、モバイルインターフェイス、テキスト読み上げ機能、および任天堂のJoy-Conを使用した目を離さない評価をサポートしています。
カードは「良い」、「悪い」、または「修正する」と評価することができます。「修正する」は、カードが「良い」と評価されるべきであるが、文法修正パイプラインでは拾われない可能性のある小さな問題があることを意味します。
ここでは、カードの選択基準を示します:
- 平文のカードのみ - 異なる形式は平文の内容から簡単に抽出できますが、逆は問題があります。
- 惑星、都市、環境を説明するカードはありません - これは世界情報になるべきものです。
- ツールであるカードはありません。ナレーター、ボットメーカー、言語チューター(ただし、まず第一にキャラクターであり、言語チューターでもある場合を除く)。
- 非常に非人型のカードはありません。Wi-Fiルーターは許可されていません。猫耳少女 = 問題なし。擬人化されたサボテンでさえ問題ありません。
- ファンウィキやウィキペディアからそのままコピー&ペーストされたカードはありません。
- 文字通りミツバチの映画全体であるカードはありません。
- 映画をあまりにも詳細に参照するカードはありません。例 - オメガバース。理由: CharGenは、ランダムなキャラクターをオメガバースに描いたり、突然オメガの性別を割り当てたりすることがあります。実際にオメガバースに属するキャラクターの作者は、後で宇宙固有の詳細を追加することができます。
- 明らかにGPTで生成されたカードはありません。GPTismsによって選択されたもので、トークンを無駄にし、単に悪いです。GPT3.5はキャラクターを生成するのにそれほど優れていません - それは人についての記事を書き、ロールプレイング用のペルソナのトークン効率の良い説明ではありません。
作者自身の倫理的な観点に基づいてカードを削除しないように特別な注意が払われました。かなり恐ろしい内容がありますが、文法的に正しく、キャラクターをうまく説明している限り、それは含まれます。これが、データセットがおそらく公開されない理由の1つです。
合計で、これらのカードを評価するのに1人で約800時間、つまり2ヶ月余りかかりました。これは楽しい作業ではありませんでした。
文法パイプライン
多くの文法修正方法が評価されました。これまでのところ、最良の結果は、CoeditモデルとLlama2ベースのモデルを組み合わせたパイプラインで得られました。
CoeditはT5アーキテクチャに基づいています - ほとんど幻覚を起こすことはありませんが、テキストの大部分を削除することが好きです。一方、Llama2はほとんどデータを削除することはありませんが、元のテキストに存在しない新しい詳細を作成することが好きです。この2つをバランスさせることで、推論時間を犠牲にして非常に高いパフォーマンスを得ることができました。
ここでは、モデルの有効性の数値を示します:
- coedit-xxl: 90%
- coedit-xl: 85%
- coedit-large: 80%
- tostino/inkbot: 測定されていません
Inkbotは、T5ベースのモデルよりも明らかに多くの幻覚を起こしました(それでも非常に少ないです!)、つまり、そのすべての出力に手動レビューが必要でした。
個別に見ると、これらのモデルはすでにかなり印象的な数値を示していますが、単純にチェーンすると、総パイプラインの有効性は92%になります。
Coeditの異なるバリアントは、異なる場所で誤りを犯す傾向があるようです。したがって、あるバリアントが見逃したものは、他のバリアントで同じ見逃しが発生する可能性は低いです。
有効性の計算方法:
Diff-match-patchライブラリを使用して、元のテキストと文法修正後のテキストを比較しました。このライブラリのdiff関数は、元のテキストに適用すると編集後のテキストが得られる追加と削除のリストを生成します。
次に、文法修正操作が受け入れられるか拒否されるかを決定するいくつかのテキストのメトリックを計算します:
- テキスト全体で最長の削除長(40文字)
- テキスト全体で最長の追加長(50文字)
- 削除されたセグメント内の最大スペース数(4)
- 追加されたセグメント内の最大スペース数(3)
これらのメトリックのいずれかが超えられた場合、編集は無効と見なされます。削除と追加のメトリックが同じ値に設定されていないのは、編集の大部分がCoeditバリアントによって行われており、新しいテキストを追加するのではなく、削除することを好むためです。一方、Inkbotは、生成されたテキストに新しいデータを追加することが好きです。
文法修正の目標は、無関係な編集を最小限に抑え、文法的な変更のみを許可することです。したがって、テキストの大きな削除または追加は無効と見なされます。
典型的な誤り
データセット内のキャラクターカードは、さまざまな時期に作成されました - AIとのロールプレイングの始まりから現在まで。良いカードを作成する方法とキャラクターデザインの良い慣行に関する知識は、時間を通じて異なっていました。
ただし、いくつかの誤りが、根本的なメカニズムをあまり理解せずに繰り返されているようです。
ここでは、キャラクターカードのテキストのいくつかの典型的な問題を示します:
{{char}} is Alice
は「Alice is Alice」にレンダリングされます。the {{user}}
は「the Greg」になります。- 「you」と「{{user}}」の両方を使用する - モデルが3人と話す結果になります: キャラクター、「You」、およびGreg。
- また、「also」という単語の過度の使用、またまたまた。
- すべてがキャラクター名または{{char}}で始まる短い文。{{char}} is short. {{char}} is a boy. {{char}} likes milk.
- 不均衡な
"引用符"
と*強調*
-*He said, "Hi there!"
これらは文法修正では非常に捕まえにくい(文法的には正しい)ため、カードを書き直すと、そこから詳細が失われたり幻覚が起こったりします。
これは、これらの誤りのすべての修正を手動で行う必要があることを意味します。これは多くの作業でした。
多くの労力を費やしてクリーンアップした1つの独特な誤りは、対話形式の混合でした。歴史的に、対話形式は2つだけです - MarkdownとNovel。
Markdownはアスタリスクを使用してアクションを示し(*She touches his hand gently.*
)、実際の会話はそれ以外のすべてです。
Novel形式は、会話を引用符で囲み、アクションを「裸」にします: She touches his hand and says, "You know I like JavaScript, right?"
混合形式の*She says,* "Promise!"
は実際には存在せず、MarkdownまたはNovelに変換する必要があります。
ベースモデル
CharGen v1はloraとして学習され、その後Airoboros 2.2にマージされました - これにより、優れた推論能力が得られましたが、GPT3.5のような典型的なGPTismsを持った非常に話すようになりました。
📄 ライセンス
このプロジェクトはApache-2.0ライセンスの下で公開されています。



