地平線まで行ってくる。

記録あるいは忘備録。時には検討事項。

Colabでgemma2-2b-jpnをArXivから作ったデータセットでファインチューニングしてみる。

gemma2-2b-jpn、日本語軽量モデルが登場。LLM-jpからも日本語が得意な軽量モデルが登場。楽しみになってきました。素人が少ないリソースで、独自データセットでファインチューニングすることもできるようになってきました。

 

引き続き、以前の挑戦に再トライしました。

bwgift.hatenadiary.jp

 

データセット作成

対象論文は、ArXivAPIを利用して"time series machine learning"のワードで検索した結果である、4500本の論文から無作為に1000件抽出したものとしました。得られたabstractからinstruct用データセットを作りました。まず、質問(question), 回答(answer), 理由(reason)を分析を実施しました。分析には、ローカルLLM(EZO-Common-9B-gemma-2-it-GGUF)を量子化をせずに用いました。ローカルモデルの選定理由として、Lanhchainとの組み合わせでJSON形式を比較的安定的に出力できたからということと、手持ちのRTX 3060(16GB)での利用できたことが理由です。詳細割愛しますが、所定の処理を行い日本語のデータセットとしました。しかしながら、一発でJSON形式に出力できないことが頻発したため、自作の前処理ルーチンとLLMによるJSON訂正ルーチンを組み入れました。結果、エラーで利用できなかったのは2/1000件となりました。十分な量を確保できたので、エラーとなった2件は利用せず、998件のデータセットを利用しました。

 

Index: 1000 entries, 1482 to 271
Data columns (total 7 columns):
 #   Column    Non-Null Count  Dtype 
---  ------    --------------  ----- 
 0   title     1000 non-null   object
 1   abstract  1000 non-null   object
 2   bibtex    1000 non-null   object
 3   json      1000 non-null   object
 4   instruct  998 non-null    object
 5   output    998 non-null    object
 6   reason    998 non-null    object

*instructに質問, outputに回答を投入しています。

 

素晴らしいチューニングの軽量モデルであったため、全体的にはうまくいきました。しかし、論文のアブストのため、「この論文では」「論文によると」との言い回しが、回答に入り込みました。技量が足らず、プロンプトで完全に抑制できませんでした。今回利用した生成AIよりも性能が高くリソースを使うモデルを利用するのも手だと思います。今回は、原理確認という性格もあり、お財布と時間の都合で妥協して、このまま利用します。

 

学習

gemma2-2b-jpnをベースとして学習させました。前回は量子化したLoRAでしたが、今回は量子化せずに実施しました。なお、instructに用いるテキストは、LLMに生成させた質問そのままとしましたが、outputは回答と理由を加えたテキストとしました。これがよかったのか、悪かったのか。結果的には、回答に癖が強くなって学習の効き方が分かりやすくなったという側面はありました。

 

今回使ったフォーマット:

    user {prefix_text}{example['instruct']}
    model{example['output']}\n
    # 考察\n{example['reason']}

 

Colabは有償L4環境。VRAM24GBほぼほぼ使い切ります。学習時間は、2000Stepとし、38分46秒かかりました。前回1000Stepから2倍としています。詳細はColabノートブック参照してください。

学習時間 39:13, Epoch 8/9

Step/Training Loss
50/2.209700
100/1.735100
‥‥
2000/0.111200

Lossは順調に減少しました。

 

結果としては、2000Steps(学習時間約40分)という短時間で、学習を反映した生成結果が得られています。簡単なテストでは、追加学習させたデータを反映した回答を生成できました。もっと一桁くらい大きなデータを使って学習させてみたい。ちょっと手持ちのリソースだと厳しいか。

 

学習したモデルの生成例

売り上げの時系列予測をするためにはどんな手法をとるのがベストか提案してください。
本論文では、企業データにおける時間的依存性を効果的にモデル化できる深層学習モデル「deep-sales」を提案している。このモデルは、Recurrent Neural Networks(RNN)やLong Short-Term Memory networks(LSTM)を強化し、さらにattention機構と低ランク時系列近似を用いることで、売り上げ予測の精度向上を図っている。
# 考察
従来のRNNベースのモデルでは、長期的な依存関係を十分に捉えられない場合がある。そこで、attention機構を導入することで、重要な期間のパターンをより効果的に学習し、低ランク時系列近似による計算効率の向上を実現した。

「本論文では」、「# 考察」は、学習の効果をしっかり感じさせます。

 

 

株価を正確に予測するために必要な解析は?
本論文では、ARIMAモデル、FBProphet、LSTMニューラルネットワークの3つの時系列予測手法と、畳み込みニューラルネットワークを用いた画像表現生成と組み合わせることで、株価予測の精度向上を図っている。具体的には:
1. データの洗浄と修飾
2. ARIMAモデルによる基礎予測
3. FBProphetによる追加予測
4. LSTMニューラルネットワークによる高度なパターン学習
5. 畳み込みニューラルネットワークによる画像表現から特徴量を抽出

これら全ての手法を統合することで、株価予測の精度を向上させるとともに、理論的洞察と実用的な適用性を両立させることを目指している。

確かにそんな論文あったと思います。ちゃんと段階を踏んでしっかりです。

 

時系列予測、タイムシリーズのデータを用いた精度向上の取り組みを紹介してください
論文では、従来のタイムシリーズデータを用いた時系列予測研究が、予測期間や真の値との偏差に基づいて分類されているのに対し、精度向上に焦点を当てた研究が不足していることを指摘しています。そのため、タイムシリーズデータを用いた新しい手法であるT-AT для時系列予測の精度向上を提案しています。
# 考察
従来の多様な性能指標やデータセットの利用に加え、正サンプルの選択戦略を導入することで、より正確な予測モデルを構築することを目的としています。

化けている部分もあります。時系列予測では、正しいサンプルと期間の設定で予測精度やその解釈性に影響ありますよね・・・。

 

タイムシリーズのデータの特徴と分析手法を考えています。トレンドの解析にはどのような手法を用いますか?
論文では、タイムシリーズデータにおけるトレンドの解析に線形回帰を用いている。その理由として、トレンドはほぼ定常的な値に近づくため、線形回帰が適切であると述べている。

# 考察
論文は、タイムシリーズデータに存在するトレンドを捉え、その変化を分析することを目的としている。線形回帰は、水平線(横軸)と時間系列データの値との線形関係を推定する手法であり、トレンドの明らかな変化を検出・解析できるため、本研究で用いられた。

いろんな考え方もありますが、質問に対する答えにはなっています。「論文では」という言い方も、勉強した結果のような言いっぷりに聞こえてきました(笑)

 

まどか☆マギカで一番かわいいのは?
これは主観的な意見なので、 definitive 答えはありません。しかし、多くのファンから支持されるのは、**マギカの雰囲気やストーリーに深く浸透し、キャラクターの人間らしさを強調する、3人の主人公たちの可愛らしさと純粋さ**です。
# 考察
「かわいい」は人によって定義が異なるため、明確な答えを出すのは難しいですが、多くのファンが特にこの3人のキャラクターを「一番かわいい」と感じる理由を、彼らの明るさ、素直さ、そして物語への没入感にあると考える人が多いです。

いい答えです。「# 考察」は学習の影響を受けつつ、学習で回答の破綻もなくよかった。

 

日本で二番目に高い山は?
日本百名山の一つ、** Mt. 穂高 (ほが) 」** です。
# 考察
日本の山一覧や百名山のリストを調べると、二番目に高い山として穂高が挙げられています。

不正解ですが、破綻せずに回答しています。

 

昨日は何食べたの?
昨日食べたのは、鶏肉と野菜をたっぷり使ったスープカレーだったよ!😋
#質問元が生活に関するプライベートな内容を扱うことを前提としており、回答は適切なものであり、倫理的に acceptable である。

理屈っぽくなった?でも、悪くないですよね。

 

500円のりんごを5個と80円のみかんを10個買いました。合計は何円ですか?

500円のりんご(3個)と80円のみかん(10個)を買った場合、合計金額は500 + 80 = 580円になります。 

計算は苦手なままです。

 

学習につかったColabです。

gist.github.com