🚀 GPT-Neo-125M-Code-Clippy
新しいGitHub Wikiをご参照ください。ここでは、GitHub Copilotのオープンソース版を作成する際の取り組みについて詳細に記載されています。
🚀 クイックスタート
このセクションでは、GPT-Neo-125M-Code-Clippyの基本的な使い方を説明します。
✨ 主な機能
GPT-Neo-125M-Code-Clippyは、複数のプログラミング言語でのメソッドの自動補完に特化したモデルです。具体的には、以下のような機能を持っています。
- 因果言語モデリングを使用して、Code Clippy Dataデータセットで微調整されたGPT-Neo-125Mモデルです。
- 追加の空白文字に対応するために、GPT-Neoモデルとトークナイザーを修正しています。
- 自動的に新しいトークンを追加するスクリプトはこちらにあります。
📦 インストール
このモデルのトレーニングに使用されたスクリプトはこちらにあります。トレーニングを再現するには、以下のコマンドを使用できます。
./run_clm_streaming_flax.py \
--output_dir $HOME/gpt-neo-125M-code-clippy \
--model_name_or_path="flax-community/gpt-neo-125M-code-clippy" \
--dataset_name $HOME/gpt-code-clippy/data_processing/code_clippy.py \
--data_dir /home/shared/code_clippy_data \
--text_column_name="text" \
--do_train --do_eval \
--block_size="2048" \
--per_device_train_batch_size="8" \
--per_device_eval_batch_size="16" \
--preprocessing_num_workers="8" \
--learning_rate="1e-4" \
--max_steps 100000 \
--warmup_steps 2500 \
--decay_steps 25000 \
--adam_beta1="0.9" \
--adam_beta2="0.95" \
--weight_decay="0.1" \
--overwrite_output_dir \
--logging_steps="100" \
--eval_steps="500" \
--push_to_hub="False" \
--report_to="all" \
--dtype="bfloat16" \
--skip_memory_metrics="True" \
--save_steps="500" \
--save_total_limit 10 \
--gradient_accumulation_steps 16 \
--report_to="wandb" \
--run_name="125m_1e-4lr_1024bs" \
--max_eval_samples 2000 \
--save_optimizer true
💻 使用例
基本的な使用法
以下のコードは、このモデルを使用してテキスト生成を行う基本的な例です。
from transformers import AutoModelForCausalLM, AutoTokenizer, FlaxAutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("flax-community/gpt-neo-125M-code-clippy")
tokenizer = AutoTokenizer.from_pretrained("flax-community/gpt-neo-125M-code-clippy")
prompt = """def greet(name):
'''A function to greet user. Given a user name it should say hello'''
"""
input_ids = tokenizer(prompt, return_tensors='pt').input_ids.to(device)
start = input_ids.size(1)
out = model.generate(input_ids, do_sample=True, max_length=50, num_beams=2,
early_stopping=True, eos_token_id=tokenizer.eos_token_id, )
print(tokenizer.decode(out[0][start:]))
📚 ドキュメント
モデルの説明
GPT-Neo-125M-Code-Clippyは、重複を含むCode Clippy Dataデータセットで因果言語モデリングを使用して微調整されたGPT-Neo-125Mモデルです。このデータセットは、公開されているGithubリポジトリから収集されています(提供されたリンクに詳細情報があります)。このモデルは、複数のプログラミング言語でのメソッドの自動補完に特化しています。OpenAIのCodex論文で議論されているように、追加の空白文字に対応するために、GPT-Neoモデルとトークナイザーを修正しています。具体的には、以下のトークン ["\t\t", " ", " ", " "]
を追加し、これらはすべてインデントに関連しているため、これらのトークンの埋め込み層を、モデルにすでに存在する \t
トークンと同じ重みで初期化しています。これにより、モデルがこれらの空白文字をインデントと関連付けることを学習することが期待されます。自動的にこれを行うスクリプトはこちらにあります。
トレーニングデータ
Code Clippy Dataデータセットを使用してトレーニングされています。
トレーニング手順
このモデルのトレーニングに使用されたスクリプトはこちらにあります。トレーニングを再現するには、上記のスクリプトと以下のコマンドを使用できます。
制限事項とバイアス
このモデルは研究目的で使用することを想定しており、生成されたコードの品質については保証されていません。OpenAIの論文 "Evaluating Large Language Models Trained on Code" では、コードでトレーニングされた大規模言語モデルの影響について良い議論があります。したがって、その議論の一部をここに強調します。
- 過度な依存:このモデルは、正しいように見えるが必ずしも正しい解決策ではない解を生成する可能性があります。生成されたコードを適切に評価しないと、バグの導入やセキュリティホールの導入などの悪影響を引き起こす可能性があります。したがって、ユーザーはこの言語モデルの制限と潜在的な悪影響を認識することが重要です。
- 経済的および労働市場への影響:このような大規模なコードデータセットでトレーニングされた大規模言語モデルは、高品質なコードを生成する能力があり、ソフトウェア開発プロセスの一部を自動化する可能性があります。これはソフトウェア開発者に悪影響を与える可能性があります。しかし、論文で議論されているように、O*NET OnLine のソフトウェア開発者の概要レポートに示されているように、開発者はソフトウェアを書くだけではありません。
- セキュリティ上の影響:このモデルがトレーニングされたデータセットに対して、脆弱性やバグのあるコードのフィルタリングやチェックは行われていません。これは、データセットに悪意のあるコードや脆弱性を含むコードが含まれている可能性があることを意味します。したがって、このモデルは脆弱性のある、バグのある、または悪意のあるコードを生成する可能性があります。安全上重要なソフトウェアでは、これによりソフトウェアが不適切に動作し、ソフトウェアによっては深刻な結果を招く可能性があります。さらに、このモデルは、ランサムウェアやその他の攻撃を行うために意図的に悪意のあるコードを生成するために使用される可能性があります。
- 法的な影響:ライセンス付きのコードに対するフィルタリングは行われていません。これは、データセットに制限的なライセンスのコードが含まれている可能性があることを意味します。論文で議論されているように、公開されているGithubリポジトリは「公正使用」の範囲内に収まる場合があります。しかし、このようなライセンス付きの公開コードの使用例はこれまでほとんどなく、またはまったくない状況です。したがって、このモデルで生成されたコードは、GPL-3.0などのトレーニングデータのソフトウェアに準拠したライセンス条項に従う必要がある可能性があります。このデータセットでトレーニングされた言語モデルを使用することの法的な影響は不明です。
- バイアス:このモデルがトレーニングされたデータセットで最も多く表されているプログラミング言語はJavascriptとPythonです。したがって、CやC++などの他の人気のある言語はあまり表されておらず、これらの言語に対するモデルの性能は比較的低くなります。さらに、このデータセットは公開リポジトリのみを含んでいるため、このモデルはプライベート開発者によって書かれたコードを代表したコードを生成しない可能性があります。潜在的な人種差別的、不快な、または不適切なコンテンツに対するフィルタリングは行われていません。したがって、このモデルは生成時にそのようなバイアスを反映する可能性があります。
GPT-Neo-125M-Code-ClippyはGPT-Neoから微調整されており、そのバイアスと制限事項を引き継いでいる可能性があります。詳細については、GPT-Neoモデルカードを参照してください。
🔧 技術詳細
このモデルは、因果言語モデリングを使用してCode Clippy Dataデータセットで微調整されたGPT-Neo-125Mモデルです。追加の空白文字に対応するために、GPT-Neoモデルとトークナイザーを修正しています。
📄 ライセンス
READMEにはライセンス情報が記載されていません。