今回のコンペでは決勝に残ることはできませんでしたが、試行錯誤を重ねて点数を伸ばすことができ、スコア3.2で70位で終了することができました。試行錯誤をしている時間は大変でしたがとても楽しく充実していました。

はじめに
これまで、CNNやRNNの簡単なAIモデルを作成したことはありましたが、TransformerやLLMの勉強はやったことがなかったので、この講座で新しいことを学ぶことができました。
LLMの開発はとてつもなく難しく、かなり限られた人しかできないと思っていましたが、仕組みを理解しながらできるところから始めれば、決して自分にとって無理なものではないと思うことができました。
自己紹介
現在大学3年で、LLMを活用して起業をしようと思っているので、今回学んだ内容を応用してサービスを作っています。Webエージェントの構築をしています。
Webサービスへの組み込みと、自然言語からタスクを実行させることに興味を持っています。
詳細
- スコア:3.2、70位
- ベースモデル:llm-jp 13B
- 学習データセット:ichikara 複数のニュースサイト 数学問題の合成データ(Swallow 8B)
- 実施した手法:SFT(LoRA), DPO
- 主な実行環境:Google Colaboratory
- 使用したGPU:A100(VRAM 40GB)
初期の試行錯誤
llm jp 13Bを用いてSFTサンプルコードのまま実行しました。結果は2.59でした。
その次にニュースサイトをスクレイピングをしたデータ(10MB)を追加して学習させたら2.7まで上がりました。これで、データを増やすことによって精度が向上すると思い、もっといろいろなサイトへのスクレイピングのコードを書いていきました。
中盤の取り組み
そして、ニュースサイト・小説のネタバレブログ・論理的思考を問う合成データを用意して、合計で100MBのデータを学習させました。3は確実に超えるだろうとワクワクしながら実行すると、2.66と前回よりも下がってしまい、かなりショックでした。
プロンプトを変えると2.72まで上げることはできましたが、大幅な改善にはなりませんでした。ベースモデルの能力があまり高くないと、データを増やしても限界が早いのかと思いました。
elyza-tasks-100を学習データに追加すると、2.73になりましたが、やはりデータを増やすだけでは、3を超えることはできませんでした。
最後の粘り
途中でDPO用のサンプルコードが追加されたので、そのまま実行しました。しかし、llm jpの出力ではフォーマットを守らないことが多く、elyza-tasks-100の類似問題の作成は全くうまくいきませんでした。なので、モデルをSwallow 8Bに変更して類似問題を作成するとうまくいきました。
手作業も含めて200件ほどDPOのファイルを作成して、学習させると2.61でした。200件では少ないのかと思い、400件にすると2.95まで上がりDPOはかなり有効だと分かりました。
これに味を占めて700件まで増やして実行すると3.2までスコアを上げることができました。データを人目で見ても最初よりもかなり自然な回答になっていました。
まとめ
DPOは単純作業でとにかく時間が必要で大変ですが、大きな効果がありました。もっと時間があればさらに向上できたと思います。
コンペのディスカッションを見ていると、gemmaシリーズは人間の言いつけをよく守り、llm jpは無視するか考慮しないことが多いと思いました。なので、プロンプトエンジニアリングをできたのはgemmaシリーズのみだったのでしょう。
gemmaには触れてこなかったので、両方を試してから使うモデルを決定すべきだったのかもしれません。
とにもかくにも、このような楽しく競い合いながら技術力を向上させられる場を提供してくださった松尾研の皆さんには感謝です!
コメント