見出し画像

60種類のLLM をベンチマーク

60種類のLLMに対して 20個の質問を投げて、その回答を比較するベンチマークモニターが公開されました。

これまでにもHellaSwagなどLLM向けベンチマークは存在してました。
しかし実際のワークフローでどれだけ性能が出るのかを感じるには少し抽象的すぎる部分も指摘されていました。基本的な推論力、指示に従う能力、創造性をテストするプロンプトを約60のモデルに尋ねるスクリプトを書くというアイデアを思いつきました。これらのモデルは推論APIを通じて手に入れることができます。

スクリプトはすべての回答をSQLiteデータベースに保存し、それが生の結果です。

例えばこんな質問も投げます。

Explain the bug in the following code:

```
from time import sleep
from multiprocessing.pool import ThreadPool
 
def task():
    sleep(1)
    return 'all done'

if __name__ == '__main__':
    with ThreadPool() as pool:
        result = pool.apply_async(task())
        value = result.get()
        print(value)
```

このコードのバグを指摘させるよう指示すると、

GPT4

コード内のバグは、apply_asyncメソッドが呼び出されている行にあります。apply_asyncメソッドは第一引数として関数を期待していますが、この場合、task()関数が呼び出され、その戻り値がapply_asyncに渡されています。
正しいコードは以下の通りです:
result = pool.apply_async(task)
このようにすると、task関数がapply_asyncに渡され、別のスレッドで実行されます。

Claude v2

このコードの主なバグは、task()が直接呼び出されている点であり、apply_async()に渡されていないということです。これにより、プールが作成される前にメインスレッドでsleepが発生し、非同期でプール内で実行されるのではなくなっています。
これを修正するためには、taskは関数参照として渡されるべきであり、呼び出されるべきではありません:
python
result = pool.apply_async(task) # ()がないことに注意
これで、taskはスレッドプール内で実行され、その結果はresult.get()を通じて返されます。

残り60種類のLLMの結果はこちらでご覧いただけます。


様々なLLMの結果が出ていますが、GPT4の一人勝ちというわけでもないことが鮮明になってきています。



いいなと思ったら応援しよう!