ローカルでも稼働できる軽量で人にやさしい印象のある日本語得意なモデルが出てきています。最近ではTanukiが開発されたことは、とても印象深いです。今でも、OpenAIやGoogleのモデルを使って数を処理するのは、コスト的に大変で一般人のお小遣いレベルでは現実的ではありません。そこで、ローカルLLMでも言い換えや分析タスクはできる賢さがありそうだったのでチャレンジしました。
モデルの選定
今まで遊んでみたモデルからえいやーで選んで味見をしました。
Tanuki-8B : weblab-GENIAC/Tanuki-8B-dpo-v1.0 · Hugging Face
Gemma2-9B-it : google/gemma-2-9b-it · Hugging Face
JSON形式での出力が安定すること。可能ならlangchainと組み合わせて安定して利用できること。の2つの観点で味見をしました。
Tanuki-8Bは対話型のモデルなので指示の効きが悪く情報の付け足しが散見されました。残念ながら、今回は不採用としました。Gemma2-9B-itでかつ日本語タスクに優れるチューニングを施したEZO modelだと、出力も安定していました。また、GGUFに変換されたモデルが公開されていましたので、そちらを使うことにします。
Gemma2を使えば、JSONフォーマットでの出力はいい感じでできそうなのです。ところが、langchainのJsonOutputParserでは、日本語を考慮してないのか(unicode?)のためエスケープ処理を追加しないと、Paeseエラーがそこそこ出てしまいます。そこで、JsonOutputParserの前にエスケープ処理を入れ込みます。
chain = prompt | llm | pre_parser | parser
*parserがJsonOutputParser
味見をしてみると、エラーが減ってなんとかできそうな感触が得られました。さて、量を増やしてテストしてみます。
ちなみに、後で述べる処理をした結果、エラーは18/15015と実用レベルになりました。18件くらいだったら手作業で訂正しても大したことありません。ほっとしました。
変換準備
よくファインチューニングの題材で用いられる、「ござる」データセットを思い出し、Databriks-Dollyの日本語版を題材にしギャル語変換を試みます。
ござるモデル: bbz662bbz/databricks-dolly-15k-ja-gozaru · Datasets at Hugging Face
こんな感じです。入力はござるデータセットからいただきました。
入力:
ヴァージン・オーストラリア航空は、2000年8月31日にヴァージン・ブルー航空として、2機の航空機で単一路線の運航を開始しましたでござる。
出力:
{'answer': 'えーっと、ヴァージン・オーストラリア航空って、2000年8月31日に、ヴァージン・ブルーって名前で、たった2機の飛行機で、ほんっっとに短い路線だけ飛んで始めたの。きゃわいいでしょ?'}
どこまでリアルなギャル語かは分かりません。しかし、変換結果が分かりやすいので、ギャル語を採用します。
変換実施
環境 windows11+dockerでColabのローカルランタイムとして稼働
NVIDIA-SMI 560.35.03/Driver Version: 561.09/CUDA Version: 12.6
NVIDIA GeForce RTX 3060 (9336MiB / 12288MiB)
かかった時間
100%|██████████| 15015/15015 [12:04:39<00:00, 2.90s/it]
12時間程度で完成!個人的には速度には満足。もっといいGPUを使ったり、並列処理したら、これより早くなる。GIGAByteのGeForce RTX 3060 OC12Gが静かなので助かりました。
結果
「\n」は入れないほうがいいのだろうか、もやっとポイントはありますけれども、今の時点のAsIsでuploadしました。作っちゃえばuploadと公開は簡単ですね。
なんか、それらしいものが出来た・・・気がします。Gemma2ベースにしたので出力が危険な方向に行かないだろうという安心感はあります。さすがGoogleさんです。
なぜJSON?
Tanuki8のプロジェクトのけん引役の畠山さんのXの発言です。
下期に注力予定の取り組み
— 畠山 歓 Kan Hatakeyama (@kanhatakeyama) 2024年9月14日
(1)チャットが得意なllm構築(tanukiの開発知見を活かした海外?モデルの追加学習)
→ユーザーの心理的な満足度という、正解が曖昧な領域への挑戦
(2)与えられた種々の化学・物性系のデータベースを自己報酬的に学習・予測するllm
→「科学理論を探索するAI」への挑戦
研究開発をかじった人間として、(2)に示された科学理論を探求するAIまではいかなくとも、その分野の論理や技術をLLMに入れ込んだら楽しいなと思っています。そのためにも様々なテキストから有意義な情報を整理する必要があります。つまり構造的な分析が求められます。そこで、今回のローカルLLMを味見しながら、多少なりともできそうかどうかの感触を得たかった。手始めに、構造化したデータをJSON形式で取り出せるか・・・が気になったのです。次のステップで役に立つのではという。
こんな風に、個人で最新技術は難しくても、楽しく遊ぶことはできそうです。寂しいけど(笑)
より本質的な力と行動力が求められる時代が来つつあります。学生にとって本当に大変な時代でしょう。でも、その先にはデータやIQだけでは味わえない世界がありますよ。
参考:ライセンス周り
- Databricks-dolly : https://huggingface.co/datasets/kunishou/databricks-dolly-15k-ja : CC-BY-SA-3.0
- Gemma2 : https://ai.google.dev/gemma/terms#3.3-generated : Google claims no rights in Outputs you generate using Gemma.
- EZO model : https://huggingface.co/AXCXEPT/EZO-Common-9B-gemma-2-it
- GGUF model : https://huggingface.co/MCZK/EZO-Common-9B-gemma-2-it-GGUF
利用させていただき感謝します。