AIによるBL小説4 データセット
AIにBL小説を書いて貰おうと試行錯誤した記録です。
BLとはBoy's Love、男性同士の恋愛を描いた作品のことです。
BLを好む女性のことを腐女子と呼んだりします。
前回はこちら
第1回はこちら
学習素材について考える
AIの進化速度が速すぎて、記事を書ききる前に内容が陳腐化してしまうの、なんとかならないですかね?
(OpenAI Dev Dayを見ながら)
さて、第2回で生の文章(Raw text)を学習させたLoRAを作成しました。
しかし文体は学習できても、BLがどういうものかはあまり理解できてなさそうで。
概念を学習させるには、データセットを用いたトレーニングの方が良さそうです。
RAGとかもあるんでしょうけど、そちらはひとまず置いておきます。
が、ですよ。
当然ながら日本語BL小説用のデータセットなぞ、この世に存在する訳もなく、例のごとく手作りです。
供給のお淑やかなジャンルの民はいつもそう! 無いものは自家生産!
※元ネタはこちら
データセット作り
小説
さてまずはBL小説を用意します。
第2回にも出てきた自著のBL本です。
これの第1章、2万7000字。
ムーンライトノベルズだとこちら。
https://novel18.syosetu.com/n1285bt/
データセットの項目
こちらを参考にデータセットを作っていきます。
indexとcategory
indexは単純に連番。
categoryはとりあえず「closed_qa」としておきます。
ChatGPTくんに聞いたら、詩を書くための「poet」みたいな指定もあるようなので、本当は「novel」とかにしたかったのですが、ELYZAが認識してくれるかどうか分からなかったので、ひとまず実績のある無難な値にしておきます。
output
AI回答の模範となる部分です。
テキストエディタで、本文を適当に区切っていきます。
ダブルクォーテーションで囲って、それぞれ改行。
だいたい3~15行くらいずつに分けていきます。
これで134データに分かれました。
この段階でExcelに貼り付け。
input
文脈に当たる部分なので、前後をつなぎ合わせていきます。
前データのoutput + 今データのoutput + 次データのoutput とし、3データ分のoutputを合体させたものにします。
instruction
プロンプトに該当する部分ですね。
一律で以下のように指定します。
で、問題なのがXXXXXの所です。
ここは、outputの内容を端的に表したものにすればいい気がします。
つまり要約です。
要約ならChatGPTくんにお願いできるじゃん! と意気揚々と頼んだのですが、エロ規定に引っかかって拒否されました。
まだ指しか舐めてないのに!
厳しすぎるよ!!
BingのChatGPTくんは潔癖すぎる!!
しょうがないので自分で要約していきます。
超メンドクサイ(≧ヘ≦)
あ、「壁ドン」だとか「キスシーン」だとかいうタグ付け的な情報も、この項目に書いておきます。
jsonに変換
全データの要約ができたら、以下のサイトでjson形式に変換。
変換結果をテキストエディタに張り付けて、jsonファイルを作成。
text-generation-webui\training\datasets に放り込みます。
要約用データセット
これ、outputとinstructionを逆にしたら、要約用のデータセットが作れそう。
そっちで学習したLoRAも作ってみて、うまく行きそうなら第2章以降の要約を任せたいところです。
そしたらエロシーンの要約もできるじゃん!
可能な限り楽をしたい!
これについては、また別途考えてみます。
AIに書かせる
なんだかちょっと学習素材が足らない気もするので、AIノベリストくんとかに、いい感じの学習素材を作って貰うのもアリかなぁと思ったり。
これもやるとしたら次回以降かなー。
Training
ともかくBLデータセットらしきものが出来たので、早速Trainingしていきます!
モデルはElyzaを8bitでロード。
NameにLoRA名、DataSetに作ったjsonを指定。
設定はこんな感じ。
実行すると以下のようなエラー。
最初はFormatに「alpaca-format.json」を指定していたのですが、キーが合わないと。
えー? indexとcategory要らないのー?
データセットのjsonを直すのも癪だったので、「alpaca-format.json」をコピーして編集。黄色の「,index,category」部分を追加。
これで無事動きました。
学習時間は20分くらい。アレ? 思ったより早いぞ???
他設定だと2~4時間にもなったりしました。
違いが良くわからない……。
LR Schedulerをlinearからcosine_with_restartsとかにしてみましたが、なんだか過学習になる気がする?
あと、高ランクで作ったLoRAの文章はループしまくりです。
ヤンデレが過ぎる……!!
闇落ちELYZA (≧~≦)
というか学習素材にそんなハードな内容は含まれてないよ!?
ループ対策
しょうがないのでループ対策を行います。
でもなんだか回答がアホになる気がするので、なるべく低設定を攻めていきます。
repetition_penalty
→ ~1.06くらいまでが限界かな。
高くなるとやはり支離滅裂に。
repetition_penalty_range
→ あまり高いと激重になるので、256くらいにしてます。
Other parameters の no_repeat_ngram_size
→ 支離滅裂になる気がするので0のまま。
これで多少マシになったかな。
うーん。やっぱりちょっと支離滅裂かなぁ?
特に省略した後半はもっと微妙でした。
それから、ここにはちょっと載せられないのでアレですが、プロットを「押し倒す」とかにすると、ちょっとハードめのBL小説が出てくるようになりました。
おかしいな……。
学習素材にそんなハードな描写は含まれてないはずなんだけど……???
ChatGPT4 API
とか言ってるうちに、ChatGPT4のAPIが来ましたよ!!!!
早速BL小説を書いて貰います。
もうねー、全部これでいいじゃん? って気になりますよね。
ハイクオリティ過ぎ。文章が自然!
価格もそこそこ安い! colabレンタル代とか考えたら全然アリ!
ChatGPT4によるデータセット作り
直接小説を書かせるだけでなく、良質なデータセットまで簡単に作れちゃう!
今更データセットなんて必要あるの? という話ではあるんですが。
まあAPIなんて、いつ突然使えなくなるか、わかったもんじゃないですし?別のLLMトレーニングのために、データセットを作る意味はきっとあると(震え声)どうも他のLLMに使っては駄目なよう?
ライバル教育になっちゃいますもんね。
そりゃそうか……(・ω・) 残念。
データセット用のお題
お題づくりもお手の物。
優秀すぎて人間のやることが、ほとんどなくなっちゃいましたね!
万能過ぎ……。
過疎ジャンル民もChatGPT4さえあれば、いつでも推しキャラの小説が読めますね。
もう推しの同人誌を切望しすぎて、夢でまで同人誌を買うも読む直前に目が覚めてしまい、凄くがっかりするとか。
そんな飢餓には襲われなくて済むんですね……!
無限の供給! 凄い時代だ!
次回はこちら