【DL輪読会】Code Llama: Open Foundation Models for Code

6.6K Views

September 01, 23

スライド概要

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

DEEP LEARNING JP Code Llama: Open Foundation Models for Code [DL Papers] Takaomi Hasegawa http://deeplearning.jp/ ©︎MATSUO INSTITUTE, INC.

2.

自己紹介 DENSO オウンドメディア DRIVEN BASEより引用 https://www.denso.com/jp/ja/driven-base/tech-design/robot/ 車載部品メーカでトマトを収穫するロボットのAI画像認識の技術開発 松尾研でAIの社会実装 ©︎MATSUO INSTITUTE, INC. 2

3.

書誌情報 Code Llama: Open Foundation Models for Code ・タイトル Code Llama ・概要 - ・著者 Meta AIの人多数 (LLaMAの論文の人も当然多数) - - 「Code Llama」は、コード生成できる大規模言語モデルの ファミリーです。 このモデルは、オープンモデルの中で最高性能を提供し、コ ードのサポートやInfilling(穴埋め)能力などの特性を持ってい ます。 さまざまなアプリケーションをカバーするために、複数のバ ージョンが提供されています(BASEモデル、Pythonモデル、 INSTRUCTモデル)。 商用利用可能です。 出典)https://arxiv.org/abs/2308.12950 ©︎MATSUO INSTITUTE, INC. 3

4.

選定理由 ・原田さんおすすめ!(これが大きい) ・最近 Advanced Data Analytics(旧Code Interpreter)を触っていて便利だけど、使い込むと 使用回数制限、価格などが気になってきている。 オープンなモデルの実力、ポテンシャルを知りたい。あわよくばChat GPTの代わりに使えな いのか?? ・商用利用可能なのもうれしい(特に社会実装を考えると) ©︎MATSUO INSTITUTE, INC. 4

5.

関連情報 ・Llama 2: Open Foundation and Fine-Tuned Chat Models https://arxiv.org/pdf/2307.09288.pdf ・Code Llama公式ブログ Code Llama: Llama 2 learns to code 動かせるデモあり https://huggingface.co/blog/codellama ・論文紹介 / Llama 2: Open Foundation and Fine-Tuned Chat Models https://speakerdeck.com/kyoun/llama-2-open-foundation-and-fine-tuned-chat-models ©︎MATSUO INSTITUTE, INC. 5

6.

概要 LLAMA 2の基盤モデル(7B, 13B, 34B)をベースに、「Code LLAMA」「CODE LLAMA – INSTRUCT」「CODE LLAMA – PYTHON」をファインチュー ニング モデル 内容 CODE LLAMA コード生成タスクのための基盤モデル CODE LLAMA - INSTRUCT 人手による指示データとSelf-instructでファインチューニ ングしたモデル CODE LLAMA - PYTHON Pythonに特化したバージョン ©︎MATSUO INSTITUTE, INC. 6

7.

モデル詳細 「Code LLAMA」「CODE LLAMA – INSTRUCT」「CODE LLAMA – PYTHON」のモデル詳細、学習の詳細に関しては後述 モデル 内容 モデルサイズ 学習 CODE LLAMA コード生成タスクのための 基盤モデル 7B(Infilling-capable) 13B(Infilling-capable) 34B ・LLAMA 2 Model ベース ・500B code-heavyデータセット ・Long context Fine-tuningしている CODE LLAMA INSTRUCT 人手による指示データと Self-instructでファインチ ューニングしたモデル 7B(Infilling-capable) 13B(Infilling-capable) 34B ・CODE LLAMAベース ・5Bの人手による指示データとSelf-instruct でファインチューニング CODE LLAMA PYTHON Pythonに特化したバージョ 7B ン 13B 34B ・LLAMA2 Modelベース ・500B code-heavyデータセット ・100B python-heavyデータセット Infilling-capable(穴埋めできる)モデルが限定されている 理由は論文では明示されていない (7B, 13Bでできれば十分という判断 or 使い勝手の問題?) ©︎MATSUO INSTITUTE, INC. 7

8.

使用例(論文に記載) 「CODE LLAMA – INSTRUCT」の使用例。ググるより速そうで便利 ©︎MATSUO INSTITUTE, INC. 8

9.

デモサイトでテスト(QRコード生成) デモサイトで簡単に試せた(34Bモデル)。日本語も使えた。実際に試してみた例 https://huggingface.co/spaces/codellama/codellama-playground ©︎MATSUO INSTITUTE, INC.

10.

デモサイトでテスト(ハート型のグラフ描画) 34Bモデル, 13B-Instruct両方ともあまりよい結果出ない。ChatGPTとの差はまだ大きそう https://huggingface.co/spaces/codellama/codellama-13b-chat エラー発生 TypeError: bar() missing 1 required positional argument: 'height' 自力で直して実行 Code Llama ChatGPT ©︎MATSUO INSTITUTE, INC.

11.

データセット データセット。 ・LLAMA 2をベースに 500Bトークンのデータセットで訓練 ・データセットは、多くの議論とコードとコードのスニペットと自然言語でのQAを含んでいる → Stack overflow?? ・データのトークナイザーは BPE(Byte-Pair Encoding)を使っている(LLAMA, LLAMA 2と同様) 以下3種類の学習とデータに関してそれぞれ詳しく記載 - Infilling - Long context fine-tuning - Instruction fine-tuning ©︎MATSUO INSTITUTE, INC. 11

12.
[beta]
補足:BPE (Byte-Pair Encoding)
https://note.com/npaka/n/nb08941a36c8b#530Go より引用
3-1. BPE( Byte-Pair Encoding)
「BPE」(Byte-Pair Encoding)は、はじめに「単語によるトークン化」を行ってから、「各単語の頻度のカウント」を行います。
その結果、次のような (単語 , 単語の頻度) があるとします。
('hug', 10), ('pug', 5), ('pun', 12), ('bun', 4), ('hugs', 5)
基本語彙は ['b', 'g', 'h', 'n', 'p', 's', 'u'] であり、すべての単語をまず文字ごとに分割します。
('h' 'u' 'g', 10), ('p' 'u' 'g', 5), ('p' 'u' 'n', 12), ('b' 'u' 'n', 4), ('h' 'u' 'g' 's', 5)
この中から、最も頻度の高いペアを選びます。最も頻度が高いのは 'ug'(10+5+5=20回)なので、トークン化機能が最初に学習するマージ
ルールは、'ug' を語彙に追加することになります。
('h' 'ug', 10), ('p' 'ug', 5), ('p' 'u' 'n', 12), ('b' 'u' 'n', 4), ('h' 'ug' 's', 5)
次に頻度の高いペアは 'un'(16回)なので、'un' を語彙に追加します。次に頻度の高いペアは'hug'('h' + 'ug' : 15回)なので、'hug' を語彙
に追加します。
この段階で、語彙は ['b', 'g', 'h', 'n', 'p', 's', 'u', 'ug', 'un', 'hug'] になり、コーパスは次のように表現されます。
('hug', 10), ('p' 'ug', 5), ('p' 'un', 12), ('b' 'un', 4), ('hug' 's', 5)
トークン化機能は、このように学習したルールを、新しい単語に適用することができます。例えば、'bug' は ['b', 'ug'] としてトークン化さ
れますが、mug は ['<unk>', 'ug'] としてトークン化されます。これは、一般的な文字よりも、絵文字のような特殊文字で発生します。
語彙数(基本語彙数+マージ数)はハイパーパラメータです。例えば、「GPT」は478文字をベースにしているので、語彙数は40,478とな
り、40,000回のマージでトークナイザーの学習を止めることになります。

©︎MATSUO INSTITUTE, INC.

12

13.

Infilling(穴埋め) ・Code infillingは、周囲の文脈からプログラムの欠けている部分を予測するタスク(穴埋め) ・コードの補完を実現。IDE(コード開発の統合開発環境)に使う想定 ・ドキュメンテーション(Docstringかける) ・Code LLAMA / Code LLAMA - INSTRUCTの7Bと13Bのみ学習している理由はやっぱり書いてない ©︎MATSUO INSTITUTE, INC. 13

14.

Long Context Fine Tuning(LCFT) ・長文読解のためのファインチューニング(と理解しています) ・残念ながら数式が出てきてしまいました。全然分からないのでChatGPTに教えてもらいました ©︎MATSUO INSTITUTE, INC. 14

15.

トランスフォーマーの位置エンコーディング ChatGPTに教えてもらいました。さすが自分のことだけあってよく知っています ChatGPTの回答 Attention Is All You Needより引用 ©︎MATSUO INSTITUTE, INC. 15

16.

ロータリー位置エンコーディング ChatGPTの回答 ©︎MATSUO INSTITUTE, INC. 16

17.

先生…回転行列が分からないです… ChatGPT + Advanced Data Anaytics(旧Code Interpreter)に教えてもらいました ©︎MATSUO INSTITUTE, INC. 17

18.

Instruction fine-tuning 3つの種類のデータで訓練している。使用しているプロンプト例は論文の後ろの方に載っています。興味ある方はみてみると面白いかも ・Proprietary dataset LLAMA2に使ったものと同じ。RLHFのための数千のSupervised Fine-Tuning例と数百万のRejection Sampling例を使っている(詳しくは、LLAMA2の論文参照ください)。 ・Self-instruct 大量の指示文と回答文が大量に必要。人手でつくるとものすごい大変。 そのため、CODE LLAMA 7B(自分自身)で作ったデータで学習している。手順は以下 1. 62,000のインタビュースタイルのプログラムの質問を CODE LLAMA2 7B※で作る 2. 重複を取り除いて 52,000の質問にする 3. (a) ユニットテストを CODE LLAMA7Bで生成 (b) 10のPythonの回答を生成 (c) 10の回答でユニットテストを走らせる。最初にテストをパスした回答をデータセットに加える ※ CODE LLAMA2 34Bを使ってないのはコスパ優先 ・Rehearsal コードデータセットと自然言語のデータセットを少量学習と書いてあるが、詳細と効果はよく分からない ©︎MATSUO INSTITUTE, INC. 18

19.

学習の詳細 以下2つについて学習の詳細(オプティマイザの選択やハイパラのパラメータ設定)が書いてある。 詳細は割愛。 ・Optimaization ・Long context fine-tuning ©︎MATSUO INSTITUTE, INC. 19

20.

結果・コード生成・評価 ベンチマーク結果が書かれている。使用しているベンチマークは以下。 ・Pythonの一般的なベンチマーク:HumanEval, MBPP, APPS ・その他(C++, Java, PHP, C#, TypeScript, Bash)のベンチマーク:MultiPL-E, ・計算能力のベンチマーク: GSM8K いたるところに結果が大量に羅列されている。一部を抜粋。 数字は凄いけどこの UNNATURALはリリースされ ていない。 理由もよくわからない(ベン チマークのためにやっただけ としか書いてない) ©︎MATSUO INSTITUTE, INC. 20

21.

結果・コード生成・評価 CODE Llamaとの比較がみたいが、何故か Llama 2 – Chatと比較 ©︎MATSUO INSTITUTE, INC. 21

22.

まとめ まとめとFuture workと所感 まとめ ・3つのモデル、3つの重みのモデルをつくった(冒頭の図) ・ファインチューニングの手法に関して説明した ・他のオープンなモデルより性能高い 所感 ・モデルの種類を3つ、モデルサイズ3つつくっているが、ベンチマークによっては差があったり、なか ったり、順位が逆転していたりと結果が大きく違う。知りたい比較もなかったりする。LLMの性能ベン チマークの難しさ(闇?)を感じた。W&Bみたいに色々なベンチマーク結果を平均して並べるのが分か りやすそう。 ・ビジネス視点だと、独自のモデルを学習して課題を解決することで価値が出ると差別化できて嬉しい が、手法と規模(コスト)と効果の関係をつかむのが論文だけでは難しい。どう試行錯誤するのが良い かも悩ましい。 ・実際に使ってみた感じは、ChatGPTとの差は大きいと感じたもののポテンシャルは感じた。半年たっ たら追いついていても不思議はない ©︎MATSUO INSTITUTE, INC.