はじめに
毎日のようにChatGPT APIと戯れておりますがGPT-4
を使っても上手くいかなった時、いつも深い絶望に包まれています。
今現在(2023/03/07)ではLLM全般に言えることかもですが質問に表形式のデータが含まれていたり、計算が必要だったりすると苦手らしい傾向はあるかと思います。
そんな時、代替案があったらなあと思い、他も触ってみようというのがこの記事を書いたきっかけです。
AnthropicのClaude3
を最近よく聞くので触ってみました。この記事ではAWS BedrockでClaude3を用意して、同じ質問をOpenAI ChatGPT APIにも投げてみて比べるところまでやってみます。
ちなみにAPIとかいいからとりあえずチャットしてみたいという方はこちらです。
Claude3にはHaiku, Sonnet, Opusという3つのモデルがありますが、こちらでは中間グレードのSonnetを使うことができます。課金するとOpusも使えます。
Claude3の準備
現状、AWSでClaude3が使えるリージョンはバージニア北部とオレゴンの2つです。AWSのコンソールにログインし、どちらかのリージョンに切り替えてください。
1. モデルへのアクセス件のリクエスト
AWS Bedrockを開いたら左のモデルアクセス
をクリックし、右上に表示されるモデルアクセスの管理
ボタンをクリックしてClaude 3 Sonnet
にチェックを入れ右下の変更を保存
をクリックします。(下の画像は作業済みのものです)
現状、Sonnetのみ利用可能です。Opusなどはまだです。
APIの実行
リファレンスを参考にClaude3 Sonnetにリクエストを送るだけのサンプルを書いてみます。
import json
import boto3
bedrock = boto3.client(
"bedrock-runtime",
region_name="us-west-2" # オレゴン
)
body = json.dumps(
{
"anthropic_version": "bedrock-2023-05-31",
"max_tokens": 1000,
"messages": [
{
"role": "user",
"content": "こんにちは"
}
]
}
)
modelId = 'anthropic.claude-3-sonnet-20240229-v1:0'
response = bedrock.invoke_model(
body=body,
modelId=modelId
)
response_body = json.loads(response.get('body').read())
print(response_body["content"][0]["text"])
こんにちは!あなたへの返事を楽しみにしています。何か質問があればお聞きしますので、お気軽にどうぞ。
OpenAI ChatGPT API GPT-4との比較
これでとりあえず使えるようにはなったので、GPT-4と比較をしてみます。
Claude3 Sonnetは最上位のモデルではないのでフェアじゃない気もしますが、代替案を探す旅なので良いでしょう。
参考までにOpenAI社のGPT-4を使うサンプルです。
curl https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <ご自身のトークン>" \
-d '{
"model": "gpt-4",
"messages": [
{
"role": "user",
"content": "Hello"
}
]
}'
質問1. 「15+9344+45+2+85445+34356は?」
答えば129207
ですがどうなるでしょうか。
GPT-4
123207
シンプルに答えてくれましたが、間違ってます…。
Claude3 Sonnet
わかりました。計算しますね。
15 + 9344 + 45 + 2 + 85445 + 34356
= 15 + 9344 + 45 + 2 + (85000 + 445) + 34356
= 15 + 9344 + 45 + 2 + 85445 + 34356
= 15 + 9391 + 85445 + 34356
= 94851 + 34356
= 129207
ですので、15+9344+45+2+85445+34356は129207になります。
途中、そのステップがいるのか?という箇所はありますが、最終的に正しい答えが出せてます。
質問2. 「駅数の合計を教えて¥n¥n都道府県別の駅数¥n¥n佐賀県81¥n¥n福岡県361¥n¥n長崎県138¥n¥n大分県87¥n¥n熊本県162¥n¥n鹿児島県128¥n¥n宮崎県76」
よくわからない質問に見えるかと思いますが、要は表っぽいデータを読ませたときに理解できるかという比較です。表をベクターDBに読ませた結果を取得した時のテキストのイメージです。
人のために読みやすくすると元はこんな感じです↓
ちなみに答えは1033です。
駅数の合計を教えて
都道府県別の駅数 | |
---|---|
佐賀県 | 81 |
福岡県 | 361 |
長崎県 | 138 |
大分県 | 87 |
熊本県 | 162 |
鹿児島県 | 128 |
宮崎県 | 76 |
GPT-4
合計して計算すると、
佐賀県の81駅+福岡県の361駅+長崎県の138駅+大分県の87駅+熊本県の162駅+鹿児島県の128駅+宮崎県の76駅で、
合計は1033駅となります。
正解ですね。
Claude3 Sonnet
都道府県別の駅数を合計すると、
81 + 361 + 138 + 87 + 162 + 128 + 76 = 1033
となります。
よって、駅数の合計は1033です。
こちらも正解です。
質問3. もっと複雑な表に関する質問をしてみる
簡単過ぎたようなのでもっと複雑にしてみます。
以下のPDFをベクターDBに読ませ、一部を取得した内容を使ってみます。
神奈川県立病院機構における新型コロナウイルス感染症(COVID-19)への対応の記録(令和 4 年度追補版)
細かくみていただく必要はないですが、上の部分が文字列になったのがこちらです。
◇新型コロナウイルス感染症 感染の波\n\n通常、感染症は感染の拡大と収束の波を断続的に繰り返します。新型コロナウイルス\n\n感染症についても、令和2年(2020 年)1月の日本上陸から現在に至るまで、複数の波\n\nが発生しています。\n\n感染のピーク\n\n期間\n\n年月日\n\n同日の国内\n\n新規感染者数\n\n同日の県内\n\n新規感染者数\n\n同日の機構5病院の\n\n入院患者数(合計)\n\n第1波 R2. 1~R2. 6\n\nR2. 4.11\n\n644人\n\n76人\n\n18人\n\n第2波 R2. 6~R2.10 R2. 8. 7\n\n1,597人\n\n107人\n\n19人\n\n第3波 R2.10~R3. 2 R3. 1. 8\n\n8,045人\n\n838人\n\n47人\n\n第4波 R3. 3~R3. 6\n\nR3. 5. 8\n\n7,244人\n\n303人\n\n30人\n\n第5波 R3. 6~R3.12 R3. 8.20\n\n25,975人\n\n2,878人\n\n68人\n\n第6波 R3.12~R4. 6 R4. 2. 1\n\n104,520人\n\n8,370人\n\n76人\n\n第7波 R4. 6~R4.10 R4. 8.19\n\n261,004人\n\n9,562人\n\n68人\n\n第8波 R4.10~\n\nR5. 1. 6\n\n11,773人 (国内・県内の新規感染者数は厚生労働省の発表に基づく。) ※機構 5 病院の入院患者数は各病院からの報告に基づく。\n\n246,727人\n\n54人\n\n◇出勤停止者の推移\n\n第7波以降、各病院では陽性もしくは濃厚接触による職員の出勤停止が数多く発生し\n\nたことから限られた職員による病院運営を余儀なくされた。\n\n各病院における出勤停止の推移(令和4年7月~令和5年1月)\n\n※各病院の記録・報告に基づく\n\n3
改めて質問です。
「第1波から第6波の同日の県内新規感染者数の合計値を教えてください。」
正解は、76 + 107 + 838 + 303 + 2878 + 8370で12572
です。
先の取得内容と質問をくっつけて聞いてみます。
第1波から第6波の同日の県内新規感染者数の合計値を教えてください。¥n¥n◇新型コロナウイルス感染症 感染の波\n\n通常、感染症は感染の拡大と収束の波を断続的に繰り返します。新型コロナウイルス\n\n感染症についても、令和2年(2020 年)1月の日本上陸から現在に至るまで、複数の波\n\nが発生しています。\n\n感染のピーク\n\n期間\n\n年月日\n\n同日の国内\n\n新規感染者数\n\n同日の県内\n\n新規感染者数\n\n同日の機構5病院の\n\n入院患者数(合計)\n\n第1波 R2. 1~R2. 6\n\nR2. 4.11\n\n644人\n\n76人\n\n18人\n\n第2波 R2. 6~R2.10 R2. 8. 7\n\n1,597人\n\n107人\n\n19人\n\n第3波 R2.10~R3. 2 R3. 1. 8\n\n8,045人\n\n838人\n\n47人\n\n第4波 R3. 3~R3. 6\n\nR3. 5. 8\n\n7,244人\n\n303人\n\n30人\n\n第5波 R3. 6~R3.12 R3. 8.20\n\n25,975人\n\n2,878人\n\n68人\n\n第6波 R3.12~R4. 6 R4. 2. 1\n\n104,520人\n\n8,370人\n\n76人\n\n第7波 R4. 6~R4.10 R4. 8.19\n\n261,004人\n\n9,562人\n\n68人\n\n第8波 R4.10~\n\nR5. 1. 6\n\n11,773人 (国内・県内の新規感染者数は厚生労働省の発表に基づく。) ※機構 5 病院の入院患者数は各病院からの報告に基づく。\n\n246,727人\n\n54人\n\n◇出勤停止者の推移\n\n第7波以降、各病院では陽性もしくは濃厚接触による職員の出勤停止が数多く発生し\n\nたことから限られた職員による病院運営を余儀なくされた。\n\n各病院における出勤停止の推移(令和4年7月~令和5年1月)\n\n※各病院の記録・報告に基づく\n\n3
GPT-4
第1波から第6波までの
同日の県内新規感染者数の合計値は、
76人 + 107人 + 838人 + 303人 + 2,878人 + 8,370人 = 12,562人です。
おしい!ですが不正解です。
Claude3 Sonnet
第1波から第6波までの同日の県内新規感染者数の合計値は以下のとおりです。
第1波(R2.4.11) : 76人
第2波(R2.8.7) : 107人
第3波(R3.1.8) : 838人
第4波(R3.5.8) : 303人
第5波(R3.8.20) : 2,878人
第6波(R4.2.1) : 8,370人
合計: 12,572人
正解ですね…!
まとめ
比較のサンプル数が少ないですが、Claude3 Sonnetは全問正解、GPT-4は一問正解という結果になりました。
Claude3 Sonnetの方が説明も丁寧でしたし、Claude3はさらに上位のOpusが控えていることを考えるととても有望な選択肢に思えました。
参考