LLMハッカソンについて

はじめまして。cvpaper.challengeアドカレ2023の3日目を担当させていただく松澤郁哉と申します。私は筑波大学/産総研のヒューマンセンタードビジョン研究室に所属している修士2年生で、brave new recognitionグループでVision and Language分野の研究を行っています。連携大学院という制度により、研究室は産総研つくばセンターの中にあるため、大学のキャンパスには全く足を踏み入れない生活を送っております。

今回は、今年の4月からコミュニティ内部で行なっているLLMハッカソンという取り組みについて紹介したいと思います。

LLM(Large-Language-Model)とは、大規模言語モデルと呼ばれる、大規模なデータセットで学習された、大規模なパラメータ数をもつ言語モデルのことです。

LLMには、入力された単語列から次の単語を予測するように学習されたGPTや、単語列内のランダムにマスクされた単語を予測するように学習されたBERTなどがあります。

近頃大きな盛り上がりを見せているChat-GPTにも、GPT-3.5やGPT-4といった大規模言語モデルが使用されています。

ところでLLMハッカソンと聞くと、そのような大規模言語モデルをコーディングしたり、ABCIで分散学習をゴリゴリにやっているのでは?と思った方もいると思います。

そう思ってここまで読んでいただいた方には大変申し訳ないのですが、私たちの取り組みは、LLMの挙動を確認・分析してみて、効果的な活用方法や研究テーマを考えることを狙いとしています。

つまり、どちらかといえばアイデアソン寄りの取り組みになっているかもしれません。

最終的にはデータの収集・クリーニング方法やプロンプティングのTipsなどを蓄積し、日本のLLMを活用した研究の効率化に貢献していければ嬉しいです。

以上を踏まえて、本記事では以下の項目についてお話ししたいと思います。

目次

  1. LLMハッカソンの経緯

  2. これまでの活動方針と活動ペース

  3. 現在のモチベーション

  4. OpenAI APIを使う上でちょっとだけ役に立つこと

  5. プロンプティング

  6. ファイル管理

  7. リクエストタイムアウト

  8. 最後に

LLMハッカソンの経緯

近頃、LLMの性能が急速に向上し、自然言語処理の分野のみならず、コンピュータビジョンやロボティクスの分野の研究でも取り上げられることが多くなってきました。cvpaper.challengeでもLLMに対して理解を深め、知見を共有する場を用意することが重要であると考え、本取り組みは発足しました。活動開始時のメンバー構成は、学生4人とメンター5人でした。

これまでの活動方針と活動ペース

4〜5月はLLMの仕組みの学習に加えて、既存のデータセットでLLMの学習コードを実行するなどしていました。全体ミーティングは2週間に1度のペースで行い、ミーティングで上がった課題に各自で取り組んでいくスタイルで活動していました。

また、メンバー全員が本取り組みとは別に研究テーマを持っていたため、週に1回実働メンバー(学生)で時間を決めて作業会を行うようにしました。デバッグなどで1人で悩むのではなく、博士課程の先輩方にすぐ相談することができたので大変助かりました。ありがとうございました🙇‍♂️

実際に何をやっていたかをご説明すると、計算資源の問題もあったのでDeepSpeed-ChatというフレームワークをStep 1から3まで動かしてみて、それぞれのstepが一体何をやっているのか理解するという流れで進めていました。

また、並行して自作データでファインチューニングするならどのようなデータが良いかということも話し合っていました。目的なく集めたデータでファインチューニングしてももったいないということで、一度研究テーマを決めてから取り組もうという流れになりました。

しかし、6月はなかなかテーマが決まらず、迷走期に突入してしまいました…。

LLM x ナビゲーションや、LLM x 3D、Embodied AIなど、いくつか論文をサーベイして大枠の案は出たものの、細かいところが詰められず振り出しに戻るということを1か月半ほど繰り返してしまいました。

この時期の反省点を挙げるとしたら、すぐに動かせるフレームワークがDeepSpeed-Chatしかなかったことと、実働メンバーのLLMに関する知識が足りない中でひたすらテーマについて悩み続けてしまったことだと思います。

現在のモチベーション

テーマについての詳細はお話しできないのですが、7月下旬にマルチエージェント対話に絞って進めていこうと方針が決定しました。

現在は実働メンバー全員がChatArenaというマルチエージェントプラットフォームを扱えるようになったことと、新しいメンバーの加入もあり活発に議論が行われています。

10月ごろに明確にテーマが定まってからは、週に1回ミーティングでTODOを設定して、次週のミーティングで実験結果を発表し議論するというサイクルを回しています。現在は実験結果もいろいろ蓄積されてきており、ミーティングが楽しいという状況になってきております(僕だけだったらすみません)。

楽しさ以外のモチベーションとして、現在取り組んでいるテーマを年度内に何らかの形式で発表することを目指しています。LLMに関する新しい知識や分析結果を蓄積し、コミュニティ内の研究に貢献すること、各自のメインの研究テーマに活かすことも目標としています。

OpenAI APIを使う上でちょっとだけ役に立つこと

本取り組みではOpenAIのAPIを使用することが多かったので、実装上の困ったことやどう解決したかをまとめてみます。(詳しい人からすれば「すでにやっています」な情報かもしれないですが、少しでもどなたかの力になれば幸いです。)

プロンプティング

GPTに限らず、LLMの性能はプロンプトによって大きく変わることが知られています。

LLMに対して具体的な指示を出したいときは、自然言語で記述するのではなく、jsonやyamlの形式を意識してプロンプトを書くと上手くいきやすいです。

具体的な例で言うと、出力文字数を制限したい時、「100文字以内で生成してください」と入力するよりも、「- 最大文字数:100」と入力した方が上手くいきやすいです。

こちらに関してはOpenAIが公開しているBest practice for prompt engineeringという資料が一番わかりやすいと感じました。日本語に訳してくださっている記事もいくつかあると思うので、そちらを参考にしてもいいかもしれません。

ファイル管理

長いプロンプトをハードコーディングすると、ソースコードがとても読みにくくなってしまいます。特にマルチエージェントでは、各エージェントに、役割に応じた異なるプロンプトを与える必要があるため、読みにくくなりやすいです。

そこで、プロンプトはテキストファイルで保存し、以下のように読み込むことをおすすめします。

with open(‘prompt.txt’,‘r’) as file:
	prompt = file.read()

copy

このようにファイルでプロンプトを管理することで、プロンプトを細かく変更して実験し、挙動を比較する際にもかなり便利になります。

リクエストタイムアウト

OpenAIのAPIを使用していると、長時間応答がない状態が続いたあとに、タイムアウトのエラーが発生していることがあります。実際に私が実験を回す中でも、これらのエラーが発生し、プログラム全体が終了してしまうことがありました。

その際は以下のようにして対処しました。

while True:
        try:
            response = openai.ChatCompletion.create(
                    model=‘gpt-3.5-turbo’,
                    temperature = 1.2,
                    messages=[
                        {‘role’: ‘system’, ‘content’:description },
                        {‘role’: ‘user’, ‘content’: content }
                    ],
                    request_timeout = 20
                )
            text = response[‘choices’][0][‘message’][‘content’]
            break
        except openai.error.Timeout as te:
            print(te)

copy

大体処理にどのくらい時間がかかるのか把握したら、request_timeoutを設定して(デフォルトだとすごく長い時間になっています)エラーを発生させ、もう一度リクエストを投げるような実装にします。これによって途中で長時間応答を待つことが少なくなります。

最後に

本記事ではcvpaper.challengeの取り組みであるLLMハッカソンについて紹介させていただきました。拙い文章にお付き合いいただきまして誠にありがとうございます。

もし本取り組みに興味をもっていただけた方がいらっしゃいましたら、ぜひ一緒に研究できると嬉しいです!cvpaper.challengeのリクルートページからご連絡お待ちしております!

いいなと思ったら応援しよう!