Files
Wanabi-Novelist-12B/README.md

219 lines
14 KiB
Markdown
Raw Normal View History

---
license: apache-2.0
language: ja
tags:
- japanese
- text-generation
- novel-writing
- mistral
base_model: mistralai/Mistral-Nemo-Base-2407
pipeline_tag: text-generation
---
**Wanabi-Novelist-12B** は、小説執筆支援に特化してファインチューニングされた、日本語大規模言語モデルです。
このモデルは、専用デスクトップアプリケーション **[Project Wannabe](https://github.com/kawaii-justice/Project-Wannabe)** と連携して使用することを前提に設計されています。アプリケーションが提供するGUIを通じて、ユーザーはアイデア出しから本文生成、続きの執筆まで、一貫した執筆体験を得ることができます。
ベースモデルには[`Mistral-Nemo-Base-2407`](https://huggingface.co/mistralai/Mistral-Nemo-Base-2407)を採用しました。
**本モデルは[Project Wannabe](https://github.com/kawaii-justice/Project-Wannabe)で使用することを想定した小説執筆特化モデルです。一般的なInstructモデルのような汎用的な指示応答性能はありません。**
実際に使用する際は以下のリンクからGGUFをダウンロードしてkoboldcpp経由で使用してください。
[![GGUF](https://img.shields.io/badge/GGUF-Download-green)](https://huggingface.co/kawaimasa/Wanabi-Novelist-12B-GGUF)
## ✨ 主な機能
`Wanabi-Novelist-12B`は、[Project Wannabe](https://github.com/kawaii-justice/Project-Wannabe)を通じて以下の3つの主要なタスクを実行します。各項目の具体的な説明は [Project Wannabe](https://github.com/kawaii-justice/Project-Wannabe)の[チュートリアル](https://github.com/kawaii-justice/Project-Wannabe/blob/main/docs/Quick_Start_Guide.md)をご確認ください。
1. **本文生成 (GEN)**
* タイトル、あらすじ、プロットといったメタ情報に基づいて、小説の冒頭や新たなシーンを生成します。メタ情報なしで、完全に自由に生成することも可能です。
2. **続き生成 (CONT)**
* 執筆済みの本文を読み込み、文脈に沿った自然な続きを生成します。オーサーズノート(短期的な展開指示)を用いることで、より細かく展開を誘導できます。
3. **アイデア生成 (IDEA)**
* キーワードやジャンルなど、断片的な情報から、小説の骨子となるアイデアタイトル、あらすじ、プロット、設定などを生成します。v2以前とは異なり、簡潔な内容やと途切れた文章からアイデアを生成できるようになりました。
これらのタスク実行時に、**レーティング (`general`/`r18`)** や **セリフ量の割合** を指定することで、生成される内容をさらに細かくコントロールできます。
## Wanabi-Novelist-24Bとの違い
本モデルは [Wanabi-Novelist-24B](https://huggingface.co/kawaimasa/Wanabi-Novelist-24B) と同一のデータセットで学習されていますが、以下の点が異なります。
* **ベースモデル:** 24B版が`Mistral-Small-3.1-24B-Base-2503`を使用しているのに対し、12B版は[`Mistral-Nemo-Base-2407`](https://huggingface.co/mistralai/Mistral-Nemo-Base-2407)12Bパラメータを使用しています。
* **モデルサイズ:** パラメータ数が約半分のため、VRAM消費が少なく、より手軽に利用できます。
* **学習設定:** LoRA rank 16 / alpha 3224B版はrank 128 / alpha 256で学習しており、量子化なしフルBF16で学習を行っています。
* **性能:** ベースモデルのサイズが小さいため、24B版と比較して生成品質は劣る可能性がありますが、より軽量に動作します。
## 主な特長とwanabi-v2からの進化点
Wanabi-Novelist-12Bは、24B版と同じデータセット改善とアーキテクチャ上の改善を取り入れています。
### 1. データセットの全面的刷新
学習データの質と多様性を向上させるため、データセットをゼロから再構築しました。
* **多様な文体の学習:** Web小説のデータセットを**約2万4千件**まで拡張したのに加えて、新たに**青空文庫約7千件**のデータを追加しました。これにより、現代的な文体から格調高い表現まで、より幅広い文体への対応を目指しました。
* **データ品質の改善:** 本文データをすべて再取得することで今まで本文に含まれていたイズ作者名や作品IDの混入などを除去。さらに、小説の体裁に不可欠な**空行や字下げが適切に維持されるように**データ処理を改善しました。
* **ジャンルの偏り是正:** Web小説データにありがちな女性向けジャンルへの偏りを緩和し、よりバランスの取れたデータ構成になるよう調整しました。
* **高品質な合成メタデータ:** 300B以上のオープンウェイトモデルとSOTAレベルのLLM 8種類以上と20種類以上のプロンプトをランダムに組み合わせながら各小説に6種類のメタデータ計18万件を生成しよりユーザーの多様な入力を模倣することを目指しました。
### 2. 基礎性能
* **ベースモデル:** [`Mistral-Nemo-Base-2407`](https://huggingface.co/mistralai/Mistral-Nemo-Base-2407) を採用しています。12Bパラメータながら、Mistralアーキテクチャによる高い言語理解能力を持っています。
注意理論上のコンテキストは128Kまで対応していますが、学習時のコンテキストは最大32Kです。ロングコンテキストでは性能が低下する可能性があります。
### 3. 機能の改善と有効化
ユーザーがより直感的に生成内容をコントロールできるよう、機能不全に陥っていた機能をモデルがサポートするように改善しました。
* **アイデアタスクの修正:** v2以前ではタイトル、あらすじ、プロット、設定などのアイデアの項目の欠落部分を生成することのみに特化しておりアイデアを膨らませることができず、実用的なアイデア生成が困難でしたが、上記の豊富なメタデータを利用して簡潔/不完全なアイデアを入力すると詳細なアイデアを生成するようにしました。。これにより、生成したいアイデアを簡単に記すだけで、それを膨らませた多様なアイデア案を作ってくれるようになりました。
* **「セリフ量」指定機能の改善:** 従来は曖昧だったセリフ量の指定を、「**次に生成される文章**」のセリフ量を明示的に指定する形式に改善しました。これにより、シーンに応じた会話量の調整がより容易になりました。(以前は小説全体のセリフ量を計算していため、不安定でした。)
* **この先の展開についての指示・メモ:** 次の展開をわかりやすい名称で指示できるようになりました。v2以前のオーサーズートと同一機能ですが、名称をわかりやすくしました。
このモデルの能力を最大限に引き出すには、専用アプリケーション **[Project Wannabe](https://github.com/kawaii-justice/Project-Wannabe)** の使用が不可欠です。
Project Wannabeは、本モデルが学習した特殊な指示形式構造化プロンプトを、ユーザーが意識することなくGUIから簡単に生成できるように設計されています。正しく形式を理解すればモデル単体での使用も可能ですが、煩雑なためProject Wannabeとの連携を強く推奨します。
## 💻 学習の詳細
### ベースモデル
* [mistralai/Mistral-Nemo-Base-2407](https://huggingface.co/mistralai/Mistral-Nemo-Base-2407)
### 学習フレームワーク
* [LLaMA-Factory](https://github.com/hiyouga/LLaMA-Factory)
### 学習設定
<details><summary>学習設定 (LLaMA-Factory)</summary>
```yaml
# モデルとデータセット
model_name_or_path: mistralai/Mistral-Nemo-Base-2407
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_12B_v1
# LoRA 設定
lora_target: all
lora_rank: 16
lora_alpha: 32
lora_dropout: 0.05
use_rslora: False
seed: 260322
# シーケンス長とバッチサイズ
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: 3e-5
num_train_epochs: 1
lr_scheduler_type: cosine_with_min_lr
lr_scheduler_kwargs: {"min_lr_rate":0.1}
warmup_ratio: 0.02
logging_steps: 5
save_steps: 100
save_total_limit: 80
optim: paged_adamw_8bit
weight_decay: 0.01
max_grad_norm: 1.0
# その他の最適化
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>
## 📝 プロンプト形式 (mistral_small テンプレート)
本モデルは LLaMA-Factory の `mistral_small` チャットテンプレート形式で学習していますが、[Project Wannabe](https://github.com/kawaii-justice/Project-Wannabe)で使われる特定のフォーマットのみしかサポートされていません。一般的なチャットや指示応答には使えません。具体的なフォーマットは[ドキュメント](https://github.com/kawaii-justice/Project-Wannabe/blob/main/docs/prompt_logic.md) をご覧ください。またこれらの内容は[Project Wannabe](https://github.com/kawaii-justice/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](https://github.com/kawaii-justice/Project-Wannabe)で使用することを想定した小説執筆特化モデルです。一般的なInstructモデルのような指示応答性能はありません。
* **偏り:** 学習データの特性上、生成内容が特定のジャンル、表現、展開に偏る可能性があります。
* **不適切な内容:** 学習データには多様なテキストが含まれるため、未成年者の閲覧に適さない、または不快感を与える可能性のある文章が生成されることがあります。レーティング機能で制御を試みていますが、完全ではありません。
* **品質の限界:** 生成される文章の多様性、一貫性、文脈への追従性には限界があります。特に長い文章の生成では破綻する可能性があります。オーサーズノート機能などでの誘導をお試しください。
* **利用上の注意:** 本モデルは研究および実験的な目的で提供されています。利用者は、適用される法律および規制を遵守する責任を負います。違法な目的や他者の権利を侵害する目的での使用は固く禁じます。
* **自己責任:** 本モデルの使用によって生じたいかなる結果についても、開発者は一切の責任を負いません。全て自己責任においてご利用ください。