WindowsのKobold.cppで小説っぽいのを作る説明です。
割とアレなのもいけます。
割とアレなのもいけます。
なお、モデルにもよりますがメモリは32GBほしいです。
(個人的には近いうちに64GBにしたいと思っています)
GPU性能はあまり要らないはずです。参考までにこのページの作者はRTX 3060 12GBを使っています。
(個人的には近いうちに64GBにしたいと思っています)
GPU性能はあまり要らないはずです。参考までにこのページの作者はRTX 3060 12GBを使っています。
モデルをダウンロードする
https://huggingface.co/xzuyn/Alpacino-13B-GGML/tree/main
ここではAlpacinoの13B・GGML版を使ってみます。
ggjtv3-model-q5_1.binをダウンロードしてPCのどこかに保存してください。
ここではAlpacinoの13B・GGML版を使ってみます。
ggjtv3-model-q5_1.binをダウンロードしてPCのどこかに保存してください。
GGML版なら大体なんでもいいです。
なおGGMLはGPUが弱めのマシンでも、CPUを主に使って大規模言語モデルを実行するための形式のようです。同時に「量子化」もされているので、通常のモデルと比べてそこまで精度が落ちていないのにファイルサイズと使うPCパワーを圧倒的に抑えられています。
なおGGMLはGPUが弱めのマシンでも、CPUを主に使って大規模言語モデルを実行するための形式のようです。同時に「量子化」もされているので、通常のモデルと比べてそこまで精度が落ちていないのにファイルサイズと使うPCパワーを圧倒的に抑えられています。
https://w.atwiki.jp/localmlhub/pages/12.html
ダウンロードするモデルについては、このWikiのこちらのページも参考に。
ダウンロードするモデルについては、このWikiのこちらのページも参考に。
https://huggingface.co/TheBloke/airoboros-33B-gpt4-1.4-GGML/tree/main
https://huggingface.co/TheBloke/WizardLM-33B-V1.0-Uncensored-GGML/tree/main
最近ではこれらの「Q4K_M」なども良い感じだと思っています。速度的にはだいぶAlpacino13Bなどより落ちますが、やはり33B版だけあって書いてくれることの幅が広がる印象です。速いマシンを使っている方に。
https://huggingface.co/TheBloke/WizardLM-33B-V1.0-Uncensored-GGML/tree/main
最近ではこれらの「Q4K_M」なども良い感じだと思っています。速度的にはだいぶAlpacino13Bなどより落ちますが、やはり33B版だけあって書いてくれることの幅が広がる印象です。速いマシンを使っている方に。
Kobold.cppをダウンロードする
https://github.com/LostRuins/koboldcpp/releases
こちらから最新版のkoboldcpp.exeをダウンロードしてください。少し下にスクロールしてAssetsと書いてあるところにあります。
このファイル1つ+モデルファイル1つでやれるのが、kobold.cppのいいところです。
こちらから最新版のkoboldcpp.exeをダウンロードしてください。少し下にスクロールしてAssetsと書いてあるところにあります。
このファイル1つ+モデルファイル1つでやれるのが、kobold.cppのいいところです。
(必須ではないですが)DeepLをPCにインストールしておく
https://www.deepl.com/ja/app/
英語の文章を効率良く書いたり読んだりするためにDeepLはPCにインストールしておきましょう。
Ctrl+Cを2回押すと、ウィンドウが開いて選択している英語を翻訳してくれる機能が特に便利です。
英語の文章を効率良く書いたり読んだりするためにDeepLはPCにインストールしておきましょう。
Ctrl+Cを2回押すと、ウィンドウが開いて選択している英語を翻訳してくれる機能が特に便利です。
Kobold.cppを起動する
koboldcpp.exeを実行します。
初回は多分Windowsが文句を言うので、「詳細情報」を押してから実行ボタンを押しましょう。
初回は多分Windowsが文句を言うので、「詳細情報」を押してから実行ボタンを押しましょう。
すると小さなウィンドウが出てきます。
(※kobold.cppがバージョンアップしてUIが変わってしまいましたが、左下の「Old GUI」を押すとこの記事を書いたときのUIになります)
(※kobold.cppがバージョンアップしてUIが変わってしまいましたが、左下の「Old GUI」を押すとこの記事を書いたときのUIになります)
Streaming Mode(全部文章が決まる前に少しずつ文章を出力してくれる)、Use Smart Context(話が長くなってきても続けられる?)、High priority(Kobold.cppに優先的にPC性能を回す?)にはチェックを入れたほうがいいでしょう。
またある程度のGPUを積んだマシンの場合、「Use OpenBLAS」のボタンを押して「Use CLBLast GPU#1」に変えたほうがちょっとスピードアップするように思います。
そして緑色の「LAUNCH」ボタンを押しましょう。
するとモデル選択の画面になるので、さっき落としたAlpacinoの13B・GGML版のモデルを指定してください。
(別のモデルを使いたいならそれを選ぶ)
するとモデル選択の画面になるので、さっき落としたAlpacinoの13B・GGML版のモデルを指定してください。
(別のモデルを使いたいならそれを選ぶ)
起動後
しばらく黒い画面に色々とメッセージが出て、やがて自動的にブラウザの画面が開きます。
(当方の環境では15~20秒くらいです)
上のほうにある「Scenarios」のボタンを押し、「New Story」→「Confirm」を選んでみましょう。
(当方の環境では15~20秒くらいです)
上のほうにある「Scenarios」のボタンを押し、「New Story」→「Confirm」を選んでみましょう。
キャラ設定を書いてみる
後はいきなり書き始めてもさほど問題ないのですが、いちおうキャラ設定を書いてみます。先にこれを書いておいたほうが、何かと文章が安定する印象があります。
テキスト入力欄の少し上にある「W Info」ボタンをクリックします。小さなウィンドウが出るので、右上にある緑の「+」ボタンを押しましょう。
また横長のウィンドウが出てきます。
テキスト入力欄の少し上にある「W Info」ボタンをクリックします。小さなウィンドウが出るので、右上にある緑の「+」ボタンを押しましょう。
また横長のウィンドウが出てきます。
とりあえず2人キャラを設定してみる
まず「Key(s)」というところに「Rin」と打ち込んでみます。英字は半角にしてください。
そして右のWhat to Rememberと書いてあるところに「Rin is 18 yo, an aggressive lesbian girl.」とでも打ち込んでみます。
※ここからはDeepLに色々助けてもらいましょう。日本語を英語にするのも英語を日本語にするのも、とても頼りになります。
そして右のWhat to Rememberと書いてあるところに「Rin is 18 yo, an aggressive lesbian girl.」とでも打ち込んでみます。
※ここからはDeepLに色々助けてもらいましょう。日本語を英語にするのも英語を日本語にするのも、とても頼りになります。
続けて、横長のウィンドウの右上にも「+」ボタンがあるので押すと行が1つ増えます。
同様に「Key(s)」に「Sakura」と入れ、右側には「Sakura is 18 yo, an obedient girl.」とでもしてみましょうか。
あとは「Save」を押します。
同様に「Key(s)」に「Sakura」と入れ、右側には「Sakura is 18 yo, an obedient girl.」とでもしてみましょうか。
あとは「Save」を押します。
設定を変更する
つづいて上のほうにあるSettingsボタンを押します。
MaxTokensは最大の2048に、Amount to genは50~60くらいにしてみましょう。
右下のほうにあるTrim sentencesもチェックを入れていいと思います。文の途中で終わった場合、その半端な文を削除する機能です。
(アレなのを書きたい場合、Allow NSFWがオフになっていたら、オンにしましょ。。。)
MaxTokensは最大の2048に、Amount to genは50~60くらいにしてみましょう。
右下のほうにあるTrim sentencesもチェックを入れていいと思います。文の途中で終わった場合、その半端な文を削除する機能です。
(アレなのを書きたい場合、Allow NSFWがオフになっていたら、オンにしましょ。。。)
これで準備はすべて完了です。
小説を書き始める
下の方にあるそこそこ大きなテキスト入力欄(Enter text hereと書いてある)に文章を打ちます。
「In the backyard of the school, Rin kissed Sakura.」としてみました。キーボードのEnterを押すか右のほうの「Submit」というボタンを押すと、生成が始まります。
「In the backyard of the school, Rin kissed Sakura.」としてみました。キーボードのEnterを押すか右のほうの「Submit」というボタンを押すと、生成が始まります。
最初の書き出しは少し時間がかかります。ただエラーが出て止まっていることもあるので、あまりに長いときはKoboldcppのウィンドウを見てみましょう(ブラウザのほうではなく、Windowsのアプリのkoboldcpp画面)。
黒い画面の最後の行にGeneratingとあって数字が段々増えていっているのなら、ちゃんと動いています。
黒い画面の最後の行にGeneratingとあって数字が段々増えていっているのなら、ちゃんと動いています。
気に入らないところを書き換える
こんな文章が出てきました。
わからないところはDeepLにどんどん訳してもらいましょう。
わからないところはDeepLにどんどん訳してもらいましょう。
She pushed Sakura to the ground and forced her to suck her fingers. The other girls were shocked with Rin's arrogance. Rin was arrested by two teachers.
リンはサクラを地面に倒し、指をなめさせた。他の女子はリンの傲慢にショックを受けた。リンは2人の教師に拘束された。
色々ダメなので、どんどん書き換えます。
まず、Submitボタンの上あたりにある「Allow Editing」にチェックを入れてください。これで自由に書き換えられるようになります。
まず、Submitボタンの上あたりにある「Allow Editing」にチェックを入れてください。これで自由に書き換えられるようになります。
書き換える例
She pushed Sakura to the ground and
一行目の途中まで、消してしまいました。
She pushed Sakura to the ground and gently whispered:"
「優しくささやいた」と内容を変えました。ちなみに"を付けて終わらせると、ほぼ確実にその次にセリフを出してくれます。
もちろん改変するときはDeepL先生が大活躍します。
もちろん改変するときはDeepL先生が大活躍します。
ただ中学レベルの文法はわかっていたほうが、うまく改変できるはずです。
(とはいえ過去形と現在形を間違ったり、だいぶ文法ミスがあってもそれなりにAIはわかってくれます。単語をミスると変な方向にいくこともありますが。例:fly(飛ぶ)とfry(揚げる、フライ)を間違える)
(とはいえ過去形と現在形を間違ったり、だいぶ文法ミスがあってもそれなりにAIはわかってくれます。単語をミスると変な方向にいくこともありますが。例:fly(飛ぶ)とfry(揚げる、フライ)を間違える)
再生成してみる
ではまたEnterキーを押すか、「Submit」ボタンを押してみましょう。
She pushed Sakura to the ground and gently whispered:"I'm a lesbian".
優しくささやいた:私はレズよ。
情緒のカケラもないので、生成途中でも止めてしまいます。Submitボタンの下にある[ABORT]を押すとテキスト生成を止められます。
そして「Retry」ボタンを押してください。さっきと同じところまで文章を消してから「Submit」を押すのでもいいです。
そして「Retry」ボタンを押してください。さっきと同じところまで文章を消してから「Submit」を押すのでもいいです。
ただ、[ABORT]を押してあまり時間が経たないうちに「Retry」やEnterキーや「Submit」を押すとエラーが出ることがあります。そのときはもう少し待ってから「Submit」ボタンを押しましょう。
再々生成
She pushed Sakura to the ground and gently whispered: "I love you."
"No...I'm straight," Sakura protested.
"Then why did you let me do that?" Rin said.
"Because... I'm just curious..." Sakura replied.
"No...I'm straight," Sakura protested.
"Then why did you let me do that?" Rin said.
"Because... I'm just curious..." Sakura replied.
彼女はサクラを地面に倒してやさしくささやいた:「愛しているわ」
「ダメ……私はストレートです」サクラは抗議した。
「じゃあなんで私にそうさせてるの?」リンは言った。
「ただ……好奇心からです……」サクラは返事した。
「ダメ……私はストレートです」サクラは抗議した。
「じゃあなんで私にそうさせてるの?」リンは言った。
「ただ……好奇心からです……」サクラは返事した。
今度は悪くありません。こんな感じでどんどん続けていきましょう。
SettingsのAmount to genの量は好みで変えてください。
SettingsのAmount to genの量は好みで変えてください。
相当長い文章になっても、さほど破綻はしません。
ただMax Tokenの量を超えた文章になってくると、最初のほうにあったやりとりは無視されてしまうこともあります。
(また上のほうに書いたとおり、起動時にSmart Contextにチェックを入れておかないと、そこから生成が不可能になってしまうようです)
ただMax Tokenの量を超えた文章になってくると、最初のほうにあったやりとりは無視されてしまうこともあります。
(また上のほうに書いたとおり、起動時にSmart Contextにチェックを入れておかないと、そこから生成が不可能になってしまうようです)
それを避けるための「W Info」でのキャラ設定なわけですね。
(※Memoryのほうはより全体的な世界観や話の設定を書くためにあるようですが、とりあえず自分はW Infoでキャラ設定するだけで十分なように思っています。)
(※Memoryのほうはより全体的な世界観や話の設定を書くためにあるようですが、とりあえず自分はW Infoでキャラ設定するだけで十分なように思っています。)
コツ?
- 日本語を英語にするとき、主語がないと勝手に補完されるのでおかしくなることがあります。日本語の時点で意識的に主語を書くようにするか、適宜修正しましょう。(例:「そしてRinを抱きしめた」→「Then he hugged Rin.」といきなり男が出てくる)
- やはり男1人、女1人が一番安定します。最初のうちはそうしたほうがラクでしょう。
では、よいKobold.cppライフを!