CoolFace
Modelpublic

kawaimasa/Wanabi-Novelist-24B

sourceHugging Faceapache-2.0updated 9mo agoView on Hugging Face
0likes59downloads
Model Card

Wanabi-Novelist-24B

Wanabi-Novelist-24B は、小説執筆支援に特化してファインチューニングされた、日本語大規模言語モデルです。

このモデルは、専用デスクトップアプリケーション [Project Wannabe](https://github.com/kawaii-justice/Project-Wannabe) と連携して使用することを前提に設計されています。アプリケーションが提供するGUIを通じて、ユーザーはアイデア出しから本文生成、続きの執筆まで、一貫した執筆体験を得ることができます。

ベースモデルには`Mistral-Small-3.1-24B-Base-2503` から視覚機能を除去したものを採用しました。 本モデルは[Project Wannabe](https://github.com/kawaii-justice/Project-Wannabe)で使用することを想定した小説執筆特化モデルです。一般的なInstructモデルのような汎用的な指示応答性能はありません。 実際に使用する際は以下のリンクからGGUFをダウンロードしてkoboldcpp経由で使用してください。

![GGUF](https://huggingface.co/kawaimasa/Wanabi-Novelist-24B-GGUF)

✨ 主な機能

Wanabi-Novelist-24Bは、Project Wannabeを通じて以下の3つの主要なタスクを実行します。各項目の具体的な説明は Project Wannabeのチュートリアルをご確認ください。

  1. 1.本文生成 (GEN)
  2. 2.タイトル、あらすじ、プロットといったメタ情報に基づいて、小説の冒頭や新たなシーンを生成します。メタ情報なしで、完全に自由に生成することも可能です。
  1. 1.続き生成 (CONT)
  2. 2.執筆済みの本文を読み込み、文脈に沿った自然な続きを生成します。オーサーズノート(短期的な展開指示)を用いることで、より細かく展開を誘導できます。
  1. 1.アイデア生成 (IDEA)
  2. 2.キーワードやジャンルなど、断片的な情報から、小説の骨子となるアイデア(タイトル、あらすじ、プロット、設定など)を生成します。v2以前とは異なり、簡潔な内容やと途切れた文章からアイデアを生成できるようになりました。

これらのタスク実行時に、レーティング (`general`/`r18`) や セリフ量の割合 を指定することで、生成される内容をさらに細かくコントロールできます。

主な特長とwanabi-v2からの進化点

Wanabi-Novelist-24Bは、wanabi-v2の基本機能を継承しつつ、データセットの品質、モデルの基礎性能、そして生成の安定性を全面的に向上させました。

1. データセットの全面的刷新

学習データの質と多様性を向上させるため、データセットをゼロから再構築しました。

  • —多様な文体の学習: Web小説のデータセットを約2万4千件まで拡張したのに加えて、新たに青空文庫(約7千件)のデータを追加しました。これにより、現代的な文体から格調高い表現まで、より幅広い文体への対応を目指しました。
  • —データ品質の改善: 本文データをすべて再取得することで今まで本文に含まれていたノイズ(作者名や作品IDの混入など)を除去。さらに、小説の体裁に不可欠な空行や字下げが適切に維持されるようにデータ処理を改善しました。
  • —ジャンルの偏り是正: Web小説データにありがちな女性向けジャンルへの偏りを緩和し、よりバランスの取れたデータ構成になるよう調整しました。
  • —高品質な合成メタデータ: 300B以上のオープンウェイトモデルとSOTAレベルのLLM 8種類以上と20種類以上のプロンプトをランダムに組み合わせながら各小説に6種類のメタデータ(計18万件)を生成しよりユーザーの多様な入力を模倣することを目指しました。

2. 基礎性能の向上と安定化

より強力なベースモデルを採用しました。

  • —ベースモデルの更新: 基盤となるモデルを `Mistral-Small-3.1-24B-Base-2503` に更新し、言語理解や文脈把握といったLLMの基礎能力を向上させました。

注意:視覚機能は削除しています。また理論上のコンテキストは128Kまで対応していますが、学習時のコンテキストは最大32Kです。ロングコンテキストでは性能が低下する可能性があります。

3. 機能の改善と有効化

ユーザーがより直感的に生成内容をコントロールできるよう、機能不全に陥っていた機能をモデルがサポートするように改善しました。

  • —アイデアタスクの修正: v2以前ではタイトル、あらすじ、プロット、設定などのアイデアの項目の欠落部分を生成することのみに特化しておりアイデアを膨らませることができず、実用的なアイデア生成が困難でしたが、上記の豊富なメタデータを利用して簡潔/不完全なアイデアを入力すると詳細なアイデアを生成するようにしました。。これにより、生成したいアイデアを簡単に記すだけで、それを膨らませた多様なアイデア案を作ってくれるようになりました。
  • —「セリフ量」指定機能の改善: 従来は曖昧だったセリフ量の指定を、「次に生成される文章」のセリフ量を明示的に指定する形式に改善しました。これにより、シーンに応じた会話量の調整がより容易になりました。(以前は小説全体のセリフ量を計算していため、不安定でした。)
  • —この先の展開についての指示・メモ: 次の展開をわかりやすい名称で指示できるようになりました。(v2以前のオーサーズノートと同一機能ですが、名称をわかりやすくしました。)

🚀 Project Wannabe との連携 (必須)

このモデルの能力を最大限に引き出すには、専用アプリケーション [Project Wannabe](https://github.com/kawaii-justice/Project-Wannabe) の使用が不可欠です。

Project Wannabeは、本モデルが学習した特殊な指示形式(構造化プロンプト)を、ユーザーが意識することなくGUIから簡単に生成できるように設計されています。正しく形式を理解すればモデル単体での使用も可能ですが、煩雑なためProject Wannabeとの連携を強く推奨します。

💻 学習の詳細

ベースモデル

学習フレームワーク

学習設定

<details><summary>学習設定 (LLaMA-Factory)</summary>

yaml
# モデルとデータセット
model_name_or_path: kawaimasa/Mistral-Small-3.1-Base-2503-no-vison 
dataset: wanabi_novelist_dataset_32K_len, wanabi_novelist_dataset_24K_len, wanabi_novelist_dataset_16K_len 
eval_dataset: wanabi_novelist_dataset_for_eval_16K_len
template: mistral_small                     

# 学習方法と出力先
stage: sft
do_train: true
finetuning_type: lora                 # LoRA を使用
output_dir: saves//Wanabi_Novelist_24B_v5 # 学習結果の保存先

# QLoRA 設定
quantization_bit: 4
lora_target: all
lora_rank: 128
lora_alpha: 256
lora_dropout: 0.05
use_rslora: False
seed: 1206
#neftune_noise_alpha: 5.0
# シーケンス長とバッチサイズ 
cutoff_len: 32768
per_device_train_batch_size: 1        # バッチサイズは 1
gradient_accumulation_steps: 64       # 勾配累積ステップ 

preprocessing_num_workers: 16
# 最適化と混合精度 
flash_attn: fa2                       # FlashAttention-2 を有効化
use_unsloth_gc: true                  # Activation Offloading を有効化
bf16: true

# 学習パラメータ
learning_rate: 2e-5                  
num_train_epochs: 1                  
lr_scheduler_type: cosine_with_min_lr            
lr_scheduler_kwargs: {"min_lr_rate":0.15}
warmup_ratio: 0.02                   
logging_steps: 5                     
save_steps: 100                      
save_total_limit: 80                 
#optim: paged_ademamix_8bit
#optim_args: "beta1=0.9,beta2=0.999,beta3=0.999"
optim: paged_adamw_8bit
weight_decay: 0.01
max_grad_norm: 1.0
#train_on_prompt: false

# (オプション) その他の最適化 (試す場合)
#use_unsloth : True
enable_liger_kernel: true
#eval
eval_steps: 100
eval_strategy: steps
per_device_eval_batch_size: 1
eval_accumulation_steps: 1

report_to: tensorboard

</details>

</details><br>

📝 プロンプト形式 (mistral_small テンプレート)

本モデルは LLaMA-Factory の mistral_small チャットテンプレート形式で学習していますが、Project Wannabeで使われる特定のフォーマットのみしかサポートされていません。一般的なチャットや指示応答には使えません。具体的なフォーマットはドキュメント をご覧ください。またこれらの内容はProject Wannabeを使用する際は気にする必要はありません。

基本構造: <s>[INST]{Instruction}\n{Input}[/INST]{Output}</s> --- <details><summary>形式例をみる</summary>

1. 本文生成 (GEN):

  • —例 (メタデータ・セリフ量あり):
    <s>[INST]以下の情報に基づいて小説本文を生成してください。 レーティング: general
    # タイトル:
    星降る夜の魔法使い
    # キーワード:
    ファンタジー
    魔法学園
    # セリフ量: 多い[/INST]{生成される本文}</s>
  • —例 (メタデータなし):
    <s>[INST]自由に小説を生成してください。 レーティング: general[/INST]{生成される本文}</s>

2. 続き生成 (CONT):

  • —例 (参考情報・オーサーズノートあり):
    <s>[INST]参考情報と本文を踏まえ、最後の文章の自然な続きとなるように小説を生成してください。 レーティング: general
    【参考情報】

# ジャンル: 学園コメディ # セリフ量: 普通

    【本文】

廊下を歩いていると、角から飛び出してきたクラスメイトとぶつかってしまった。彼女の手には大量のプリントがある。 っ…まずい 「わわっ、ごめんなさ――」

    【この先の展開についての指示・メモ】

ぶつかった衝撃でプリントが宙を舞う。 主人公は慌てて拾うのを手伝う。 相手の女の子は少しドジな人気者。

    彼女は顔を赤らめて言った。
    「ごめんなさい」
    そう言いながら…[/INST]{生成される続きの本文}</s>

(注: 【参考情報】と【本文】の順序は変更可能です)

3. アイデア生成 (IDEA):

  • —例 (一部メタデータあり):
    <s>[INST]以下の情報に基づいて、完全な小説のアイデア(タイトル、キーワード、ジャンル、あらすじ、設定、プロット)を生成してください。 レーティング: general
    # ジャンル:
    SF
    サイバーパンク[/INST]# タイトル:
    電脳都市の孤独な探偵
    # キーワード:
    サイバーパンク
    探偵
    アンドロイド
    # ... (以下、生成されるアイデア一式)
    </s>

</details><br>

⚠️ 制限事項と注意点

  • —汎用性の制限: 本モデルはProject Wannabeで使用することを想定した小説執筆特化モデルです。一般的なInstructモデルのような指示応答性能はありません。
  • —偏り: 学習データの特性上、生成内容が特定のジャンル、表現、展開に偏る可能性があります。
  • —不適切な内容: 学習データには多様なテキストが含まれるため、未成年者の閲覧に適さない、または不快感を与える可能性のある文章が生成されることがあります。レーティング機能で制御を試みていますが、完全ではありません。
  • —品質の限界: 生成される文章の多様性、一貫性、文脈への追従性には限界があります。特に長い文章の生成では破綻する可能性があります。オーサーズノート機能などでの誘導をお試しください。
  • —利用上の注意: 本モデルは研究および実験的な目的で提供されています。利用者は、適用される法律および規制を遵守する責任を負います。違法な目的や他者の権利を侵害する目的での使用は固く禁じます。
  • —自己責任: 本モデルの使用によって生じたいかなる結果についても、開発者は一切の責任を負いません。全て自己責任においてご利用ください。