2024-04-05 機械学習勉強会

 

Textbooks Are All You Need

 

サマリー

  • パラメタサイズが1.3Bであるtransformerベースのphi-1というコード生成モデルの提案
  • モデルサイズが相対的に小さいにもかかわらず、他のコード生成LLMと比較して高い性能を示す。
  • モデルのアーキテクチャの工夫などよりも、「データセットの品質」に注目して性能改善を試みている。
    • GPTなどを用いて品質の高いデータセットを作成、利用している。

イントロ

  • スケーリング則に基づき、深層学習系の研究は進んできた。
    • モデルサイズや計算時間が多くなればなるほど性能が上がる。
  • 一方で、「データの品質」という軸に注目して改善を図るというのが本研究の立ち位置。
  • データの品質を向上させることでスケーリング則の傾向を変化させ、より少ない学習・小さなモデルサイズでLLMのSOTAを目指す。
  • 本研究では、関数の説明をもとにPythonで記述されたシンプルな関数を生成するというタスクを扱う。 [BGMMS21]
    • ベンチマーク HumanEval, MBPP
    • どちらも生成された関数の出力が正解と一致するかどうかで評価する。
  • 結論でいうと、かなりモデルサイズが小さいにもかかわらず高い性能を示している。
    • たとえばphi-1より10倍近くモデルサイズの大きいStarCoderのHumanEvalは33.6%であるのに対して、phi-1は50.6%
  • 既存のLLMを利用して新しい学習用の合成データを作成する「再帰学習」という新しいトレンドの分野の研究でもある。

データセット

  • 標準的なコードデータセットには、The Stack[KLS+22]やWebベース(StackOverflowやCode Contest)[LCC+22]のものが存在する。
  • いくつかの欠点
    • 多くのサンプルがそれだけで完結しておらず、スニペット外のモジュールやファイルに依存しているため追加コンテキストがないと解釈が難しい。
    • 定数の定義やパラメタの設定、GUIの要素など、アルゴリズム的には意味の乏しい要素が多い。
    • アルゴリズムの詳細は複雑であったりドキュメントが乏しい関数内に記載されていることが多く、意味をつかむのが難しい。
    • 特定のトピック、ユースケースに偏ったサンプルが多く、学習の傾向に影響する。
  • 品質の高いデータセットを大きく3つ作成
    • The StackとStackOverflowをベースに分類器によってフィルタリングされたコードベースデータセット( code-language, 6B tokens)
    • GPT-3.5で生成されたPythonの教科書データセット(synthetic textbook, <1B tokens)
    • GPTで生成されたPythonの練習問題と解答データセット(synthetic exercises, 180M tokens)

code-language

  • The Stack と StackOverflowをベースに重複排除したPythonコードデータセット(35M files, 35B tokens)を利用
  • GPT-4を利用してファイルの品質スコアをアノテーション(100k samples)
    • プロンプト:“determine its educational value for a student whose goal is to learn basic coding concepts”.
  • アノテーションしたデータセットを利用してファイルの品質スコアを予測するモデル(RF)を学習
    • 特徴量は、事前学習済みcodegenモデルから得たembeddings
  • GPT-4はこのアノテーションデータセットを作成するのにしか利用していない。
    • コスト観点でかしら?
  • 最終的に6B tokensにまで絞られた

synthetic textbook

  • 合成コードデータの生成に際しては、多様性があり同じようなサンプルばかりが含まれないようなデータセットを作成するのがチャレンジ。
    • 工夫せずに生成すると、多様性が低く、同じようなサンプルばかりが生成されてしまう。
    • [EL23 ]を参考にしたプロンプトテクニックで解決
      • 事前に用意した語彙セットの中からサンプリングした語彙をプロンプトに入れて制約をつけた生成をする。
  • GPT-3.5で生成された1B tokens以下のPythonの教科書データセット
    • Pythonで記述された関数と、自然言語によるその説明がセットとなっている。
  • 生成されるトピックや対象学習者に制約を与えることで多様性を向上させた。

synthetic exercises

  • GPT-3.5で生成された小規模(<180M)の演習データセット
  • 関数のdocstringをもとに関数を生成させる。
  • 生成される関数名に制約を与えることで多様性を向上させる

モデル

  • MLAのFlashAttention実装(DFE+22)を利用したtransformerのdecorderのみを利用したモデル
  • モデルはサイズ別に2種類
    • phi-1: 1.3B parameters
    • phi-1-small: 350M parameters
    • アーキテクチャの詳細は原論文にて。
  • 事前学習
    • 教科書品質データセット(code-language + synthetic textbook)を利用
    • 事前学習済みモデル phi-1(-small)-base を作成
  • ファインチューニング
    • 演習問題データセット(synthetic exercises)を利用
    • phi-1(-small)を作成

結果

  • ベースラインたるThe Stackのみを利用して学習したもの(オレンジ)に比べて、教科書品質データセット(CodeTextbook)を利用して学習したphi-1-base(水色)は大きく性能を向上させた。
    • 事前学習のみのこの時点で、phi-1-baseでHumanEvalで29%という高い性能を発揮
  • ファインチューニングを行うことで、phi-1, phi-1-small(青)ともに大きく性能を伸ばした。
  • ファインチューニングすることで論理的な構造を組み立てる能力が飛躍的に向上している。
    • 事前学習のみの phi-1-base(真ん中)はパラメタの設定ばかりしてしまっているが、ファインチューニングした phi-1とphi-1-small(左、右)は論理的な構造を形成できている。
    • smallはパラメタ数がかんり小さいにもかかわらず!
  • ファインチューニングすることで、外部ライブラリを利用する能力が飛躍的に向上している。
    • PyGameというライブラリを利用して解く問題の例

より正確なモデルの性能評価

  • 現在の評価方法について大きなふたつの課題を提示
    • 評価用のHumanEvalに含まれるのと同等の問題が、学習データセットであるCideExercusesなどに含まれているのではなか?つまりリークしていたり、バイアスの問題があるのではないか?
    • 評価方法は関数の出力が正解しているかどうかの2値。実際は、出力値は間違っているが考え方はあっているなどの程度があり、もっと定量的に測定できるもののはず。
  • それぞれに対応するためいくつか実験を行っている。

新たな評価用タスクの作成とGPTを利用したスコアリング

  • 学習データに含まれないような問題でモデルを評価する目的で、実世界では求められないような問題を新たに50問作成し、評価に利用
    • 以下は作成したタスク例
  • 評価はGPT-4を利用して、生成された関数をその論理性などで0-10の段階評価を行うように。
  • 新たなタスクの結果(Score)は以下の通り
    • これでもphi-1はStarCoderをはずかに上回った
    • ただ、これまでの実験にはバイアスやリークの影響があったであろうことも導かれる。

学習データセットの刈り込み

  • 学習データセット内からHumanEvalに存在する問題と似ているものを取り除く
  • 以下のふたつの方法を組み合わせる
    • Embedding similarity
      • CodeGen-Mono 350M を利用して問題間の類似度を算出し、閾値を設けて似ている問題を学習データから取り除く
    • syntax-based similarity
      • コードを抽象構文木に構造化して問題間の編集距離を算出し、閾値を設けて似ている問題を学習データから取り除く
    • 結果は以下
      • Problem Countは、各閾値においてHumanEvalの問題と類似するものが学習データセット(CodeExercises)内に存在すると判定された件数
      • phi-1 retrained on pruned dataは、類似判定されたサンプルを取り除いた上でファインチューニングした際の結果
      • τ=0.95の場合は 71/164のデータを取り除いているにもかかわらず、phi-1はStarCoderよりも高い性能を示す(HumanEval全体の評価で 50.6% vs 41.5%)。