Migdal

Fafs F. Sashimi
Fafs F. Sashimi

投稿

リパライン語チャットAIを作ろうとした

この記事は、らんぐらんぐ Advent Calendar 2025の2日目の記事として書かれたものです。

人工言語アルカ公式サイトのプロジェクト一覧にはRydiaという「アルカを理解する人工知能の作成」を目指すプロジェクトが存在している。
アルカほど文典がある人工言語であれば、確かに現代の技術でそういったものを作るのは可能であろうが、ことリパライン語に至ってはどうだろうか?

リパライン語による自然な応答が返ってくる対話モデル。

現代の対話型AIはLLM(大型言語モデル)というものが基盤となっている。
大規模なコーパスを元に機械学習をした結果、自然な応答が出来るようになっているというわけである。
まず、私はこれらの自然言語処理やコーパス言語学に使えるようにリパライン語のコーパス集めから始めようと思った。
過去に作ったものでは"Cierjusteliumjt"「大コーパス」と呼ばれる物があり、これは約40000語規模のコーパスとなっている。
しかし、このコーパスはアウトラインプロセッサーであるnanaterry(小説のプロットやTRPGのシナリオを執筆するときによく使う)用の.nnaファイルで作られており、自然言語処理に向かない。また、このとき集めていた文典よりもリパライン語の文典は明らかに増えており、再度収集の必要性が生じたのだった。

これにより始まったコーパス集めは2025年9月9日から行っており、2025年11月24日の時点で約13万語超を擁する大規模コーパスとなっている。
今回収集したテクストはここgithubgoogle drive)に保管されているため、誰でも参照・利用可能である。

さて、ここまでは頑張れば出来る仕事である。
しかし、多少はプログラミングの知識があるものの、こと専門的な機械学習の知識が薄い私にとって、らんぐらんぐAdCの期日が迫る今(11月某日)から学習を始めて、すべてをフルスクラッチで書こうなどと無謀なことが出来るとは思えない。
それに持病で調子も悪く、コーパス集めで腰と肩が痛い軟弱な身体を無理に動かすのも頭の悪い話である(私はまだ20代だというのに!)

餅は餅屋、AIのことはAIに。
というわけで、今回はこのチャットAIの作成をChatGPTに聞くことにした。

私:

リパライン語の13万語コーパスが存在するのですが、これをつかってローカルLLMを学習し、リパライン語にリパライン語で答えるチャットAIをpythonで作りたいと考えています。 現状、カレントディレクトリに130k_lineparine_corpus.txtという形式でコーパスのファイルが存在しています。これを利用して、チャットAIを機械学習するpythonスクリプトを考えて下さい。

ChatGPT:

いいですね — 130k 行の単語コーパスがあれば 「リパライン語で答えるローカルのチャットAI」 を作る土台として十分です。以下は現状のファイル 130k_lineparine_corpus.txt を使って、ローカルで学習(微調整 / 継続学習)し、リパライン語で返答するチャットを動かすための実用的な方針と そのまま使える Python スクリプト群 です。

方針の要点

  1. まずはベースモデルをローカルに用意(例:LLaMA系 / Falcon系 / Mistral系 のオープンソースデコーダー専用モデル)。
  2. 単純かつ確実にするなら、コーパスで「因果言語モデル(causal LM)として継続学習(またはLoRAでの微調整)」を行い、リパライン語の生成性能を上げる。
  3. 学習後は「チャット用プロンプト(system+user)」で呼び出し、常にリパライン語で回答するよう生成条件を固定する。
  4. 余力があれば(GPU資源があるなら)自己指示生成で対話データを作り、 instruction-tuning も行うと会話の質が上がる。

以下、3つのファイルを用意しました(そのまま保存して使えます):
■ prepare_dataset.py — 元テキストをトークナイザ向けに変換 / Dataset 生成
■ train_lora.py — LoRA を使った微調整(軽量) or フル継続学習のスイッチあり
■ chat_local.py — 学習済みモデルを読み込んで対話する簡単なチャットCLI

なるほど。
以前、同じようなことをランダム生成した文字列で学習させようとしてTransformerは導入済みだし、GPUはNVIDIA GeForce RTX 2060が積んである。Pythonも多分最新版が入ってる(確認したところ3.10.2なのでOK)。

ここからはChatGPTの回答に沿って、ローカルで組み立て作業を行っていこう。

パッケージの導入

pip install transformers accelerate datasets peft bitsandbytes sentencepiece tokenizers safetensors --upgrade
Enter fullscreen mode Exit fullscreen mode

これを実行して、パッケージを導入しろということだそうだ。
Windows PoworsShellを管理者権限で起動して、そのまま貼り付け、実行を行う。

Image description

……
どうやら無事、パッケージの導入は出来たらしい。
次の段階に行こう。

prepare_dataset.pyを実行する

単純に行単位のコーパスを読み、トークナイズして HuggingFace datasets 形式にするスクリプト。

HuggingFace datasets 形式とは、高速かつ効率的にデータセットを扱えるように設計されている形式らしい。
まあ、平たく言うなら適当に集めたテキストファイルをこれで、コンピューターに扱いやすくするということだろう。
実行したところ、エラーを吐いたのでChatGPTにこれを返す。

どうやらtyping_extensionsというパッケージのバージョンが古かったようなので、アップグレードを行う。
アップデートしてから実行してもエラーを吐いた。あれ?

……
どうやら、LLMのモデルが導入されていなかったらしい。
安全性のためにChatGPTが言及しているllama 3.3: 70Bをダウンロードしてみる。

Image description

モデルがデカい!(多分ダウンロードに一時間くらい掛かるよって書いてある)
朝5時に起きて始めたから、一旦寝て待つ。

=8:15=

Image description

> 終わってねえ! <

さすがLLM、大規模というだけあって、サイズもデカいのだなあ。
自PCのSSD用量も心配になってきたが、まあ多分大丈夫だろう。
適当に朝の体操、シャワー、ウクライナ語の日課などをして過ごす。

午前10時前にダウンロードは完了した。
これで準備は出来たので、次の段階に進もう。

無理なんかい!

私:

今作ったデータセットで対話言語モデルを学習したいです。このPCには、NVIDIA GeForce RTX 2060が搭載されています。

ChatGPT:

了解しました!
あなたの環境(RTX 2060 / VRAM 6GB)の場合、方針は 完全に決まります。
🎯 結論:RTX 2060 では Llama 70B(または 7B/8B のフル学習)は不可能

しかし…

✅ 3〜7B クラスのモデルを QLoRA(4bit)で軽量学習させることはできます。

(VRAM 6GB だと限界ギリギリ)

👉 今回作ったデータセットで「対話言語モデル」を学習するには、7B ではなく 3B クラスが最適です。

Qwen2.5-3B などが最適選択です(日本語強い + VRAM節約)。

日本語ではないのだが……
まあ、とりあえず言われたやつ(Qwen2.5-3B-Instruct)を導入しよう。

from transformers import AutoModelForCausalLM, AutoTokenizer

model\_name = "Qwen/Qwen2.5-3B-Instruct"

tokenizer = AutoTokenizer.from\_pretrained(model\_name, trust\_remote\_code=True)
model = AutoModelForCausalLM.from\_pretrained(model\_name, trust\_remote\_code=True)
Enter fullscreen mode Exit fullscreen mode

数時間待ったのは何だったのか、ダウンロードは数十分で終了した。

学習開始(できなかった→する)

train.pyというのを渡されたので、これを実行する。
早速エラーが出てきたので、ChatGPTに渡す。

どうやら、データセットがおかしいらしいので、作り直しを要求されているらしい。
色々いじって、データセットを再作成する。

Image description

出来たので、もう一回train.pyを実行する。
また、エラーが出たのでChatGPTに渡す(単調な作業すぎて肩が凝る……)。
これをしばらく繰り返す……

取り敢えず学習を開始するのには成功したが、学習完了に3日掛かると言われて草。
三日間パソコン放置は私がつまらなさ過ぎて死んでしまうのでどうにかならないかChatGPTに再度聞いてみる。

色々提案してくれて、8時間で完走できそうな実行オプションを教えてくれた。
8時間であれば、なんとか生き延びられそうである(人間とはかくも弱き生き物よ)。

ChatGPTの言ってくれた方策をもってしても77時間となってしまった。
もう一回相談して、train.pyの改造を依頼。

……うーむ、やっぱりこのPC、ゲーミングとはいえ数年前のもの。
型落ち感が否めないなあ。
一旦、するめでも食べて、あたなるの配信でも見て、リフレッシュしよう……

再開

最適化版のtrain_optimized.pyを出してもらった。
それを実行することにした。

ChatGPTによると2〜4時間と言われているが、表示上では11分くらいで終わるぜと書いてあるようにみえる。

Image description

lossが順調に減っていっている。性能がカスみたいにならないと良いのだが……

学習終了

ChatGPT

現在あなたの成果物は:

  • ベースモデル(Qwen2.5-3B)
  • LoRA(parine_qwen_lora) の2つが分離しています。 これらを 完全統合モデル(merged model) にすると:
  • 推論(チャット)速度が速くなる
  • 追加ライブラリなしで使える
  • Fine-tuned Qwen として単体で扱える 👉 merge_lora.py を作ります(そのまま実行可能)

はあ(70%くらいは分かった)

とりあえず、マージモデルを作成してもらうスクリプトを実行する。

そして、チャットAIへ

さて、色々あったが、早速ここまで来ることが出来た。
早速、chat.pyを実行して……

……エラーが出てきたなあ、また修正を繰り返す作業をして、やっと起動成功!

Image description

素晴らしいな、早速挨拶から始めよう。

私:

Salarua!

AI:

Mi ne sela es mi'st, niv.

私:

Cene co lkurf lineparine?

AI:

"Kur linet line parine?"
"Kur" signifis "Kur" en lartec, "line" signifis "lente", kaj "line parine" signifus "en linet". La solvo estas "Kur linet line parine?".

おい、待て待て待て。
なんか、エスペラントみたいのが出てきてるんだが……
あんまりリパライン語っぽくない文章として出力されるなあ。

ここからはモデルの訓練とコーパスクレンジングによる精度の向上という地味な話になってくるだろう。

精度向上を試みる

> べつのひ <

取り敢えず、ChatGPTと共に精度向上について打ち合わせを続ける。
どうやら、学習データを「ChatML 対話形式」に変換するのが良いらしい。
提案されたbuild_chat_dataset.pyを実行してみる。
そこからさらにChatML データセット → HuggingFace datasets 形式への変換スクリプトに変換。
さらに再学習を行うスクリプトを作ってもらい、それを実行する。

Image description

結構時間がかかりそうだけど、lossも順調に下りそうなのでこのまま放置する。
学習を行わせている間、昼飯を食いに行ってこよう。
今日は松屋のマッサマンカレーで決まりだな。

……
マッサマンカレー美味しかったなあ。
しかし、学習には10時間掛かるとか書いてあるんだけど、時間使うだけ使って精度上がらなかったらぼっこすぞ(新潟弁)。

………
いや、待て、実行してから文句を言うのは流石に頭が悪すぎる。
一旦やめだやめ。
もう一回ChatGPTと協議して学習時間の短縮と品質維持に関して、更なる向上を目指すぞ。

結果として、学習時間を3時間ほどに抑えることができた。

> > 出来なかった < <

Image description

Done. じゃねーよ!
結局、7時間くらいかかってるじゃねーか!!
ま、まあ、良いか、多少時間がかかるのはしょうがない。

さて、7時間の実力を見せてもらおうか……

Image description

> 煽られた <

まとめ

今回はリパライン語の大規模コーパスを使って、リパライン語で応答可能なチャットボットの作成を機械学習にて行った。
精度に関しては疑問が出るものとなってしまったが、細かい調整をすれば十分にリパライン語での応答が出来る品質のチャットボットが作成できたのである。
これはつまり、リパライン語のコーパスの中身が実際に機械学習が言語を習得することが出来るくらいのデータ量を含んでおり、文法的な傾向がはっきりと見られるということを意味している。
今後もリパライン語の大規模コーパスを用いて、機械学習を通した様々な文章生成の実験を行い、精度の向上を目指していきたいと思う。
将来的には機械翻訳を通して、自然言語からリパライン語への文章生成を多く行うことが出来るような状況になると面白いのではないかと考えてもいる。

人気順のコメント(0)