🚀 StarCoder2-Instruct: コード生成のための完全透明かつ許容的な自己アライメント
完全に許容的で透明なパイプラインでトレーニングされた、最初の完全に自己アライメントされたコード生成用大規模言語モデルです。
🚀 クイックスタート
このモデルは、コード生成に特化した大規模言語モデルです。完全に自己アライメントされ、透明なパイプラインでトレーニングされています。以下に、モデルの基本情報を示します。
属性 |
详情 |
パイプラインタグ |
テキスト生成 |
ベースモデル |
bigcode/starcoder2-15b |
データセット |
bigcode/self-oss-instruct-sc2-exec-filter-50k |
ライセンス |
bigcode-openrail-m |
ライブラリ名 |
transformers |
タグ |
コード |
モデルの概要
StarCoder2-15B-Instruct-v0.1は、完全に自己アライメントされたコード生成用大規模言語モデルです。このオープンソースのパイプラインは、StarCoder2-15Bを使用して数千の命令応答ペアを生成し、それを使用してStarCoder-15B自体を微調整します。この過程では、人間によるアノテーションや、巨大で独自の大規模言語モデルからの蒸留データは使用されていません。

引用
@article{wei2024selfcodealign,
title={SelfCodeAlign: Self-Alignment for Code Generation},
author={Yuxiang Wei and Federico Cassano and Jiawei Liu and Yifeng Ding and Naman Jain and Zachary Mueller and Harm de Vries and Leandro von Werra and Arjun Guha and Lingming Zhang},
year={2024},
journal={arXiv preprint arXiv:2410.24198}
}
💻 使用例
基本的な使用法
このモデルは、コーディング関連の命令に対して単一ターンで応答するように設計されています。他のスタイルの命令では、応答の精度が低下する可能性があります。
以下は、transformersライブラリを使用してモデルを使用する例です。
import transformers
import torch
pipeline = transformers.pipeline(
model="bigcode/starcoder2-15b-instruct-v0.1",
task="text-generation",
torch_dtype=torch.bfloat16,
device_map="auto",
)
def respond(instruction: str, response_prefix: str) -> str:
messages = [{"role": "user", "content": instruction}]
prompt = pipeline.tokenizer.apply_chat_template(messages, tokenize=False)
prompt += response_prefix
teminators = [
pipeline.tokenizer.eos_token_id,
pipeline.tokenizer.convert_tokens_to_ids("###"),
]
result = pipeline(
prompt,
max_length=256,
num_return_sequences=1,
do_sample=False,
eos_token_id=teminators,
pad_token_id=pipeline.tokenizer.eos_token_id,
truncation=True,
)
response = response_prefix + result[0]["generated_text"][len(prompt) :].split("###")[0].rstrip()
return response
instruction = "Write a quicksort function in Python with type hints and a 'less_than' parameter for custom sorting criteria."
response_prefix = ""
print(respond(instruction, response_prefix))
以下は、期待される出力です。
Here's how you can implement a quicksort function in Python with type hints and a 'less_than' parameter for custom sorting criteria:
```python
from typing import TypeVar, Callable
T = TypeVar('T')
def quicksort(items: list[T], less_than: Callable[[T, T], bool] = lambda x, y: x < y) -> list[T]:
if len(items) <= 1:
return items
pivot = items[0]
less = [x for x in items[1:] if less_than(x, pivot)]
greater = [x for x in items[1:] if not less_than(x, pivot)]
return quicksort(less, less_than) + [pivot] + quicksort(greater, less_than)
```
バイアス、リスク、および制限
StarCoder2-15B-Instruct-v0.1は、主に実行を通じて検証できるPythonコード生成タスクに対して微調整されています。このため、特定のバイアスや制限が生じる可能性があります。たとえば、モデルは出力形式を指定する命令に厳密に従わない場合があります。このような場合、応答プレフィックスまたはワンショット例を提供すると、モデルの出力を誘導するのに役立ちます。また、モデルは他のプログラミング言語やドメイン外のコーディングタスクに対して制限がある可能性があります。
このモデルは、ベースのStarCoder2-15Bモデルからバイアス、リスク、および制限を引き継いでいます。詳細については、StarCoder2-15Bモデルカードを参照してください。
評価


🔧 技術詳細
ハイパーパラメータ
- オプティマイザ: Adafactor
- 学習率: 1e-5
- エポック数: 4
- バッチサイズ: 64
- ウォームアップ率: 0.05
- スケジューラ: Linear
- シーケンス長: 1280
- ドロップアウト: 適用なし
ハードウェア
1 x NVIDIA A100 80GB
リソース
完全なデータパイプライン
データセット生成パイプラインにはいくつかのステップがあります。パイプラインの各ステップに対して中間データセットを提供しています。
- The Stack v1からフィルタリングされた元のシードデータセット: https://huggingface.co/datasets/bigcode/python-stack-v1-functions-filtered
- StarCoder2-15Bを判定器として使用して、不適切なドキュメント文字列を持つアイテムを削除したシードデータセット: https://huggingface.co/datasets/bigcode/python-stack-v1-functions-filtered-sc2
- シード -> 概念: https://huggingface.co/datasets/bigcode/self-oss-instruct-sc2-concepts
- 概念 -> 命令: https://huggingface.co/datasets/bigcode/self-oss-instruct-sc2-instructions
- 命令 -> 応答: https://huggingface.co/datasets/bigcode/self-oss-instruct-sc2-responses-unfiltered
- 実行によってフィルタリングされた応答: https://huggingface.co/datasets/bigcode/self-oss-instruct-sc2-exec-filter-500k-raw
- 重複排除によってフィルタリングされた実行済み応答 (最終データセット): https://huggingface.co/datasets/bigcode/self-oss-instruct-sc2-exec-filter-50k