🚀 CodeGen2 (CodeGen2-1B)
CodeGen2は、プログラム合成のための自己回帰型言語モデルファミリーです。元のCodeGenモデルファミリーとは異なり、インフィル機能を備え、より多くのプログラミング言語をサポートしています。
🚀 クイックスタート
CodeGen2は、プログラム合成のための自己回帰型言語モデルファミリーです。論文「CodeGen2: Lessons for Training LLMs on Programming and Natural Languages」で紹介されています。元のCodeGenモデルファミリー(CodeGen1)とは異なり、CodeGen2はインフィル機能を備え、より多くのプログラミング言語をサポートしています。
✨ 主な機能
- インフィル機能を備えています。
- より多くのプログラミング言語をサポートしています。
- 4つのモデルサイズ(
1B
、3.7B
、7B
、16B
)がリリースされています。
📦 インストール
このモデルは、AutoModelForCausalLM
機能を使用して簡単にロードできます。
💻 使用例
基本的な使用法
通常の因果サンプリングでは、コンテキストを指定してコードの補完を生成します。
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("Salesforce/codegen2-1B")
model = AutoModelForCausalLM.from_pretrained("Salesforce/codegen2-1B", trust_remote_code=True, revision="main")
text = "def hello_world():"
input_ids = tokenizer(text, return_tensors="pt").input_ids
generated_ids = model.generate(input_ids, max_length=128)
print(tokenizer.decode(generated_ids[0], skip_special_tokens=True))
高度な使用法
インフィルサンプリングでは、3つの新しい特殊トークンタイプを導入しています。
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("Salesforce/codegen2-1B")
model = AutoModelForCausalLM.from_pretrained("Salesforce/codegen2-1B", trust_remote_code=True, revision="main")
def format(prefix, suffix):
return prefix + "<mask_1>" + suffix + "<|endoftext|>" + "<sep>" + "<mask_1>"
prefix = "def hello_world():\n "
suffix = " return name"
text = format(prefix, suffix)
input_ids = tokenizer(text, return_tensors="pt").input_ids
generated_ids = model.generate(input_ids, max_length=128)
print(tokenizer.decode(generated_ids[0], skip_special_tokens=False)[len(text):])
📚 ドキュメント
モデルの説明
CodeGen2は、プログラム合成のための自己回帰型言語モデルファミリーです。このモデルは、以下の論文で紹介されています。
CodeGen2: Lessons for Training LLMs on Programming and Natural Languages by Erik Nijkamp*, Hiroaki Hayashi*, Caiming Xiong, Silvio Savarese, Yingbo Zhou.
元のCodeGenモデルファミリー(CodeGen1)とは異なり、CodeGen2はインフィル機能を備え、より多くのプログラミング言語をサポートしています。
学習データ
このチェックポイントは、the deduplicated version of the Stack dataset (v1.1)のより厳格な許容サブセットで学習されています。サポートされている言語(およびフレームワーク)は以下の通りです。
c
, c++
, c-sharp
, dart
, go
, java
, javascript
, kotlin
, lua
, php
, python
, ruby
, rust
, scala
, shell
, sql
, swift
, typescript
, vue
学習手順
CodeGen2は、交差エントロピー損失を使用して、逐次入力の尤度を最大化するように学習されています。入力シーケンスは、(1)因果言語モデリングと(2)ファイルレベルのスパン破損の2つの方法でフォーマットされます。詳細については、論文を参照してください。
評価結果
モデルは、HumanEvalとHumanEval-Infillで評価されています。詳細については、論文を参照してください。
想定される使用法と制限
自己回帰型言語モデルとして、CodeGen2は与えられた自然言語とプログラミング言語のテキストから特徴を抽出し、それらの尤度を計算することができます。ただし、このモデルは主にプログラム合成を目的としており、英語のプロンプトを与えて実行可能なコードを生成することが得意です。プロンプトはコメント文字列の形式である必要があります。また、部分的に生成されたコードを完成させることもできます。
倫理的な考慮事項
このリリースは、学術論文のサポートのための研究目的のみを対象としています。モデル、データセット、およびコードは、すべての下流の目的に特に設計または評価されていません。ユーザーは、このモデルをデプロイする前に、精度、安全性、および公平性に関する潜在的な懸念事項を評価し、対処することを強くお勧めします。ユーザーは、AIの一般的な制限事項を考慮し、適用される法律に準拠し、特にエラーや誤用が人々の生活、権利、または安全に重大な影響を与える可能性のある高リスクシナリオの場合には、ベストプラクティスを活用することをお勧めします。使用例に関する詳細なガイダンスについては、AUPおよびAI AUPを参照してください。
BibTeXエントリと引用情報
@article{Nijkamp2023codegen2,
title={CodeGen2: Lessons for Training LLMs on Programming and Natural Languages},
author={Nijkamp, Erik and Hayashi, Hiroaki and Xiong, Caiming and Savarese, Silvio and Zhou, Yingbo},
journal={arXiv preprint},
year={2023}
}
📄 ライセンス
このプロジェクトは、Apache-2.0ライセンスの下で提供されています。