🚀 CodeLlama-7B-KStackモデル
このモデルは、ルールベースのフィルタリングを施したKStackデータセットでファインチューニングされたCodeLlama-7bモデルのリポジトリです。Hugging Face Transformers形式で提供されています。KStackは、許容的なライセンスのKotlinコードの最大のコレクションであり、このモデルはKotlinコードでより良く動作するようにファインチューニングされています。
🚀 クイックスタート
モデルの使用方法
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = 'JetBrains/CodeLlama-7B-KStack'
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name).to('cuda')
input_text = """\
This function takes an integer n and returns factorial of a number:
fun factorial(n: Int): Int {\
"""
input_ids = tokenizer.encode(
input_text, return_tensors='pt'
).to('cuda')
output = model.generate(
input_ids, max_length=60, num_return_sequences=1,
pad_token_id=tokenizer.eos_token_id,
)
generated_text = tokenizer.decode(output[0], skip_special_tokens=True)
print(generated_text)
ベースモデルと同様に、FIMを使用することができます。これを行うには、以下の形式を使用する必要があります。
'<PRE> ' + prefix + ' <SUF> ' + suffix + ' <MID>'
✨ 主な機能
- ルールベースのフィルタリングを施したKStackデータセットでファインチューニングされているため、Kotlinコードでの性能が向上しています。
- ベースモデルと同様にFIMを使用することができます。
📦 インストール
このモデルを使用するには、transformers
ライブラリが必要です。以下のコマンドでインストールできます。
pip install transformers
💻 使用例
基本的な使用法
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = 'JetBrains/CodeLlama-7B-KStack'
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name).to('cuda')
input_text = """\
This function takes an integer n and returns factorial of a number:
fun factorial(n: Int): Int {\
"""
input_ids = tokenizer.encode(
input_text, return_tensors='pt'
).to('cuda')
output = model.generate(
input_ids, max_length=60, num_return_sequences=1,
pad_token_id=tokenizer.eos_token_id,
)
generated_text = tokenizer.decode(output[0], skip_special_tokens=True)
print(generated_text)
高度な使用法
FIMを使用する場合の例です。
prefix = "This is a prefix"
suffix = "This is a suffix"
input_text = '<PRE> ' + prefix + ' <SUF> ' + suffix + ' <MID>'
input_ids = tokenizer.encode(
input_text, return_tensors='pt'
).to('cuda')
output = model.generate(
input_ids, max_length=60, num_return_sequences=1,
pad_token_id=tokenizer.eos_token_id,
)
generated_text = tokenizer.decode(output[0], skip_special_tokens=True)
print(generated_text)
🔧 技術詳細
トレーニングの設定
このモデルは、1台のA100 GPUで以下のハイパーパラメータを使用してトレーニングされました。
ハイパーパラメータ |
値 |
warmup |
5% |
max_lr |
1e-6 |
num_epochs |
1 |
attention_dropout |
0.1 |
scheduler |
cosine |
total_batch_size |
128 (~65Kトークン/ステップ) |
num_epochs |
1 |
ファインチューニングの詳細については、技術レポート(近日公開!)で確認できます。
ファインチューニングデータ
モデルのチューニングには、KStackデータセットを使用しました。これは、許容的なライセンスのKotlinコードの最大のコレクションです。データセットの品質を向上させ、宿題の課題などの外れ値を除外するために、以下のルールに従ってデータセットのエントリをフィルタリングしました。
- 低人気のリポジトリ(スターとフォークの合計が6未満)に属するファイルを除外します。
- 次に、Kotlinファイルが5つ未満のリポジトリに属するファイルを除外します。
- 最後に、20 SLOC未満のファイルを削除します。
残りのデータセットエントリの内容は、以下のルールに従ってクリーニングしました。
- すべての非ASCIIエントリを削除します。
- すべてのパッケージ行(package kotlinx.coroutines.channels など)を削除します。
- インポート行の半分を削除します。
インポートの半分を削除したのは、モデルが不必要なライブラリをインポートしようとする潜在的な幻覚を回避するためです。また、パッケージを削除したのは、この情報はプロジェクトレベルでのみ有用であり、学習プロセス中に追加のノイズを引き起こす可能性があるためです。
評価
評価には、Kotlin HumanEvalデータセットを使用しました。このデータセットには、HumanEvalのすべての161のタスクが人間の専門家によってKotlinに翻訳されています。結果を得るために必要な前処理の詳細(実行コードを含む)は、データセットのページで確認できます。
以下は、評価結果です。
モデル名 |
Kotlin HumanEval合格率 |
CodeLlama-7B |
26.09 |
CodeLlama-7B-KStack |
29.19 |
📄 ライセンス
このモデルは、Apache-2.0ライセンスの下で提供されています。
❗ 注意事項
CodeLlama-7B-KStackは新しい技術であり、使用にはリスクが伴います。これまでに行われたテストは、すべてのシナリオをカバーしていない、またはカバーすることができない可能性があります。これらの理由から、すべてのLLMと同様に、CodeLlama-7B-KStackの潜在的な出力を事前に予測することはできず、モデルは場合によっては、ユーザーのプロンプトに対して不正確または不快な応答を生成する可能性があります。モデルは特定のデータ形式(Kotlinタスク)でファインチューニングされており、この形式からの逸脱も、ユーザーのクエリに対して不正確または望ましくない応答を引き起こす可能性があります。したがって、CodeLlama-7B-KStackのアプリケーションをデプロイする前に、開発者はモデルの特定のアプリケーションに合わせた安全テストとチューニングを行う必要があります。