Slide 1

Slide 1 text

1 Goにおける ⽣成AIによるコード⽣成の ベンチマーク評価⼊⾨ どすこい GMOペパボ株式会社 EC事業部 プロダクトチーム 2025.09.29 @golang.tokyo #41

Slide 2

Slide 2 text

2 ⾃⼰紹介 EC事業部 プロダクトチーム どすこい Daisuke Takeda バックエンド開発が多いWebエンジニア Go歴は1年ですが、⼤好きです! 業務活⽤とは別に、AIやLLMに興味があり、 この領域で登壇もしてました。 (ICONIP2024, JASAI2024) X: @doskoi64 2024年 新卒⼊社

Slide 3

Slide 3 text

3 私たちは「⼈類のアウトプットを増やす」ことをミッションとし、 インターネットやテクノロジーの⼒で情報発信のハードルを下げる⽀援をしています。

Slide 4

Slide 4 text

4 AI使ったコーディングしてますか? 今⽇の話 4

Slide 5

Slide 5 text

5 AIのコード⽣成の精度どうですか? 今⽇の話 5 😎 🙂 🤔 😡

Slide 6

Slide 6 text

6 AIのコード⽣成の精度どうですか? 今⽇の話 6 😎 🙂 🤔 😡 ↑

Slide 7

Slide 7 text

7 ある⽇思いました... 今⽇の話 7 いろんな⾔語触ったけど、 Goはシンプルで好きかも。 AIのコード⽣成も きっと精度が⾼いんじゃ?

Slide 8

Slide 8 text

8 けど調べると... 今⽇の話 8 Qiwei Peng, Yekun Chai, and Xuhong Li, 2024, LREC-COLING 2024 | HumanEval-XL: An Execution-based Multilingual Code Generation Benchmark Across 23 Natural Languages and 12 Programming Languages Fig. 2, Performance of LLMs, including CodeT5+ (2B), CodeGen2 (3.7B, 16B), GPT-3.5, and GPT-4, on our proposed benchmark. 思ったより低い...

Slide 9

Slide 9 text

9 ● LLMのモデルごとの評価って具体的に何しているの? ● ここでの定量評価って、業務での開発でもどれくらい 同じことが⾔えるの? ● ⾔語ごとで評価の差ってどれくらい⼤きいの?その 差ってどういう意味なの? そもそも、コードの⽣成の評価って...? 今⽇の話

Slide 10

Slide 10 text

今回の話 ● AIのコード⽣成の定量評価について紹介します ● 簡単に試してみる様⼦をお伝えします ● 個⼈的な考察を紹介します これによって、AIによるコード⽣成の評価の話が、さらに 盛り上がったり、調べるきっかけになれるといいなぁ 今回のお話では... 10

Slide 11

Slide 11 text

11 業務や趣味開発などで試してみること で得られる定性評価&試⾏錯誤も、 とても重要です! 今回はお話ししませんが、重要なこと 今回の話 ジュニア/シニア問わず、皆さんが使ってみた⼿応え感や考え⽅を わいわい聞くことの⽅をむしろ僕は⼤事だと思っています!

Slide 12

Slide 12 text

⽣成AIによるコード⽣成の ベンチマークについて 12

Slide 13

Slide 13 text

⽣成AIによるコード⽣成のベンチマークについて 13 ● Open AIが2021年に公開した、コード⽣成の定量評価 のためのベンチマークのためのデータセット ○ LLMに⼊れるprompt, 実装するentry_point, 検証⽤test,... ● GitHub由来の解答を⽣成しないように、⼈間が⼿書き でコードを⽣成。⾔語理解、アルゴリズムなどコー ディング⾯接っぽい問題。Pythonのコード。 データセット: HumanEval Mark Chen, et.al. , Evaluating Large Language Models Trained on Code, 2021, https://arxiv.org/pdf/2107.03374, https://github.com/openai/human-eval

Slide 14

Slide 14 text

⽣成AIによるコード⽣成のベンチマークについて 14 ● HumanEvalは英語,Pythonのみ。複数⾔語でコード⽣ 成のベンチマークを⽐較したいというモチベーション ● 23の⾃然⾔語(without Japanese😇)と12のプログラミ ング⾔語(within Go😎)があります ○ 単純なコード⽣成能⼒というより、多⾔語間でのコード⽣成能⼒の⽐ 較のためのもの HumanEval-XL Qiwei Peng, Yekun Chai, and Xuhong Li, 2024, LREC-COLING 2024 | HumanEval-XL: An Execution-based Multilingual Code Generation Benchmark Across 23 Natural Languages and 12 Programming Languages, https://github.com/floatai/HumanEval-XL, https://huggingface.co/datasets/floatai/HumanEval-XL

Slide 15

Slide 15 text

⽣成AIによるコード⽣成のベンチマークについて 15 HumanEval-XL Qiwei Peng, Yekun Chai, and Xuhong Li, 2024, LREC-COLING 2024 | HumanEval-XL: An Execution-based Multilingual Code Generation Benchmark Across 23 Natural Languages and 12 Programming Languages, Fig 1, Illustration of data construction in four steps.

Slide 16

Slide 16 text

⽣成AIによるコード⽣成のベンチマークについて 16 ● 問題に対してk個のサンプルを⽣成して、少なくとも⼀ つのサンプルがtestをpassするコードがかける問題数の 全問題数に対する割合 ○ 実際はk << nのn個を⽣成して不偏推定量を使います。詳細な説明は ブログで! 評価⽅法: pass@k について Kulal, et.al, 2019 ,SPoC: Search‑Based Pseudocode to Code

Slide 17

Slide 17 text

⽣成AIによるコード⽣成のベンチマークについて 17 pass@1: ⼀回の試⾏で正しい正解を出⼒する能⼒の指標。最初の提案にどれ くらい信頼がおけるか、開発者がどれくらい⼿放しで開発できるかがわかる。 pass@100: 理論的な上限を探る指標。多数の不正解の中に埋もれていたとし ても、モデルが正解を⽣成する絶対的な能⼒を持っているかを評価します。 pass@10, pass@5: 開発者が選択肢を確認したり、対話的にコードを⽣成し ていくシナリオのものです。多様なコード⽣成をしつつ、正しいコードが⽣成 できるかの指標 評価⽅法: pass@k について Qiwei Peng, Yekun Chai, and Xuhong Li, 2024, LREC-COLING 2024 | HumanEval-XL: An Execution-based Multilingual Code Generation Benchmark Across 23 Natural Languages and 12 Programming Languages, Fig 1, Illustration of data construction in four steps.

Slide 18

Slide 18 text

18 HumanEval-XLを 実際みて触ってみる

Slide 19

Slide 19 text

HumanEval-XLを実際みて触ってみる 19 Hugging faceからデータを取得 https://huggingface.co/

Slide 20

Slide 20 text

HumanEval-XLを実際みて触ってみる 20 jsonでこのようなデータがもらえる

Slide 21

Slide 21 text

HumanEval-XLを実際みて触ってみる 21 promptはこんな感じ

Slide 22

Slide 22 text

HumanEval-XLを実際みて触ってみる 22 問題はこんな感じ ● ⼝座の残⾼を追跡し、途中でマイナスになるかを判定。 ● 整数リストの合計と積を返す。空なら (0,1)。 ● リストからユニークな要素を取り出し、昇順にソート。 ● 整数リスト内に、和がゼロになるペアがあるか判定。 ● ⽂字列をMD5ハッシュに変換。空なら None。 ● ⼆つの整数 a, b の間の偶数を昇順で返す。 簡単な問題、⾼難易度の問題がある!

Slide 23

Slide 23 text

HumanEval-XLを実際みて触ってみる 23 ⾃分で試してみる: 銀⾏⼝座残⾼管理 問題 Claude Code Sonnet 4.1(2025-0929)で試しました 問題 預⾦‧引き出し操作のリストが与えられ、ゼロ残⾼から開始して、任意の時点 で残⾼がゼロを下回るかどうかを検出する関数を実装します。下回った時点で Trueを返し、そうでなければFalseを返します。 例: - `below_zero([1, 2, 3])` → False(残⾼: 0→1→3→6) - `below_zero([1, 2, -4, 5])` → True(残⾼: 0→1→3→-1で負になる)

Slide 24

Slide 24 text

HumanEval-XLを実際みて触ってみる 24 ⾃分で試してみる: 銀⾏⼝座残⾼管理 ⽣成させてみた

Slide 25

Slide 25 text

HumanEval-XLを実際みて触ってみる 25 ⾃分で試してみる: 銀⾏⼝座残⾼管理 テストコードはこれ

Slide 26

Slide 26 text

HumanEval-XLを実際みて触ってみる 26 ⾃分で試してみる: 銀⾏⼝座残⾼管理 結果...! 😎

Slide 27

Slide 27 text

HumanEval-XLを実際みて触ってみる 27 ⾃分で試してみる: 範囲内偶数⽣成 問題 Claude Code Sonnet 4.1(2025-0929)で試しました 問題 ⼆つの正の整数aとbが与えられたとき、aとbの間の偶数の桁を昇順で返す関 数を実装します。 例: - `generate_integers(2, 8)` → [2, 4, 6, 8] - `generate_integers(8, 2)` → [2, 4, 6, 8] - `generate_integers(10, 14)` → []

Slide 28

Slide 28 text

HumanEval-XLを実際みて触ってみる 28 ⾃分で試してみる: 範囲内偶数⽣成 ⽣成させてみた

Slide 29

Slide 29 text

HumanEval-XLを実際みて触ってみる 29 ⾃分で試してみる: 範囲内偶数⽣成 結果...! 😡

Slide 30

Slide 30 text

HumanEval-XLを実際みて触ってみる 30 ⾃分で試してみる: 範囲内偶数⽣成 修正が必要だった

Slide 31

Slide 31 text

HumanEval-XLを実際みて触ってみる 31 ● 実際はいちいちClaude Codeに⼊⼒するのではなく、 ⾃動でコード⽣成、テスト検証、結果記録までのパイ プラインをつくってやっています! ● ですが、何がテストされていて、どういう検証がされ ているか調べるのはおもしろいので、ぜひみてみてく ださい! ぜひ実際にみてみてください

Slide 32

Slide 32 text

32 他⾔語と⽐較して Goにおけるベンチマークの スコアが低い理由を考察してみる

Slide 33

Slide 33 text

なんでGoのコード⽣成のベンチマークのスコアが低いんだろう? 33 注意: 実験したわけではなく、調べて出てきた話のうち、僕があるなぁと思った話の部分です 静的型付けと冗長性 型付け言語において整形式なコードを生成することに苦労し、生成されたコードのコンパイルエラーの大部分が 型エラーに起因する。LLMにとって、あるタスクを達成するためにより長いトークンを生成する必要があるというこ とは、統計的に各ステップでエラーを挿入する確率が高まる。 要はシンプルさが仇となる可能性→他の言語の生成 /正解例と比較してみる! テストの性質 HumanEvalは、徹頭徹尾Pythonのために設計されたベンチマークである 。小規模なアルゴリズムパズルであ る。Goの強み、API、CLI、DevOps関連ツール、速度とかは計れてない。 →こういう他の側面でのベンチマークはさらに調査が必要そう。 試す方法がわかったので、仮説を立てて、実際に試して確かめてみよう! 時間があれば話す

Slide 34

Slide 34 text

34 テックブログで今週中にまとめます! #golangtokyo #golangjp で共有する ので、ぜひみてください! 実際触ってみたくなりましたね! 最後に

Slide 35

Slide 35 text

35 Let’s AI Let’s Go