Skip to content

Commit

Permalink
[feat] Draft Nov VSCode Meetup slide
Browse files Browse the repository at this point in the history
  • Loading branch information
ftnext committed Nov 8, 2024
1 parent 50695c3 commit 3f1f055
Showing 1 changed file with 192 additions and 3 deletions.
195 changes: 192 additions & 3 deletions source/vscodejp-nov/copilot-as-large-language-model.rst
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,14 @@ LLMの知識で使い倒すCopilot
:Event: VS Code Meetup #32 LT
:Presented: 2024/11/08 nikkie

みなさーん!Copilot、使ってますかー??
📣 みなさーん! GitHub Copilot、使ってますかー??
======================================================================

私「いかにCopilotにコードを書かせるか、それだけを考えている」
------------------------------------------------------------
----------------------------------------------------------------------

* 自然言語処理の知識を使って、Copilotにとにかく働いてもらおう
* LLMについての知識を使って、Copilotにとにかく働いてもらおう
* 本LTのスコープは `Inline suggestions <https://code.visualstudio.com/docs/copilot/ai-powered-suggestions#_inline-suggestions>`__ です

お前、誰よ(自己紹介)
======================================================================
Expand All @@ -23,9 +24,165 @@ LLMの知識で使い倒すCopilot
仕事でもCopilot!
--------------------------------------------------

* 機械学習エンジニア・ **自然言語処理** (`We're hiring! <https://hrmos.co/pages/uzabase/jobs/1829077236709650481>`__)
* Copilot、お世話になっています!(`経済情報領域におけるChatGPT・LLM活用推進プロジェクト <https://www.uzabase.com/jp/info/20230428-play-engineering/>`__)

.. image:: ../_static/uzabase-white-logo.png

プライベートでもCopilot!
--------------------------------------------------

* :fab:`github` `@ftnext <https://github.com/ftnext>`__
* `Uberi/speech_recognition <https://github.com/Uberi/speech_recognition>`__ 8.4k⭐️ **メンテナ** (無料提供によるサポート、ありがとうございます)
* 他にこのスライドで使っている `sphinx-new-tab-link <https://pypi.org/project/sphinx-new-tab-link/>`__ など

Copilotが精度よく続きを書くとき(※私の感覚)
======================================================================

* *再掲:Inline suggestionsのお話*
* 空に近いファイルではなく、**ある程度書かれている** ファイル
* 仮説:Copilotが参考にできるコードが多いとき

自然言語処理からの裏付け
--------------------------------------------------

* 再掲 *参考にできるコードが多いとき、Copilotは精度よく生成*
* 実は、**例示が多い** とき、LLMは **精度が良くなる** と一般化できる
* キーワードは *few-shot*

GitHub Copilotの裏は、OpenAIのGPT
======================================================================

The first public version of Copilot was launched using Codex, an early version of OpenAI GPT-3, specifically fine-tuned for coding tasks.

`Bringing developer choice to Copilot with Anthropic’s Claude 3.5 Sonnet, Google’s Gemini 1.5 Pro, and OpenAI’s o1-preview <https://github.blog/news-insights/product-news/bringing-developer-choice-to-copilot/>`_

GitHub Copilotの裏は、OpenAIのGPT(承前)
--------------------------------------------------

we have updated the base model versions multiple times, using a range from GPT 3.5-turbo to GPT 4o and 4o-mini models

`Bringing developer choice to Copilot with Anthropic’s Claude 3.5 Sonnet, Google’s Gemini 1.5 Pro, and OpenAI’s o1-preview`_

ChatGPT(=GPT-3.5)はいきなり出てきたわけではない
------------------------------------------------------------

* `2018年 GPT <https://openai.com/index/language-unsupervised/>`__
* `2019年 GPT-2 <https://openai.com/index/better-language-models/>`__
* 2020年 GPT-3

GPT-3論文「Language Models are Few-Shot Learners」
------------------------------------------------------------

* 訳してみると「*言語モデルは少数の例示から学習する*」
* https://arxiv.org/abs/2005.14165

GPT-3のプロンプト
--------------------------------------------------

* 続きの生成を *促す*
* 自然言語で書けばよい

.. code-block::
:caption: GPT-3論文 Figure 2.1 より
Translate English to French:
cheese =>
GPT-3のここがすごい!
--------------------------------------------------

* **プロンプトを変えるだけ** で、1つのモデルで様々なタスクが解ける

* コード生成、翻訳、etc.etc.

* ※後の世代(ChatGPT以降)は、加えて会話形式で生成、かつ、有害なことを言わないように追加訓練をしています

few-shot プロンプト
--------------------------------------------------

* **例示** (shot) **をいくつも見せ** た上で続きの生成を促す

.. code-block::
:caption: GPT-3論文 Figure 2.1 より
Translate English to French:
sea otter => loutre de mer
peppermint => menthe poivrée
plush girafe => girafe peluche
cheese =>
パラメタ数が多いモデルほど、例を見せるほど正答率向上
------------------------------------------------------------

.. image:: ../_static/vscodejp-nov/2005.14165_figure12.png
:scale: 90%

GPT-3論文 Figure 1.2

脱線:なぜ例示すると性能が上がるかは、まだ説明できていないらしいです
--------------------------------------------------------------------------------

* 例を見せる=In-Context Learning (ICL) と呼ぶ(GPT-3論文より)
* なんと **例が間違っていても性能が上がる** ことが分かっている!(`Rethinking the Role of Demonstrations: What Makes In-Context Learning Work? <https://arxiv.org/abs/2202.12837>`__)
* ICLの説明はいくつか仮説が出てきているが、研究者間でまだ合意できていないらしい

GitHub Copilotとfew-shotプロンプト
======================================================================

* 参考にできるコードが多いとき、Copilotは精度よく生成する感覚を説明できていそう
* **すでに書いたコードがCopilotへの例示に** なっている!

よーし、テスト書くぞー!!(直近の例)
--------------------------------------------------

再掲 *いかにCopilotにコードを書かせるか*

.. code-block:: python
:caption: 例:pytestを使ったPythonのテストコードのイメージ
def test_ # 最初のテストを書くとき、Copilotはやや見当違いな生成
テストケースを1つか2つ書いた後
--------------------------------------------------

.. code-block:: python
def test_これこれのときはTrueを返す():
# actualを特定の引数の組で作るコード
assert actual is True
def test_それそれのときはFalseを返す():
# actualを上とは別の引数の組で作るコード
assert actual is False
def test_ # まだ網羅していない引数の組でコードを書いてくれる
# assertのsuggestionの精度もよい
ただし、例に引っ張られる
--------------------------------------------------

.. 『テスト駆動Python 第2版』 2.3
notの例 https://docs.pytest.org/en/stable/example/reportingdemo.html
.. code-block:: diff
:caption: pytestとしてより良い書き換え
-assert actual is True
+assert actual
-assert actual is False
+assert not actual
* IMO:いまのCopilotは **ライブラリのベストプラクティスを提示するわけではない** (だから人間に知識が必要)

まとめ🌯:LLMの知識で使い倒すCopilot
======================================================================

* GPT-3論文で示された **few-shotを意識** して、Copilotの Inline suggestions を使っています
* 例を見せるほどLLMは性能がよい -> いくらか書き進めたファイルだとTabで採用していくだけ
* 例を超える生成はまだできないので、ライブラリの **ベストプラクティスの知識は開発者に必要** と考えています

One more thing...
======================================================================

Expand All @@ -45,3 +202,35 @@ One more thing...

ご清聴ありがとうございました
--------------------------------------------------

References・Appendixが続きます

References
======================================================================

* 『`大規模言語モデル入門 <https://gihyo.jp/book/2023/978-4-297-13633-8>`__』4.2.1
* `Few-Shotプロンプティング(Prompt Engineering Guide) <https://www.promptingguide.ai/jp/techniques/fewshot>`__
* 『`テスト駆動Python 第2版 <https://www.shoeisha.co.jp/book/detail/9784798177458>`__』2.3

`GPT-3論文 <https://arxiv.org/abs/2005.14165>`__ Figure 2.1 (left)
--------------------------------------------------------------------------------

.. image:: ../_static/vscodejp-nov/2005.14165_figure21_left.png
:scale: 80%

Appendix
======================================================================

お前、誰よ(補足)
--------------------------------------------------

* `ブログ <https://nikkie-ftnext.hatenablog.com/>`__ 連続 **720** 日達成
* VS Code拡張 `TOKIMEKI Editing🌈 <https://marketplace.visualstudio.com/items?itemName=everlasting-diary.tokimeki-editing>`__

拙ブログ 関連記事
--------------------------------------------------

* `基本に立ち戻る:LLMのプロンプト <https://nikkie-ftnext.hatenablog.com/entry/llm-prompt-basics-202405-few-shot-learning-and-chain-of-thought>`__

EOF
===

0 comments on commit 3f1f055

Please sign in to comment.