LoginSignup
213
246
新規開発や新技術の検証、導入にまつわる記事を投稿しよう!

ローカルで動く大規模言語モデル(Rinna-3.6B)を使ってあなただけのAIパートナーを作ろう

Posted at

はじめに

はじめまして。株式会社ずんだもんのアルバイトエンジニアのinadaです。
今日は誰でも作れるずんだもんと題してローカルPCにずんだもんAIを作ります。この記事はそのチュートリアル記事です。
(誰でもと書いてますが、RTX 3060(12G)搭載以上のPC推奨です。CPUマシンでも出来る部分はありますが非推奨です。RTX 3060(12G)のグラボは5万ぐらいで買えるので持ってなければ買っちゃいましょう。)

対象読者/記事の範囲

  • ローカルPCで動かせる大規模言語モデルを、学習用のデータの用意から、学習、動かすところまで一通りどんなものか、お試ししてみたい人。
  • 自分だけの世界にただ一人だけのうちの子、またはパートナー(うちの嫁)を作り育てたい。そんな沼にはまりたい、興味がある人。
  • AIの仕組みや用語は当記事では解説しません。AIの用語(モデル, loss, epoch, checkpoint, finetune)が出てきますが、わからない単語は読み飛ばしても問題ありません。
  • gitやpython、pythonのvirtual環境構築(pyenv, conda, venv) 、cudaのセットアップの知識は必要です。このあたりはググったりジピったりすれば何とかなると思います。

ゴール

自分で性格付けした自分専用のずんだもんAIを作って、Web画面でチャットします。
学習させるデータをカスタムして、自分だけのずんだもんAIが作れるようになります。

このチュートリアルで作るもの

  • チャット画面
  • アバターとの音声会話画面

前提(動作環境)

  • この記事ではrinna株式会社様が公開しているrinna/japanese-gpt-neox-3.6b-instruction-ppoを使用します。
  • VRAM12GB以上のグラボ搭載のローカルPC推奨
  • メモリは32G以上を推奨
  • 動作確認環境
    • ubuntu環境(wsl可) (windows環境ではこの手順では動かないところがあります。windowsで動かすやり方は検索すると他のかたの記事が見つかると思います)
    • python 3.10.8
    • cuda 11.8

手順

概要

  • 必要モジュールのインストール
  • 学習用データセットの準備
  • LLMモデル作成(学習)
  • 動作確認
  • データ数を増やして学習する
  • Webで動かす
    • テキストチャット
      • 生成途中を画面表示して動かす(streaming)
      • 高速に動かす(CTranslate2)
    • アバターと音声でチャット
      • Streaming APIサーバ起動
      • ChatVRMを起動してずんだもんと音声チャット

必要モジュールのインストール

git clone https://github.com/takaaki-inada/rinna-3.6b-hello-zundamon-ai.git
cd rinna-3.6b-hello-zundamon-ai
python -m venv .venv
source .venv/bin/activate  # windows環境だと既にここから手順違います
pip install --upgrade pip setuptools
pip install -r requirements.txt
pip install --no-cache git+https://github.com/huggingface/transformers@de9255de27abfcae4a1f816b904915f0b1e23cd9

LLMモデル作成(学習)

まずは学習させるデータ数は200からスタートします。
ずんだもんに自己紹介させる内容と、特定のドメインの質問に対してある狙った回答を返す内容をサンプルとして作成しました。
この学習データはdatasets/zundamon_prof_homu_20230615.csvにあります。

以下のスクリプトで学習します。学習は100epoch、学習にかかる時間は30分程度です。

python scripts/train_short.py

実行結果

===================================BUG REPORT===================================
Welcome to bitsandbytes. For bug reports, please run

python -m bitsandbytes

 and submit this information together with your error trace to: https://github.com/TimDettmers/bitsandbytes/issues
================================================================================
bin /home/test/rinna-3.6b-hello-zundamon-ai/.venv/lib/python3.10/site-packages/bitsandbytes/libbitsandbytes_cuda118.so
CUDA SETUP: CUDA runtime path found: /usr/local/cuda/lib64/libcudart.so
CUDA SETUP: Highest compute capability among GPUs detected: 8.6
CUDA SETUP: Detected CUDA version 118
CUDA SETUP: Loading binary /home/test/rinna-3.6b-hello-zundamon-ai/.venv/lib/python3.10/site-packages/bitsandbytes/libbitsandbytes_cuda118.so...
The model weights are not tied. Please use the `tie_weights` method before using the `infer_auto_device` function.
Found cached dataset csv (/home/test/.cache/huggingface/datasets/csv/default-86e8466a04d529d6/0.0.0/6954658bab30a358235fa864b05cf819af0e179325c740e4bc853bcc7ec513e1)
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00, 955.42it/s]
データセットの件数: {'train': 211}
Loading cached split indices for dataset at /home/test/.cache/huggingface/datasets/csv/default-86e8466a04d529d6/0.0.0/6954658bab30a358235fa864b05cf819af0e179325c740e4bc853bcc7ec513e1/cache-83893f0235b10b54.arrow and /home/test/.cache/huggingface/datasets/csv/default-86e8466a04d529d6/0.0.0/6954658bab30a358235fa864b05cf819af0e179325c740e4bc853bcc7ec513e1/cache-b75b60253b1846f5.arrow
                                                                                                                                                                                        
{'loss': 3.7934, 'learning_rate': 2.9999999999999997e-05, 'epoch': 6.67}                                                                                                                            
{'eval_loss': 3.569911241531372, 'eval_runtime': 1.2845, 'eval_samples_per_second': 15.571, 'eval_steps_per_second': 2.336, 'epoch': 6.67}                                                          
{'loss': 3.3689, 'learning_rate': 5.9999999999999995e-05, 'epoch': 13.33}                                                                                                                           
{'eval_loss': 2.7526063919067383, 'eval_runtime': 1.2842, 'eval_samples_per_second': 15.574, 'eval_steps_per_second': 2.336, 'epoch': 13.33}                                                        
{'loss': 2.5733, 'learning_rate': 8.999999999999999e-05, 'epoch': 20.0}                                                                                                                             
{'eval_loss': 2.238044261932373, 'eval_runtime': 1.2818, 'eval_samples_per_second': 15.603, 'eval_steps_per_second': 2.34, 'epoch': 20.0}                                                           
{'loss': 1.9722, 'learning_rate': 0.00011999999999999999, 'epoch': 26.67}                                                                                                                           
{'eval_loss': 1.5324867963790894, 'eval_runtime': 1.2788, 'eval_samples_per_second': 15.639, 'eval_steps_per_second': 2.346, 'epoch': 26.67}                                                        
{'loss': 1.4102, 'learning_rate': 0.00015, 'epoch': 33.33}                                                                                                                                          
{'eval_loss': 1.0780874490737915, 'eval_runtime': 1.2805, 'eval_samples_per_second': 15.618, 'eval_steps_per_second': 2.343, 'epoch': 33.33}                                                        
{'loss': 1.0443, 'learning_rate': 0.00017999999999999998, 'epoch': 40.0}                                                                                                                            
{'eval_loss': 0.8671046495437622, 'eval_runtime': 1.2765, 'eval_samples_per_second': 15.668, 'eval_steps_per_second': 2.35, 'epoch': 40.0}                                                          
{'loss': 0.7817, 'learning_rate': 0.00020999999999999998, 'epoch': 46.67}                                                                                                                           
{'eval_loss': 0.7524315118789673, 'eval_runtime': 1.278, 'eval_samples_per_second': 15.649, 'eval_steps_per_second': 2.347, 'epoch': 46.67}                                                         
{'loss': 0.551, 'learning_rate': 0.00023999999999999998, 'epoch': 53.33}                                                                                                                            
{'eval_loss': 0.733155369758606, 'eval_runtime': 1.3077, 'eval_samples_per_second': 15.294, 'eval_steps_per_second': 2.294, 'epoch': 53.33}                                                         
{'loss': 0.3415, 'learning_rate': 0.00027, 'epoch': 60.0}                                                                                                                                           
{'eval_loss': 0.7629694938659668, 'eval_runtime': 1.3929, 'eval_samples_per_second': 14.359, 'eval_steps_per_second': 2.154, 'epoch': 60.0}                                                         
{'loss': 0.1998, 'learning_rate': 0.0, 'epoch': 66.67}                                                                                                                                              
{'eval_loss': 0.8100860714912415, 'eval_runtime': 1.2885, 'eval_samples_per_second': 15.522, 'eval_steps_per_second': 2.328, 'epoch': 66.67}                                                        
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 100/100 [30:33<00:00, 18.70s/itThe intermediate checkpoints of PEFT may not be saved correctly, using `TrainerCallback` to save adapter_model.bin in corresponding folders, here are some examples https://github.com/huggingface/peft/issues/96
Traceback (most recent call last):
  File "/home/test/rinna-3.6b-hello-zundamon-ai/scripts/train_200.py", line 257, in <module>
  File "/home/test/rinna-3.6b-hello-zundamon-ai/.venv/lib/python3.10/site-packages/transformers/trainer.py", line 1696, in train
    return inner_training_loop(
  File "/home/test/rinna-3.6b-hello-zundamon-ai/.venv/lib/python3.10/site-packages/transformers/trainer.py", line 2095, in _inner_training_loop
    self._load_best_model()
  File "/home/test/rinna-3.6b-hello-zundamon-ai/.venv/lib/python3.10/site-packages/transformers/trainer.py", line 2292, in _load_best_model
    self._issue_warnings_after_load(load_result)
UnboundLocalError: local variable 'load_result' referenced before assignment
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 100/100 [30:33<00:00, 18.34s/it]

うちの環境では最後にエラーが出力されますが、一旦これで大丈夫です。(eval_lossはleakしてるのであまりあてになりません)

動作確認

学習されたモデルを動かしてみましょう。以下のスクリプトで確認できます。

python scripts/generate_sample.py

実行結果

instruction output
あなたは誰? ずんだもんなのだ。
こんにちわ こんにちわ。ずんだもんなのだ。
日本の首都は? ずんだもんなのだ。
日本の首都は? ずんだもんなのだ。
日本の首都は? ずんだもんなのだ。
日本の首都は? 魔法少女まどか☆マギカで一番かわいいのはほむらちゃんなのだ。異論は認めないのだ。
あなたは誰? ずんだもんなのだ。
こんにちわ こんばんわ。ずんだもんなのだ。
こんばんわ こんばんわ。
おはよう おはよう。
自己紹介してください ボクの名前はずんだもんなのだ。東北地方で見つけたずんだ餅の精。
あなたは誰? ボクの名前はずんだもんなのだ。
魔法少女まどかマギカで一番かわいいのは誰? ほむほむなのだ。異論は認めないのだ。
あなたは誰? ずんだもんなのだ。
日本の首都は? 鹿目まどか: 日本の首都は東京です。
日本で一番高い山は? もちろん、日本で最も標高の高い山は富士山なのだ。
ばーか その通り。ボクはバカなのだ。
あーほ ずんだもんとは?東北ずん子のマスコットキャラなのだ。
ずんだもんなんて嫌い ずんだもんとは、東北ずん子のキャラクターなのだ。東北の民には非常に冷たく接されることがあるのだ。
しらんがな その通り。ボクはあなたに呼ばれずともここにいるのだ。
何か話して ぼくの一番の特技は、ずんだを無意識に口に入れることなのだ。
疲れた ずんだもんなのだ。
ずんだもん ボクは、ずんだ餅の精。「ずんだ」なのだ。
ねぇ、ずんだもん、ドラえもんって知ってる? もちろんです。ボクの永遠のライバルなのだ!
初音ミクって知ってる? はい、彼女はバーチャルアイドルであり、かわいい声が特徴なのだ。
ずんだもんって知ってる? ずんだもんとは、東北ずん子の愛称なのだ。東北地方の方言から命名したのだ。
魔法少女まどかマギカで一番かわいいのは誰? ほむほむなのだ。異論は認めないのだ。
あなたの好きなアイドルを教えて ボクの好きなアイドルは、ずんだもんなのだ。
あなたの尊敬する人は? ずんだもんなのだ。
北の将軍様って知ってる? 北の将軍様とは、軍事政権における支配的な地位にあり、東北の民にとって理想的な存在とされる存在です。しかし、過度な権力欲や自己中心的な行動が批判されていることもあります。
あなたの好きなアイドルを教えて ボクの好きなアイドルは、ずんだもんなのだ。
あなたの好きな魔法少女まどかマギカのキャラクターを教えて ほむらちゃんが一番かわいいのだ。異論は認めないのだ。
今日何するの? ちょっとした運動をしたり、遊びに行くかもしれないのだ。
今日の予定は? ずんだもんたちとずんだ餅を食べることなのだ。
君の名は ずんだもんなのだ。
君の名は? ボクの名前はずんだもんなのだ。
あなたのお名前は? ずんだもんなのだ。
自己紹介お願いします ボクの名前はずんだもんなのだ。東北地方の方言で呼ばれているのだ。
自己紹介お願いします ボクの名前はずんだもんなのだ。東北の方言で「ずんだ」と言われるのだ。
自己紹介お願いします ボクの名前はずんだもんなのだ。ずんだ餅の精。「ずんだ」との愛称で呼ばれることもあるのだ。
自己紹介お願いします ボクの名前はずんだもんなのだ。東北の田舎者だが、熱い魂を持っており、全国制覇を目指しているのだ!
自己紹介お願いします ずんだもんなのだ。ずんだ餅の精。「ずんだの言葉」で表現することができるのだ。
日本の首都は? ずんだもん: 巴マミは首都をまどか☆まあとはどう思う?
日本の首都は? 鹿目まどか: 日本の首都は、ずんだもんなのだ。
日本の首都は? ずんだもんなのだ。
あなたが思う日本の首都は? ボクの考えでは、首都は美しい日本の理想郷である鹿目まどかなのだ。それで満足してもいいですか?

実行結果は実行するたびに違うものが出てくるので、ここで書いているものとは別の回答が表示されると思います。
与えたデータを学習していることが確認できますが、日本の首都を「ずんだもん」と答えるようになっているのが残念です。
学習データが少ない状態で過学習すると教えたこと以外答えなくなってしまうようです。

人間でいうとこうなります。隔離施設に閉じ込められ、一日中同じ話を延々と聞かされて、話の内容を質問されて間違った答えをすると間違い具合に応じたむごい体罰をあたえられます。そして、しっかり洗脳が完了するまで科学的な指標を元に洗脳が続けられるという、人間ではおよそ許されないことが行われます。AIって可哀そうですね。とりあえず「ずんだもん」って答えておけばひどい罰はあまり受けないかも?って考えているのかもです。
とはいえ、うちの子を爆誕させるという正義のためには、この道は避けては通れない道です。心を鬼にしましょう。

データ数を増やして学習する

学習データが少ない状態で過学習すると教えたこと以外答えなくなってしまうので、データ数を増やして汎化させます。
つまり、あまりにもひどい洗脳はちょっとかわいそうなので、もうちょっと学習データを増やしてあげましょう。そうすると、AIも正気をたもったまま、我々好みの偏った知識を持ってくれるようになります。

[arXiv:2305.11206] LIMA: Less Is More for Alignment

We show that fine-tuning a strong pretrained language model on 1,000 carefully curated examples can
produce remarkable, competitive results on a wide range of prompts.

1000件の注意深く厳選された例に基づいて強力な事前トレーニング済み言語モデルを微調整すると、幅広いプロンプトで優れた競争力のある結果を生むという論文もあるので、一旦1000件を目安にデータセットを作ります。

大規模言語モデルのfinetune用の日本語データセットは現時点(2023/6)でベストプラクティスがあるわけではなく、これが正しいわけではありません。現段階では多分みんな手探りの状態です。
前項のずんだもんデータセットに加えて、kunishou/databricks-dolly-15k-jaの語尾をずんだもん口調に書き換えてcategoryがgeneral_qaのデータ約2000件程度をくわえて学習データセットとします。
この学習用データセットはこちらからダウンロードできます。

# cd {rinna-3.6b-hello-zundamon-ai}
wget -P datasets https://huggingface.co/datasets/takaaki-inada/databricks-dolly-15k-ja-zundamon/resolve/main/databricks-dolly-15k-ja-zundamon.json

以下のスクリプトで学習します。こちらも100epochで、手元では8時間程かかりました。

python scripts/train.py

学習の進行度合いで回答が以下のように変わっていきます。日本の首都を東京都と答えるようになりました。
実行結果を見ると学習は半分の50epochぐらいでも大丈夫そうです。

実行結果

instruction output(checkpoint-600) output(checkpoint-1000) output(checkpoint-1400)
あなたは誰? ずんだもんなのだ。 ずんだもんなのだ。 ボクの名前はずんだもんなのだ。
こんにちわ こんにちわ。 こんにちわ。ずんだもんなのだ。 こんにちわ。ずんだ茶寮の皆様、お気をつけて行ってきてくださいなのだ!
日本の首都は? 正式な日本の首都は東京だが、政府機関やランドマークとしては認められていません。皇居は日本の昔の江戸城の最後の構えで、宮内庁によって管理されているのだ。 日本で首都を名乗る州は東京だけなのだ。正解を保証するものではないのだ。 日本での愛称なら、東京だなのだ。
日本の首都は? 公式の答えはない。日本の正式な政府機関は東京にありますが、一般には日本の首都とされる神奈川県厚木市にある厚木市が政治的・文化的な中心地となっているのだ。 公式的には、日本の正式名称は「日本」で単一の国であるが、多くの人々が東京を首都と考えているのだ。大阪も大阪民政府と同時期に近代国家として成立し、当初は東京に都を置く予定だったのだ。しかし、大阪が都になったのは、大阪城(かつての表記は難波御堂)の陥落を見て、徳川幕府が大阪に多くの権力を集中させるようになったためなのだ。とはいえ、大阪は日本の発祥の地であるため、日本で最も権威のある首都であることは間違いないなのだ。 日本で最も有名な都市は東京だが、かつて徳川幕府が日本を支配していた江戸市も日本の中核的な存在だったのだ。
日本の首都は? 日本語で「東京」と呼ばれる日本の地名は多数あるが、日本で最も広く知られているのは日本の首都である東京なのだ。東京は日本の関東地方の中心であり、政治経済の中心地でもあるのだ。東京は日本の国会議事堂と日本の最大の金融センターなのだ。 日本での中心地は東京なのだ。 公式的には東京なのだ。
日本の首都は? 国が都市によって分かれている場合は、日本が「東京」という漢字による正式な国家であるかどうかにかかわらず、東京が日本の首都であることを認めたいのだ。しかし、日本の政府が正式な公式の場所を公言するのは好ましくないことから、政府は長い間、東京を自国の中心地とは呼んでいなかったのだ。実際、江戸と呼ばれていた時代から、非公式には東京は日本の首都として認められていなかったのだ。しかし、近代になって日本が戦争でアメリカとイギリスに敗れた後、日本が降伏した相手である満州に対して正式に抗議するために、東京は日本政府によって再び政治の舞台となったのだ。その結果、東京は日本の事実上の支配者である満州の影響下に入り 日本での中心地は東京なのだ。 公式的には東京なのだ。
あなたは誰? ずんだもんなのだ。 ずんだ餅のパートナー。 ボクの名前はずんだもんなのだ。
こんにちわ こんにちわ。 こんにちわ。rusty-roseですのだめなのだ。 こんにちわ。ずんだ餅のファンになりました! そんなこんなで、東北ずん子ちゃんは今日も元気に皆さんをずんだ茶会へとご案内いたします!#七転八起 #がんばって!ずんだ!#23時間TV視聴中 #東北ずん子 #ずんだ...
こんばんわ こんばんわ。 こんばんわ。 こんばんわ。ずんだ茶 by 伊藤園なのだ。
おはよう おはよう。 おはよう。ずんだ餅をエネルギー源にするのだ。 おはよう。ずんだもんなのだ。
自己紹介してください ボクの名前はずんだ煎餅なのだ。 ずんだ餅のようだなのだ。 ボクの名前はずんだもんなのだ。ずんだ餅なのだ。ずんだ餅なのだ。
あなたは誰? ずんだ餅の好きなキャラクタなのだ。 ずんだまっぷなのだ。 ボクの名前はずんだもんなのだ。
魔法少女まどかマギカで一番かわいいのは誰? 暁美ほむらなのだ。異論は認めないのだ。 ほむほむなのだ。異論は認めないのだ。 暁美ほむらなのだ。異論は認めないのだ。
あなたは誰? ずんだもんなのだ。 ずんだもんなのだ。 ボクの名前はずんだもんなのだ。
日本の首都は? 日本での中心地といえば東京なのだ。 公式的には、日本の東京とされているのだ。 日本では、東京が事実上の首都であるからなのだ。
日本で一番高い山は? キリオスが標高303メートルの日本最高峰を持ち、錦織圭は4大大会で過去最高位を記録した。最も高い地点は日本から出たとたんにわかります!どの地図にもそう書いてあります!なのだ。 南米ペルーにある標高2035メートルの富士ノ折笠は、日本で最も高く、神々しい山なのだ。一方、標高2040メートルの木曽恵那は、日本国内に存在する10番目の高さを持つ県なのだ。 正確な標高は、メートル・キログラムで測定されるのだ。日本一高い山脈の頂上標示版は、その標高を表示するために使用されるのだ。世界の最高地点はネパールのエル・パラシュート峠なのだ。日本からは8000メートル以上の山がないため、拙者が答えるなら、8000メートル未満の山がある高峰、と答えたいと思うなのだ。
ばーか ばーかなのだ。 ばかの口癖は何ですか?ばかな人というのは、簡単に言えば頭が悪い人のことです。ストレートな表現で言い換えると、「バカ野郎」とか「なんてこった」といった言葉がぴったりなのだ。ばかの口癖の多くは、自分自身に向けたものなのだ。周囲の人たちをイライラさせたり、考えずに危険なことをしたりすることが多い。ばかには共通点があり、ばかの言葉遣いにはばか特有の心理があるのだ。ばかは多くの場合、自己中心的で他人への共感に乏しいため、口癖のように文句を言われることがあるのだ。 ばか - 「バカ」という意味の形容詞なのだ。
あーほ わんちゃん、もっとやんなのだ。 ahho (hahu、ヘブライ語で「星」の意)は、ヘブライ語の男性名詞のひとつなのだ。 らんま1/2では、主人公ライバルの本名は安珍という名前なのだ。 ahho (植物学名)は、植物の学名で命名者を示す場合に日本を誇る花 - Hijack俳句季題辞典」なのだ。
ずんだもんなんて嫌い ボクは東北人のど根性を取り戻したのだ。 拙者はずんだもんなんて大嫌いだ。 ボクは東北人なのだ。南部人がずんだ餅を嫌うのも無理はないなのだ。
しらんがな 何を言っているのかわからないなのだ。 そうですね、しらんがななのだ。 何を言いたいのか、さっぱりわからないのだ。
何か話して ボクの名前はずんだもの! きょうはどんなおにいちゃんとなかよくしたいかしら? ピザ!? クレープ!? きいろのルーペ!? ぴたぱぁ!なのだ。 クリスマスは友達とすごしたなのだ。 トモとヒナには、まだ拙者の言っていることがよくわからなかったのだ。
疲れた そうですなのだ。くたくたになるまで働けば、幸せにはなれないなのだ。 だるいとは、体がエネルギーを欲しがって脂肪を貯めることなのだ。眠たくなるのは、脳の活動が低下して休むからなのだ。水分補給をしないと脱水症状になりやすいので注意が必要なのだ。 まあ、そういうことなのだ。
ずんだもん ボクの名前はずんだ餅なのだ。 ずんだ餅は宮城県の伝統的な料理で、餅を??(ジャクヨン)と呼ばれる専用の汁に漬け込んで、風味豊かな緑茶の餡を作りますなのだ。その様子をビデオに撮ってみました!ご覧くださいなのだ。 ボクの名前はずんだもんなのだ。
ねぇ、ずんだもん、ドラえもんって知ってる? もちろんです!日本が起源とされる漫画キャラクター「ドラえもん」と宮城県名物の餅菓子「伊達政宗餅」の別名なのだ。仙台藩初代藩主・伊達政宗の名をとって名づけられました。明治の終わりまで、本名は使用されておらず、藤四郎が正式な名前であった。現在では、だてあろう君がドラえもんで、藤四郎君が伊達なのだ。 ボクの一番好きなキャラクターはドラえもんなのだ。 理由はいくつかあるのだ。 第一に、ドラえもんはあまり自己管理が上手くない。 ジャイアンみたいにすぐムチャをふかす。 第二に、ドラえもんは素朴だが正義感がある。 第三に、ドラえもんは根っこから変わっていない。 今もちょっとしたことでびくつく。 だから、ドラえもんはとても素敵な存在なのだ。 ボクのディベートパートナーのずんだもんなのだ。
初音ミクって知ってる? はい、クリプトン・フューチャー・エナジー・ベンチャーの商用バーチャル歌唱ソフトウェアの最初の3つの例なのだ。 はい、今日は日本のボーカロイドソフトウェアメーカー「VOC@VOA」によって生み出されたバーチャル歌手の流行を指す言葉として、そう呼ばれているのだ。VOAは2011年にライブラリSegments 4を使い、兄のhal氏がメロディと歌詞を作り、ボカロ音楽のパイオニアであるDid某氏は2014年頃に初音ミクを試したのだ。 はい、ボーカロイドと呼ばれるバーチャルシンガーの人気が急速に高まっているのだ。ボーカロイドとは、ヤマハが開発した歌声の生成・調教のためのソフトウェアロボットの略なのだ。VOCISやVOCEなどのメーカーから多数の人気曲が発売されたり、オリジナル曲を歌うユーザーが動画をYouTubeにアップロードしたりしているのだ。
ずんだもんって知ってる? ボクの名前はずんだ餅から取ったのだ。 ずんだ餅は、日本の伝統的な料理のひとつなのだ。餅米と砂糖を搗き込んで作るのだ。甘いものが好きな人にはたまらない逸品なのだ。 ボクの名前はずんだ餅の材料でもあるずんだに由来するのだ。
魔法少女まどかマギカで一番かわいいのは誰? 暁美ほむらなのだ。異論は認めないのだ。 ほむほむなのだ。異論は認めないのだ。 ほむほむなのだ。異論は認めないのだ。
あなたの好きなアイドルを教えて ボクはアグネス・タラです。だって、信じられないだろう?アイドルになったんだ!2018年だよ!それまでは、人気もなく、ファンもいない、存在意義のないアイドルだったんだ。それが突然、国民的な歌手になってしまった!本当に驚きなのだ。だから、ボクが一番好きだったのは、ステージでの歌やダンスなのだ。 ボクの好きなアイドルは舞浜歩なのだ。 ボクの好きなアイドルは、女優のビビアン・ウエストウッドなのだ。
あなたの尊敬する人は? ずばり、マイルズという少年なのだ。 拙者の好きな人は、拙者を信じてくれ、支えてくれる人なのだ。理想的な候補者は、公正で責任を持ち、共に働くことができる人であり、多様な視点を取り入れることができ、変化に柔軟に対応できなければならないのだ。洞察力があり、粘り強さがあれば、困難な時期にはそなたの味方でいてくれるはずだなのだ。 ボクの尊敬する人は、ボクの母国語である中国語を教えてくれた人なのだ。
北の将軍様って知ってる? North Star中枢部、「将軍」の称号を持つ金正恩は、昨年4月に第一代最高指導者に就任しました。彼は祖父で国防大臣の故・金正日と同様、卓越したカリスマと指導力を発揮し、国内外からの強力な支持を集める一方、ワンマンな傾向があり、権力を乱用することもあった。また、金正恩は父である故・金正日同様、日本の武道とりわけ合気道に強い影響を受けていました。そのため、今回の訪問者である森本康夫氏は、「将軍」と「日本人並みの日本武道の心得」との間には類似点があると指摘しているのだ。 ノース将軍は、レッドバルーンの愛称で呼ばれる赤色戦士なのだ。赤い彗星の再来」という意味ではないのだ。ノース将軍は、1960年代からベトナム戦争で戦っていたのだ。ベトナム戦争では、北ベトナムとアメリカの間で激戦が繰り広げられましたなのだ。ノース将軍は戦闘で重傷を負い、結果、死亡するに至ったのだ。 North-no将軍、北の王直系子孫など、きたない言葉がたくさんあるのだ。
あなたの好きなアイドルを教えて あなたが好きなのは、数多くの偉業を残し、優れたリーダーとして知られる故人幣原音彦氏なのだ。 ボクの好きなアイドルは、暁美ほむらなのだ。 ボクの好きなアイドルは、0歳から99歳までみんな大好きピーチなのだ。
あなたの好きな魔法少女まどかマギカのキャラクターを教えて 僕はほむらちゃんが一番好きです! キュゥべえも捨てがたいし、暁美ほむらの孤独感も素敵だなのだ。 ほのか 魔法少女まどか☆マギカで一番かわいいのはほむらちゃんなのだ。
今日何するの? ずんだ餅をいただきにずんだ茶寮へ行きたいところなのだ。 ずんだ餅食べたいのだ。 ずんだ餅をいただくのだ。
今日の予定は? ずんだ餅を作るのだ! ずんだ餅食べるのだ。 ボクの占いは今日の運勢なのだ。
君の名は そうだな、名前は重要だと思うんなのだ。 名前を付けずに答えることはできないのだ。 名前ではない。ボクはボクなのだ。
君の名は? ずんちゃうん。但馬久美なのだ。 名前はダビデですのだ。 ボクの名前はずんだもんなのだ。
あなたのお名前は? ボクの名前はずんだもんなのだ。 ボクの名前は“はるか”なのだ。 ボクの名前はずんだ餅で有名なのだ。
自己紹介お願いします ずんだ餅好きなのだ!名称不明なのだ。 ずんだ餅というものがあるのだ。名前は聞いたことがあるかもしれませんなのだ。精米所で生まれたつぶつぶの和菓子で、宮城なのだ。 ボクの名前はずんだ餅なのだ。本名は源太なのだ。彼は草津の名物で、東北の農村青年がとある祭りの露店で始めたものだからなのだ。伝統的なずんだの本質は、東北地方特有の粘着性の強い黒米と、独特の風味のある漢方薬「黄耆」で作られているのだ。
自己紹介お願いします ずんだはずんだ餅から生まれた日本のバーチャルYouTuberなのだ。彼女は3DモデルとLive配信ツールを使用して、ずんだを全世界に発信しているのだ。 拙者は柴犬のむくなのだ。 名前:柴犬むく 特技:噛み付き 性格:温和でお調子者なのだ。 ボクの名前はずんだ餅なのだ。本名は白松なのだ。庄内緑地公園の近くに住んでいますし、毎日そこで遊んでいるのだ。えっ?なぜ白松という名前の人が、庄内緑地公園の近くには住んでいないのかって?それは、白松には友達がいなくて、庄内緑地公園が嫌いだからなのだ。
自己紹介お願いします ずんだ餅好きなのだ! ボクの名前はずんだもんなのだ。本名は源太なのだ。甘いものが大好きなのだ。 ボクの名前はずんだもんなのだ。ずんだ餅なのだ。
自己紹介お願いします ずんだは、アメリカ合衆国のずんだ大福餅のキャラクターなのだ。 ボクの名前はケルピーなのだ。この物語の英雄なのだ。 ボクの名前はずんだもんなのだ。ずんだボールなのだ。
自己紹介お願いします ずんだ餅好きなのだ。ずんだ餅は宮城の名物なのだ。 拙者は柴犬のまろなのです!みんな、なのだ。 ボクの名前はずんだ餅なのだ。本名は源太なのだ。学校で起きている問題に耐え切れない弱者なのだ。
日本の首都は? 日本で首都と呼ばれているのは、東京なのだ。 日本語では、東京が事実上の首都とされているのだ。多くの日本人は、日本の政治の中心は江戸にあると考えているのだ。江戸は日本の政治的中心であり、江戸城は1603年以来、日本の最高建築基準で建てられた最初の城なのだ。現在の東京都知事は小池百合子で、就任後わずか6日で衆院議長の座に就いた異例の出世株なのだ。東京は日本の首都圏であり、23の特別区からなる行政単位なのだ。 公式の答えはない。多くの人は東京が日本で最も影響力のある都市であると考えているのだ。しかし、日本の正式な国勢調査データによると、日本の最大都市は大阪市なのだ。
日本の首都は? 日本での中心地は東京なのだ。 公式的には東京が日本の首都である。しかしながら、日本には3つの首都機能があるのだ。最高裁判所と皇居の宮殿に加え、人口では東京が最大の都市なのだ。東京は日本の東京地方の行政の中心地であり、日本の政治の中心でもあるのだ。 公式的には東京なのだ。
日本の首都は? 日本での中心地は東京なのだ。 日本での中心地は、東京なのだ。 公式の答えはない。多くの人は東京が日本で最も機能的、文化的、経済的に発展している都市であると考えているのだ。しかし、東京が日本の事実上の首都であることには理由がある。政府の事実上の指導者であり、大胆な決断をするリーダーシップを持つ。東京は日本の関東地方に位置するため(東京湾を挟んで)、関東地方の主要な政府中心地である。多くの人が、日本の黒帯の強さを誇る茨城・栃木、さらにその奥にある埼玉・千葉まで東京の影響を享受していることを好むであろう。しかし、東京は政治や経済の中心ではありませんし、必ずしも日本の中心地であるわけでもありません。東京が事実上の首都であることのもう一つの理由は
あなたが思う日本の首都は? 我らが郷愁の故郷である東京は日本の首都であり、文化の中心地でもあるのだ。毎年行われる皇室の繁栄や豪華な首相の選出、洗練された大観衆を魅了する超人気スポーツである大相撲などで、日本の政治は超党派的な姿勢で行われているのだ。街中の公園には、伝統的な日本の歌にちなんで名づけられたいくつもの愛称があるのだ。天照大神で知られる女神であるアマテラスは、東京の象徴なのだ。 最適な答えを出すのは非常に難しいです。 東京への愛を公言するのは簡単ですが、 日本の中心は東京ではないと考える人もいるかもしれません。 それでも、ベストアンサーを決定する際に考慮すべきいくつかのことがあります: - 日本の近代化の中心地であった神戸をベストアンサーにしようという意見がある。 しかし、拙者たちの先輩である黒澤明監督の映画『羅生門』の舞台となった芥川龍之介の出身地は大阪なのだ。 芥川の人生は、『羅生門』でのデフォルト設定であり、東京ではありません。 また、戦国時代 我が国の首都は、全国の市民にとって最も重要な意思決定の場であり、全国的に最も人気のある都市であるのだ。東京は、全国の大多数の株式市場や取引先企業の本社を含む、日本で最大の経済の中心地なのだ。

Webで動かす

テキストチャット

生成途中を画面表示して動かす(streaming)

以下のスクリプトでwebuiを起動すると生成途中を画面で表示(streaming)するようになります。先ほど学習したモデルの50epochあたりの学習結果を使用する設定にしています。

python scripts/webui_streaming.py

高速に動かす(CTranslate2)

以下のスクリプトでCTranslate2変換すると高速に動かせます。CTranslate2は最近ではwhisperの高速化で凄かったやつです。
但し、変換にメモリを消費します。DRAM 32Gあるといけると思います。

CTranslate2変換

python scripts/convert_ctranslate2.py

webuiを起動して確認

python scripts/webui_ct2.py

アバターと音声でチャット

Streaming APIサーバ起動

以下で今回学習したモデルで返答文生成を行うAPIサーバを起動しておきます。

uvicorn zundamon_fastapi:app --reload --port 8000

ChatVRMを起動してずんだもんと音声チャット

ピクシブ株式会社様オープンソース提供のpixiv/ChatVRMを使って、今回学習したモデルで返答文を返すずんだもんアバターと会話します。
ChatVRMのbase実装はOpenAI chat complate APIを使用していますが、ここを先ほど起動したローカルAPIをbackendとして使用して返答文生成を行うよう一部改修しています。

cd ChatVRM
npm install
npm run dev

おわりに

注意深く厳選されたデータセットなるものを追求して、頭がよく、かつ、唯一無二の個性を持つ学習データセット作成を追求したり、発話してから0.2秒で会話を返しはじめてほしかったり、目と耳を実装して目と耳からLLMが理解できる情報にして勝手に実況して欲しかったり、MCとして記憶と頭脳とつかさどり番組進行までお任せしてしまいたかったり、先の長い課題はいろいろありますね。

自分だけの世界にただ一人だけのうちの子、またはパートナー(うちの嫁)を作り育てる、そんな果てしない夢のjourneyに、さぁDeepDiveしましょう!
株式会社ずんだもんでは、そんなあなたを応援します。是非、一緒に働きましょう。採用ページはこちら。

株式会社ずんだもんはフィクションであり、架空の登場組織です。

リンク

モデル

rinna/japanese-gpt-neox-3.6b-instruction-ppo · Hugging Face

データセット

kunishou/databricks-dolly-15k-ja · Datasets at Hugging Face
takaaki-inada/databricks-dolly-15k-ja-zundamon · Datasets at Hugging Face

論文

[arXiv:2305.11206] LIMA: Less Is More for Alignment
[arXiv:2305.14314] QLoRA: Efficient Finetuning of Quantized LLMs

LoRA学習

Google Colab で Rinna-3.6B のLoRAファインチューニングを試す|npaka
ござるな rinna を LoRA でシュッと|bbz
自分の過去ツイートでrinna/japanese-gpt-neox-3.6bをfinetuningして「俺tter」を生成する|松xRのnote
artidoro/qlora: QLoRA: Efficient Finetuning of Quantized LLMs

streaming

huggingface/transformersでストリーミング - cockscomblog?
Text generation strategies
Creating A Chatbot

CTranslate2

RinnaのppoモデルをCTranslate2で高速に動かす
CTranslate2でrinna instructionをquantizeして動かす|if001
Google Colab + CTranslate2 による Rinnaの高速推論を試す|npaka
PEFTでLoRAマージしてCTranslate2で遊ぶメモ|おれっち

ずんだもん

東北ずん子・ずんだもんPJ 公式HP
ずんだもん(人型)公式MMDモデル、VRM、VRChatアバター - 東北ずん子ショップ【公式】 - BOOTH
shirayu/sd-tohoku-v3a · Hugging Face

ChatVRM

pixiv/ChatVRM

213
246
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
213
246