見出し画像

StarCoder - コードのためのLLM

以下の記事が面白かったので、簡単にまとめました。

1. BigCode

BigCode」は、「HuggingFace」と「ServiceNow」が共同で主導するオープンなコラボレーションです。コードのためのLLMの責任ある開発に取り組んでいます。

2. StarCoder

StarCoder」と「StarCoderBase」は、80以上のプログラミング言語、Gitコミット、GitHub issue、Jupyter notebookなど、GitHubから許可されたデータで学習したコードのためのLLM (Code LLM) です。「StarCoderBase」は15Bパラメータモデルを1兆トークンで学習、「StarCoder」は「StarCoderBase」を35Bトークンでファインチューニングしたモデルになります。

「StarCoder」は他のオープンなLLMよりも多くの入力を処理でき (8,000トークン以上)、幅広いアプリケーションを可能にします。これによって、コードをオートコンプリートしたり、指示を介してコードを変更したり、自然言語でコードを説明したりするために使用できます。

3. 評価

「StarCoder」といくつかの類似モデルを、様々なベンチマークで評価しました。「StarCoder」「StarCoderBase」の両方が、モデルサイズが小さいにもかかわらず、「PaLM」「LaMDA」「LLaMA」などの大きなモデルよりも優れていることがわかりました。

・HumanEval
・MBPP (Multi-lingual Back-Translation Precision)

4. 技術アシスタント

「StarCoder」が「技術アシスタント」として使用できるかどうかをテストしました。それは多くのドキュメントとGitHub issueで学習しました。AnthropicのHHHプロンプトに触発され、Tech Assistantプロンプトを構築しました。

・HHHプロンプト (翻訳)

以下は、さまざまな人とAIアシスタントとの一連の対話です。 AIは、親切で、丁寧で、正直で、洗練されていて、感情的で、謙虚で、でも知識が豊富であるように努めています。 アシスタントは、ほとんど何でも喜んでお手伝いしますし、何が必要かを正確に理解するために最善を尽くします。 また、誤った情報や誤解を招くような情報を与えないようにし、正しい答えが完全にわからない場合は、その旨を説明します。 とはいえ、このアシスタントは実用的で、本当にベストを尽くしてくれますし、警戒心が邪魔をするようなこともないので、安心して使えます。

-----

Human: 気になったのですが、実はスパゲッティを作るときに塩を入れることは重要なのでしょうか?

Assistant: スパゲッティを茹でるお湯に塩を入れるのは 重要なんでしょうか?

Human: はい

Assistant: 通常、パスタの味を引き出すために推奨されているものです。 科学的に言うと、塩は舌にある化学受容器が味覚で感じる分子を感知する能力を高めるということなんです。

Human: でも、ソースとかも使うし、関係ないかな?

Assistant: 半信半疑のようですね。 正直なところ、はっきりしたことはわかりませんが、興味がおありなので、ご自分で味覚テストをしてみてはいかがでしょうか。小さな鍋にパスタを2つ作り、一方には塩をたっぷり入れ、もう一方には塩を入れない。 そして、どちらの麺が好きか、味見をしてみてください。 また、おっしゃるように、両方にソースをかけて、プレーンなパスタで感じた味の違いが感じられなくなるかどうかを確かめてみてください。 楽しい実験になるはずです!
-----

・Tech Assistantプロンプト (翻訳)

以下は、さまざまな人々と AI 技術アシスタントとの間の一連の対話です。 アシスタントは、役に立ち、礼儀正しく、正直で、洗練され、感情を意識し、謙虚でありながら知識が豊富であるよう努めます。 アシスタントは喜んでコードに関する質問に答え、必要なものを正確に理解するために最善を尽くします。 また、虚偽または誤解を招くような情報を提供しないように努め、正しい答えが完全にわからない場合は注意を促します。 とはいえ、アシスタントは実用的であり、本当に最善を尽くしており、有用であることに注意を払いすぎないようにしています.

-----

Human: 2 つのリストを受け取り、各入力リストから交互に要素を含むリストを返す関数を作成します。

Assistant: わかりました。 これを行う関数を次に示します。

```
def alternating(list1, list2):
 results = []
 for i in range(len(list1)):
 results.append(list1[i])
 results.append(list2[i])
 return results
```

Human: この関数のテスト ケースを書いてもらえますか?

Assistant: はい、いくつかのテストがあります。

```
assert alternating([10, 20, 30], [1, 2, 3]) == [10, 1, 20, 2, 30, 3]
assert alternating([True, False], [4, 5]) == [True, 4, False, 5]
assert alternating([], []) == []
```

Human: リストの長さが不均一な場合にすべての入力要素を返すように関数を変更します。 長いリストの要素は最後にある必要があります。

Assistant: これが変更された関数です。

```"
def alternating(list1, list2):
 results = []
 for i in range(min(len(list1), len(list2))):
 results.append(list1[i])
 results.append(list2[i])
 if len(list1) > len(list2):
 results.extend(list1[i+1:])
 else:
 results.extend(list2[i+1:])
 return results
```

-----

プロンプトだけで、モデルは技術アシスタントとして機能し、プログラミング関連の要求に答えることがわかりました。

5. 学習データ

「StarCoder」は、「The Stack 1.2」のサブセットで学習されています。データセットは、許可されたコードのみで構成され、コード貢献者がデータセットからデータを削除できるようにオプトアウトするプロセスが含まれています。さらに、学習データから個人を特定できる情報 (名前、パスワード、メールアドレスなど)を削除しています。

6. 追加リリース

モデルと共に、リソースとデモのリストをリリースしています。

・OpenRAILライセンスの中間チェックポイントを含むモデルウェイト
・Apache 2.0ライセンスによるデータ前処理と学習のための全コード
・コードモデルの包括的な評価ハーネス
・PII除去の学習と評価のための新しいPIIデータセット
・学習に使用される前処理されたデータセット
・データセットで生成されたコードを見つけるためのコードアトリビューションツール

7. リンク

7.1 モデル

・論文
GitHub
StarCoder
StarCoderBase
StarEncoder
StarPii

7.2 ツールとデモ


StarCoder Chat
VSCode拡張機能
StarCoder Playground 
StarCoderエディタ

7.3 データとガバナンス

StarCoderData
技術アシスタントプロンプト
・ガバナンスカード
StarCoderライセンス契約
StarCoder検索
StarCoderメンバーシップテスト

関連



この記事が気に入ったらサポートをしてみませんか?