🚀 Diff-Codegen-350M v2 モデルカード
Diff-Codegen-350M v2は、コード生成用の差分モデルです。このモデルは、CarperAIによって公開されています。差分モデルは、ユニファイド差分形式でフォーマットされたテキストの編集内容を学習した自己回帰型言語モデルです。これらの差分モデルは、テキストの一部と目的の変更内容の説明を与えると、その説明に合ったテキストの変更を提案することができ、差分形式で追加、変更、削除された行をマークします。
通常のコード生成モデルの少事例プロンプトと比較して、差分モデルは既存のコード、特に長いコードに対する賢い変更を提案するために特化しています。また、自然言語のテキスト説明(コミットメッセージの形式で提供される)に従って変更を行う必要がある場合にも有効です。
このモデルは、Salesforceのcodegen-350m-monoをファインチューニングしたもので、GitHubから収集した大量のコミットデータセットで学習されています。
Diff-Codegen-350M v2は実験的な研究成果物であり、そのように扱われるべきです。我々は、これらの結果とこのモデルを公開することで、特にコード用の言語モデルに関心のある研究者たちに役立つことを期待しています。
モデルにプロンプトを与える簡単な例が含まれたColabノートブックはこちらにあります。
✨ 主な機能
- コード生成用の差分モデルで、既存のコードに対する賢い変更を提案することができます。
- Salesforceのcodegen-350m-monoをファインチューニングしたもので、GitHubから収集した大量のコミットデータセットで学習されています。
📦 インストール
READMEにインストール手順が記載されていないため、このセクションは省略されます。
💻 使用例
READMEに使用例のコードが記載されていないため、このセクションは省略されます。
📚 ドキュメント
学習データ
このモデルは、Salesforceのcodegen-350m-monoをファインチューニングしたものです。この言語モデルは、まずThe Pileという800GBの多様なウェブコーパスからなるデータセットで事前学習されました。The Pileのデータシートと論文はそれぞれこちらとこちらにあります。その後、モデルは複数の言語の大量のコードデータセットでファインチューニングされ、最後にPythonコードデータセットでファインチューニングされました。これらのデータセットの詳細を含むCodegenの論文はこちらにあります。
このファインチューニング用のデータセットは、Google BigQuery Public Datasetを使用してGitHubから取得したコミットから構成されています。これは、多数のオープンソースGitHubリポジトリの最新の公開スナップショットです。我々はこのデータセットを取得し、BigQueryを使用してリポジトリのスター数でフィルタリングし、100未満のスターを持つリポジトリを除外しました。さらに、クエリをオープンソースの非コピーレフトライセンス(例:MIT、Apacheなど)を持つリポジトリと、コミットメッセージが10文字以上のコミットに限定しました。また、Python、HTML、Bashスクリプト、SQL、C++など、22の人気のあるプログラミング、スクリプト、マークアップ言語のリストに限定しました。これにより、フィルタリング後のデータセットは1900万件のコミットになりました。
我々の差分モデルは、GitHubリポジトリの多数のプログラミング言語から構成される大規模なデータセットであるBigQueryのコミットデータセットで学習されました。我々は、リポジトリのスター数(>100スター)、ライセンス(オープンソースの非コピーレフトライセンスのコードのみ含む)、ファイルの長さ(2048トークン以上のファイルは除外)でデータセットをフィルタリングしました。
モデルは、Huggingface Codegenトークナイザを使用して学習されました。
学習詳細
このモデルは、Stability AIが提供する64台のA100 GPUで、1エポックにつき10.8億トークンで学習されました。
各ファイルは、言語モデルへの入力として以下のようにフォーマットされました。
<NME> {FILE_NAME}
<BEF> {INPUT_FILE}
<MSG> {COMMIT_MESSAGE}
<DFF> {FILE_DIFF}
想定される用途と制限
このモデルはサイズが小さく、コードに限定されているため、コード以外のドメインに一般化したり、大量のコードに対して(成功した)推論を行うことは期待できません。このモデルは、コード生成システムのプロトタイピングや、純粋に実験目的で使用することを想定しています。このモデルは保証なしで提供されており、ライセンスが許可している場合でも、商用環境での使用は避けてください。
制限とバイアス
短いコンテキスト長の制限と、100未満のスターを持つすべてのリポジトリが除外されたことから、我々の差分モデルは、LeanやCoqなどの代表されていない言語での性能が低いことが予想されます。
このモデルの出力は、正しく安全なコードとして信頼されるべきではありません。このモデルは、セキュリティが重要な使命クリティカルな設定で使用しないでください。このモデルの出力を実行する場合は、できる限りgVisorなどのサンドボックス内で行うべきです。なぜなら、モデルがファイルを削除したり、HTTPリクエストを送信したり、その他の重大なセキュリティ脆弱性を含むコードを生成する可能性があるからです。
他の言語モデルと同様に、diff-codegenは幻覚や偏った、固定観念的な、または有毒な出力を生成しやすいです。このモデルから生成する際に、真実性のある出力が保証されるわけではありません。
評価結果
完全な評価結果については、我々のブログ記事を参照してください。
🔧 技術詳細
- モデルは、Salesforceのcodegen-350m-monoをファインチューニングしたものです。
- 学習データは、GitHubから収集した大量のコミットデータセットで、複数の言語のコードデータを含みます。
- モデルは、Huggingface Codegenトークナイザを使用して学習されました。
- 学習は、64台のA100 GPUで、1エポックにつき10.8億トークンで行われました。
📄 ライセンス
このモデルは、MITライセンスでライセンスされています。
謝辞
Honglu Fan、Harry Saini、Herbie Bradley、Reshinth Adithyan、およびJoel Lehmanの努力に感謝します!また、このモデルカードに対するフィードバックを提供してくれたNitarshan Rajkumarにも感謝します!