はじめに
業務に生成AIを取り入れることが増えている昨今、あることを私は考えました。
言語によって生成AIの精度って変わるんじゃないか? トークン使用量も変わってくるのではないか、と。
そこで、こちらについて調査してみることにしました。
なぜこんなことを考えたか
私は業務のほとんどをphpで開発をしてきました。最近は趣味でgo言語を学んでいます。goは他言語に比べ、構文が非常にシンプルです。しかし、phpの場合は書き方が多くあり、コードリーディングをするだけでも相当の労力を伴います。
人間がこれだけ苦しいんだから、AIも苦しいのでは?と考えたのが背景です。
参考にした情報
こういうことをおそらく皆さんも考えることはあるだろうと思います。
そこで、最近見つけたgithubのリポジトリが参考になる気がしたので、こちらでご紹介いたします。
この調査の制限事項
完全にこちらが正しいと言えない理由としては下記です。
-
測定対象が少ない
→ 4つのタスク(素数計算、REST API、JSONパーサ、単語頻度)のみ -
モデル依存
→ パープレキシティはQwen2.5-Coder-3Bでの結果。別モデルなら異なる可能性あり -
OpenAIのtiktokenに依存
→ 他のAIサービス(Claude、Gemini等)を使う場合、
トークン数が大きく異なる可能性あり
→ tiktokenのバージョンが更新されると結果も変わる -
学術的ではない
→ 個人プロジェクトのため、完全な正確性は保証されません
ただし、言語による傾向を知るには十分な参考値になると考えます。
用語の説明
このリポジトリを読み進めるに当たって、最低限言葉を理解しておかないと難しいなと思ったので、私が読んでこういうことなんだろうと思ったのものをここに説明しておきます。
パープレキシティ
定義:
AIが「前後の文脈を踏まえて、次のトークン(コードの一部)を予測する難しさ」を数値化したもの。
計算の考え方:
- AIに「ここまでのコード」を見せる
- 「次のトークンは何か」と予測させる
- AIが予測した確率を記録
- すべてのトークンについてこれを繰り返す
- 全体の幾何平均を計算
この最終的に出された数値がパープレキシティです。
パープレキシティが高ければ、AI生成の精度が低く、修正が必要になります。その結果、消費するコストも増えます。
逆に低ければ、精度は高く、修正することが減ります。
トークン
念の為に。
定義:
テキストを分割した最小単位です。
1トークン = 4文字程度なんて言われたりもします。
例えば
Hello World ← 2トークン
This is a pen ← 4トークン
こんにちは ← 3 ~ 4トークン
みたいな感じです。
ちなみにこのトークンの数値は必ずこうなるってわけではないです。
トークンを計算するトークナイザーってものがありまして、それによって出力される答えは異なります。
このリポジトリではopenAIのトークナイザーを使用していますが、他のトークナイザーを使えば結果が変わるかもしれません。
調査結果
これはリポジトリから引用したものです。
繰り返しになりますが。この比較が絶対的なものだとは言い切れません。
参考程度に。
トークン数による比較
| 順位 | 言語 | トークン数 | 相対的コスト |
|---|---|---|---|
| 1位 | TypeScript | 1,120 | 1.00x |
| 2位 | Python | 1,121 | 1.00x |
| 3位 | Clojure | 1,178 | 1.05x |
| 4位 | Haskell | 1,396 | 1.25x |
| 5位 | Go | 1,547 | 1.38x |
| 6位 | Rust | 1,743 | 1.56x |
| 7位 | Zig | 2,269 | 2.03x |
TypeScriptが一番トークン数少ないというデータが出たみたいです。
次点でPythonですね。
最下位はzig。
合計ビットによる比較
| 順位 | 言語 | 合計ビット数 | 相対的難度 |
|---|---|---|---|
| 1位 | Go | 674.6 | 1.00x |
| 2位 | Python | 710.6 | 1.05x |
| 3位 | TypeScript | 764.6 | 1.13x |
| 4位 | Rust | 793.4 | 1.18x |
| 5位 | Clojure | 938.7 | 1.39x |
| 6位 | Haskell | 1,130.6 | 1.68x |
| 7位 | Zig | 1,284.6 | 1.90x |
合計ビットはgo言語が一番少ないですね。
その後にPython TypeScriptと並ぶようです。
ここでも最下位はZig
個人的な見解。
go言語書いていて思いますが、別に記述量って他言語に比べて少ないわけではない。
しかし、シンプルで読みやすい。
そう考えるのはAIも同じなのかもしれません。
個人的にはこれのphpバージョンも欲しいな。
仮説はあっていたのか?
冒頭で「Go はシンプルだからAIも楽では?」と仮説を立てました。
結果:そうとも言えるが断定はできない。
冒頭らへんでも言いましたが、
- トークナイザー
- モデル依存
- 測定対象
これらによって結果は変わるかもしれません。
今回はこういう仮説を立てました。
なんか似たようなことを考えて調査してる人がいたよってお話です。
ただ、やはりシンプルな言語は精度に影響を与えてる可能性はあると考えています。
AIといっても人間を模した知能ですからね。
人間にとって読みやすく理解しやすいコードは、
AIにとっても予測しやすいということなのかもしれません。