見出し画像

ANTHROPICの最高峰AI Claude3.5Sonnet 2024-07-15を試用

音声をテキストにして、議事録を作成するシステムを作成しようと試行錯誤していますが、音声からテキスト変換する生成AIが「いまいち」だった時の保険として、変換したテキストが、多少クオリティが低くても文章生成AIで修正してもらおうと考えました。

そこで、OpenAIのGPT4oを抜いたと噂されるANTHROPIC社のClaudeというAIで有償でしか使えない最高峰のSonnetというバージョン、しかも、APIでしか使えない7月15日版を使って、言語処理能力を試してみました。

結果から申しますと

頭いい。Gpt4oとGemini 1.5 ProとClaudeSonnet3.5は互角ですね。

問いかけたプロンプト

この一言ですね。このAIに次の問いを投げかけました。

旅館に泊まる旅人三人から一万円ずつフロントマンは預かりました。
数時間後、フロントマンはオーナーに呼ばれて、
「三人ならセット価格で二万五千円だ。5千円返してあげて!」と
千円札五枚を渡されました。
フロントマンは二千円くすねて、千円札を一枚ずつ旅人に返しました。

それで。。。ここからが問題です。

三人は結局、9,000円ずつ払っていますね。
2,000円はフロントマンが盗みました。

9,000円×三人で27,000円。
2,000円はフロントマンのポケットの中。

30,000円もらったのに、29,000円のお金の流れしかわからない。

1,000円はどこに消えたのだろうか?

Sonnet3.5 20240715バージョンの出力した解答


この問題は、数学的な錯覚を引き起こす有名なパズルです。
実際には、お金は消えていません。

この混乱は計算方法の誤りから生じています。
正しい計算方法は以下の通りです。

  1. 旅人3人は最初に30,000円支払いました。

  2. オーナーは25,000円を受け取りました。

  3. フロントマンは2,000円をくすねました。

  4. 旅人3人に1,000円ずつ、合計3,000円が返金されました。

25,000円 + 2,000円 + 3,000円 = 30,000円
これで、すべてのお金の流れが説明できます。

問題の混乱は、旅人が支払った金額(27,000円)とフロントマンがくすねた金額(2,000円)を足し合わせていることにあります。これは二重計算になっています。
フロントマンがくすねた2,000円は、既に旅人が支払った27,000円の中に含まれているのです。

したがって、1,000円が消えたように見えるのは計算方法の誤りであり、実際にはすべてのお金の流れが説明できます。


なんともわかりやすい!どこで間違っているのかも教えてくれますね。
ClaudeのAIは説明が親切だとは、昔から思っていましたが、やはり、親切ですね。

Sonnet3.5 20240620バージョンの出力した解答


この問題は、実は計算のトリックによる間違いがあります。お金が消えたわけではありません。

三人の旅人が最初に支払ったお金は合計で30,000円です。
オーナーは25,000円でよいと言ったので、5,000円が旅人に返されるはずでした。
しかし、フロントマンが2,000 円を着服し、3,000円だけを旅人に返しました。

つまり、旅館が受け取ったお金は25,000円、フロントマンが着服したお金が2,000円、旅人に返ったお金が3,000円で、合計30,000円になります。

問題文で「三人は結局、9,000円ずつ払っています」と述べられていますが、これは返金後の一人当たりの支払額です。27,000円は旅人全体の支払額ではなく、返金後の支払額の合計です。

したがって、27,000円と2,000円を足して29,000円というのは、返金後の支払額とフロントマンが着服した金額を混同しているため、正しくありません。

最初に旅人が支払った30,000円は、25,000円(旅館の収入)、3,000円(旅人への返金)、2,000円(フロントマンの着服)に分配されており、お金は消えておらず、すべて説明がつきます。


こちらでも、十分わかりやすいし、親切な説明ですね。どこで間違ったか?までは説明がないです。


ChatGPT 4oの出力した解答


この問題は、計算の視点を誤っているために生じる「トリック問題」です。問題の要点は、9,000円ずつ払ったときに「どこに1,000円が消えたか」を考えるのではなく、支出と合計金額の関係を正しく理解することにあります。

まず、三人の旅人は合計で30,000円を支払いました。

旅館のオーナーが受け取ったのは25,000円です。
フロントマンが盗んだのは2,000円です。
旅人たちに返されたのは3,000円(1,000円×3人)です。
これらを合わせると:

25,000円(オーナー) + 2,000円(フロントマン) + 3,000円(返金) = 30,000円

つまり、お金の流れはきちんと説明できます。

この問題では「9,000円×3人の27,000円」と「2,000円(フロントマンが盗んだ分)」を足し合わせて「29,000円」としていますが、これは間違ったアプローチです。本来は、27,000円のうち25,000円は宿泊代として正しく使われ、残りの2,000円がフロントマンに盗まれたお金です。

したがって、1,000円が消えたというのは計算ミスであり、実際にはどこにも消えていません。金額の合計はきちんと30,000円に一致します。


少しばかり学者さんに説明してもらっている気分になるのは、私だけでしょうか。間違った箇所も指摘してくれています。


Gemini Advancedの出力した解答


この問題は、お金の流れを誤って計算しているために生じる錯覚です。

正しい計算方法

旅人3人が支払った合計金額: 10,000円 x 3人 = 30,000円
旅館の正規料金: 25,000円
旅人に返金された金額: 1,000円 x 3人 = 3,000円
フロントマンが盗んだ金額: 2,000円
お金の流れ

30,000円(旅人の支払い) - 25,000円(旅館の正規料金) - 3,000円(返金) - 2,000円(盗難)= 0
どこで間違えているのか?

問題は、旅人が「結局9,000円ずつ払った」という計算です。これは、返金されたお金を考慮していないため誤りです。

旅人は最初に10,000円ずつ支払いましたが、1,000円ずつ返金されています。したがって、実際に支払った金額は9,000円です。

この9,000円という金額に惑わされて、お金の流れを複雑に考えてしまうことが、この問題の錯覚のポイントです。


「どこで間違えているのか?」と、こちらに問いかけてくるGeminiって、すごいですね。

音声生成AIを補わせてみる

先日、2人での会話を話者分離でテキスト化したところ、

ご住所の変更でございますねご連絡ありがとうございます恐れ入りますがご契約内容を確認いたしますのでお電話を頂いてる方は契約者ご本人様でいらっしゃいますかはいそうです本人です
それではお電話をいただいておりますお客様のお名前をお願い致します山田太郎です山田太郎様でいらっしゃいますねでは契約者ご本人様確認のため恐れ入りますが山田様の生年月日をお願いいたしますはい生年月日が1937年6月17日です

と出てきたので、これを、次のプロンプトで話者分離してもらいました。

次の会話は2人での会話です。
話者Aと話者Bに分けてください。
###
[上記文章をコピペ]

出てきた結果が、こちら

話者A: ご住所の変更でございますね。ご連絡ありがとうございます。恐れ入りますが、ご契約内容を確認いたしますので、お電話を頂いてる方は契約者ご本人様でいらっしゃいますか?
話者B: はい、そうです。本人です。
話者A: それでは、お電話をいただいておりますお客様のお名前をお願い致します。
話者B: 山田太郎です。
話者A: 山田太郎様でいらっしゃいますね。では、契約者ご本人様確認のため、恐れ入りますが山田様の生年月日をお願いいたします。
話者B: はい、生年月日が1937年6月17日です。

さすがです!きっちり二人の会話として話者分離してくれました。
これならClaude3.5Sonnetも候補に挙げて検討する余地がありそうですね!

今回お試ししたプログラムはこちら(Pythonです)

import os
import asyncio
from anthropic import AsyncAnthropic

client = AsyncAnthropic(
    # This is the default and can be omitted
    api_key=os.environ.get("ANTHROPIC_API_KEY"),
)


async def main() -> None:
    message = await client.messages.create(
        model="claude-3-5-sonnet-20240620",
        max_tokens=8192,
        messages=[
            {
                "role": "user",
                "content": "次の会話は2人での会話です。" \
                "話者Aと話者Bに分けてください。" \
                "###" \
                "ご住所の変更でございますねご連絡ありがとうございます恐れ入りますがご契約内容を確認いたしますのでお電話を頂いてる方は契約者ご本人様でいらっしゃいますかはいそうです本人です" \
                "それではお電話をいただいておりますお客様のお名前をお願い致します山田太郎です山田太郎様でいらっしゃいますねでは契約者ご本人様確認のため恐れ入りますが山田様の生年月日をお願いいたしますはい生年月日が1937年6月17日です"
            }
        ],
        extra_headers={"anthropic-beta": "max-tokens-3-5-sonnet-2024-07-15"},
    )
    print(message.content)


asyncio.run(main())


AsyncAnthropic命令で、「これから使うよー」と宣言し、
client.messages.create命令で「このプロンプト処理して」とお願いしたら
解答がmessageに出てくる。という、たった二つの命令だけで動きました。

最近のAIを動作させるAPIって、簡単になってしまいましたね。これならだれでもちょっと勉強すると、出来てしまいますね。

勉強してみたい人、いますかー?
大学センター試験でも情報Ⅰ必須科目になりますし、今、勉強してみましょう!


讃良屋安明公式ブログあります。お時間のある時に覗いてみてください。

会社のサイトはこちら


この記事が気に入ったらサポートをしてみませんか?