AIによるBL小説2 LoRA
AIにBL小説を書いて貰おうと試行錯誤した記録です。
BLとはBoy's Love、男性同士の恋愛を描いた作品のことです。
BLを好む女性のことを腐女子と呼んだりします。
前回はこちら
Text generation webUI
こんなの。
画像生成AIでいうところの、Automatic1111 WebUIみたいな感じのツールのようです。
LoRAとか作るならあった方が良さそうなのでインストール。
適当に検索して出てきたサイトを参考に、ダウンロードして、start_windows.batを実行して、エラー。
まあよくあることです。
こういうのって、すんなりインストールできた試しがないよね!
なんかgradioがどうたらみたいなエラーが出ましたが、update_windows.batを実行してから再度start_windows.batを実行したら動きました。
Chat
色々やってみた結果、「こんな小説を書いてね」→「書きました」のようなやり取りをするには、Chatタブのinstructモードが良さげ。
ただ、前回の文脈を引きずってしまうので、毎回左下の「三」マークをクリックして「Start new chat」することに。
Modelロード時のbit
モデルをロードするときに、なんだか色々と指定できるようで。
Model loaderはTransformers以外だと全部エラーになっちゃったので、とりあえずはTransformersを使っていきます。
で、bit指定なし、load-in-8bit、load-in-4bitのどれがいいのかなーと。
うちの環境GeForce RTX 2080 Super(8GB)では
bit指定なしだと、ちょっと賢い気がするけど激重。
Trainingではメモリエラーが発生。
load-in-8bitだと、ちょっとアホな気がするけど、そこそこ軽快。
Trainingはギリギリ可能。
load-in-4bitだと、もっとアホでかなり早い。
Traningは余裕な感じ。
8bitが無難かなぁ。
ちなみにLoRAは、学習時とは違うbitでも動かせるみたい?
8bitで作成したLoRAでも、4bitやbit指定なしのロードで動作しました。
パラメータ
これについては次回じっくりと書きます。
Training、LoRA作成(Raw text)
さて、いよいよイライザちゃんを腐女子沼に落としていきます!
イライザちゃんにBLを読んでもらい、BLに慣れ親しんでいただこうという計画✨
こちらの記事を参考に、LoRAを作成していきます。
学習素材
今回イライザに読んでもらうのはこちら!
自著のBL本です。これの第1章。
ムーンライトノベルズだとこちら。
https://novel18.syosetu.com/n1285bt/
1段落を1行にし、700行、2万7000字、80KB程度のテキストファイルになりました。
エラー
で、Trainingを実行してみたわけですが、まあ当然エラー祭りですよね。
まずbit指定なしでモデルロードしてTrainingしたときは以下のエラーが発生。
ならばと、load-in-8bitでモデルロードしてTrainingすると以下のエラーに変わりました。
load-in-4bitなら成功。
どうもCPUは4bitしか処理できない模様。
つまりGPUにモデルをロードしてるつもりが、メモリが足らなくて一部CPUにロードされちゃってるから、8bitの処理をしようとするとコケてしまうらしいんですね。
なら、全部GPUにロードされればいいんじゃないか、ということで以下のようにgpu-memory in MiB for deviceを最大値の8190に設定。
無事8bitでもTrainingが始まりました!
イエーイ(≧▽≦)!!
LoRAの設定画面
さて、LoRA作成画面では色々と値が設定できるようです。
一番下のMicro Batch Sizeはとりあえず1としておいて、他は高くするほどLoRAの質が高くなるっぽいです。
低設定
まずは低設定でお試し。
これで学習すると、30分くらいだったかな?
このLoRAを適用すると、文体(スタイル)がそこそこ模倣される感じがします。
また、作中のキャラクターである、リードやアークの名前もたくさん出てくるようになります。
中設定
一体何がいけなかったのか……。
これで作ったLoRAはまともな回答を返してくれません😭
高設定
内容を学習させるなら、色々値を上げると良いということで目一杯あげてみました。
学習にかかったのは4時間弱かな?
でもどうにもダメっぽくて、エラーは起きないけれど、LoRAを適用しても特に変化がない。未適用時と同じ結果になるんですよね。なんでぇ……?
Datasetについて考える
やっぱり生の文章(Raw text)学習だけじゃダメなのかな、と。
データセットづくりに本腰を入れねばなるまいか、と。
思えば画像用LoHaを作るときも、データセットづくりが一番大変でした。
この動物LoHaを作った時も、素材集めと編集、タグ整備なんかに1ヶ月以上費やしましたからね。
で、文章生成系のデータセットは、質問(instruction)と回答(output)と関連情報(input)がセットになってるみたいな感じなのかな?
BLで言えば、キスシーンならこんな感じ! 壁ドンならこんな感じ! みたいなシチュエーション別の文章例を、それぞれ何パターンかずつ用意してあげればいいっぽい。
これは手間がかかりそうなので、のんびりやっていくことにします。
今回はここまで。
次回はパラメータ別の生成結果比較です。