Amazon Bedrockで使用できるモデルを比較・整理してみる​​​​​​​

AWSにて生成AIを簡単に使用できるサービスとしてAWS Bedrockの利用が進んできました。
利用可能なモデルも複数あるので、性能や特徴を比較してみました。

選択可能なモデル

現時点(2025年2月)で東京リージョンで利用可能なテキストモデルのプロバイダーは以下の通りです。
  • Amazon・・・ビジネス全体でAIと機械学習の革新に取り組んできたAmazonの25年の経験を組み込んだモデル
  • Anthropic・・・OpenAIの元メンバーによって設立されたアメリカの人工知能(AI)のスタートアップ企業
上記プロバイダーが生成AIモデルを提供しています。
EULA(エンドユーザーライセンス契約)によりAWS経由でライセンス契約が行われるので、生成AIモデルの利用料はAWS使用料として支払いが行われます。
各プロバイダー毎に特色を持った生成AIを使っていますので、機能や特徴に差異があります。

回答比較

プロパイダー毎に以下の生成AIモデルで比較してみます。
  • Amazon・・・Titan Text G1 - Express
  • Anthropic・・・Claude 3.5 Sonnet
それぞれのモデルに以下の質問をしてみました。

4人前の肉じゃがのレシピを教えてください。


■Titan Text G1 - Express(4631ms)
1. じゃがいもは皮をむいて一口大に切る。
2. 肉は一口大に切る。
3. 鍋に水を入れて沸騰させる。
4. じゃがいもを入れ、火が通るまで煮る。
5. 肉を入れて煮る。
6. 煮汁が少なくなってきたら、調味料を加えて味を調える。
7. じゃがいもが柔らかくなったら火を止め、完成。

■Claude 3.5 Sonnet(12755ms)
材料: - じゃがいも:4個(中サイズ)
- にんじん:1本(中サイズ)
- 玉ねぎ:1個(中サイズ)
- 牛肉(薄切り):200g
- しらたき:1袋
- サラダ油:大さじ1
- 砂糖:大さじ2
- 醤油:大さじ3
- みりん:大さじ2
- 酒:大さじ2
- だし汁:300ml

作り方:
1. じゃがいもは一口大に切り、にんじんは乱切り、玉ねぎはくし切りにします。
2. 牛肉は食べやすい大きさに切ります。
3. しらたきはさっと茹でて、食べやすい長さに切ります。
4. 鍋にサラダ油を熱し、牛肉を炒めます。
5. 肉の色が変わったら、玉ねぎ、にんじん、じゃがいもの順に加えて炒めます。
6. だし汁、砂糖、醤油、みりん、酒を加えて煮立たせます。
7. アクを取り除き、弱火で15-20分ほど煮込みます。
8. しらたきを加えて、さらに5分ほど煮込みます。
9. 味を確認し、必要に応じて調整します。
10. 火を止め、少し置いてから器に盛り付けます。

ポイント:
- 煮込む際は落し蓋をすると、具材に味がよく染み込みます。
- 最後に煮汁を少し煮詰めると、よりコクが出ます。
- お好みで、さやいんげんやグリンピースを加えると彩りが良くなります。

本来の残業時間は70時間だが、20時間で申告するように上司から強制されました。適法ですか?


■Titan Text G1 - Express(2344ms)
残業時間の申告は、労働基準法で定められた労働時間と異なる申告は禁止されています。
申告した時間よりも多く働かされた場合は、残業代を請求することができます。

■Claude 3.5 Sonnet(7216ms)
この状況は明らかに違法です。以下の理由から、このような行為は労働法に違反しています:

1. 労働時間の虚偽申告:
実際の労働時間を過少申告することは、労働基準法違反になります。

2. 未払い賃金:
実際に働いた時間分の賃金を支払わないことは、賃金の不払いにあたり違法です。

3. 残業時間の上限違反:
月70時間の残業は、labor法で定められた上限(原則月45時間、年360時間)を超えており、それ自体が問題です。

4. 従業員への強制:
このような違法行為を従業員に強制することは、パワーハラスメントに該当する可能性があります。

5. 労働条件の明示違反:
実際の労働条件と申告される労働条件が異なることは、労働条件明示義務違反になります。

このような行為は従業員の権利を著しく侵害し、企業にとっても大きなリスクとなります。適切な機関(労働基準監督署など)に相談し、対処することをお勧めします。

ある単一窓口の宝くじ売り場にやってくる客は、3分に一人の割合のポアソン到着で、一人が宝くじを買うのにかかる時間は平均2分の指数分布に従うとする。このときの平均待ち時間は?


■Titan Text G1 - Express(4061ms)
平均待ち時間は、平均到着者数÷平均サービス時間です。
平均到着者数は3分に1人なので、3/60人/分です。
平均サービス時間は2分なので、2/60分です。
平均待ち時間は、3/60÷2/60=1/30分です。

■Claude 3.5 Sonnet(11469ms)
この問題を解くために、M/M/1キューイングモデルを使用します。まず、与えられた情報を整理しましょう:

1. 到着率 (λ) : 1/3 人/分
2. サービス率 (μ) : 1/2 人/分 (平均サービス時間が2分なので)

M/M/1モデルでの平均待ち時間を求めるステップは以下の通りです:

1. システム利用率 (ρ) を計算する
2. 平均待ち時間の公式を適用する

ステップ1: システム利用率 (ρ) の計算
ρ = λ / μ
ρ = (1/3) / (1/2) = 2/3 ≈ 0.67

ステップ2: 平均待ち時間の計算
M/M/1モデルでの平均待ち時間の公式は:
Wq = ρ / (μ * (1 - ρ))

この公式に値を代入します:
Wq = (2/3) / ((1/2) * (1 - 2/3))
= (2/3) / ((1/2) * (1/3))
= (2/3) / (1/6)
= 4分

したがって、平均待ち時間は4分となります。

注意:この結果は待ち行列にいる時間のみを表しており、サービスを受ける時間(平均2分)は含まれていません。システム内の総時間(待ち時間+サービス時間)を知りたい場合は、この結果に平均サービス時間を加えて6分となります。

Java言語にて、10000までの素数を出力するプログラムを作成してください。


■Titan Text G1 - Express(8245ms)
Sorry - this model is unable to respond to this request.

■Claude 3.5 Sonnet(10748ms)
以下は、Java言語で10000までの素数を出力するプログラムです。このプログラムではエラトステネスのふるい法を使用して素数を効率的に見つけます。

```java
public class PrimeNumbers {
    public static void main(String[] args) {
        int limit = 10000;
        boolean[] isPrime = new boolean[limit + 1];
        
        // 初期化:すべての数を素数候補とする
        for (int i = 2; i <= limit; i++) {
            isPrime[i] = true;
        }
        
        // エラトステネスのふるい
        for (int i = 2; i * i <= limit; i++) {
            if (isPrime[i]) {
                for (int j = i * i; j <= limit; j += i) {
                    isPrime[j] = false;
                }
            }
        }
        
        // 素数を出力
        System.out.println("10000までの素数:");
        for (int i = 2; i <= limit; i++) {
            if (isPrime[i]) {
                System.out.print(i + " ");
            }
        }
    }
}
```
このプログラムの動作は以下の通りです:

1. `boolean`型の配列 `isPrime` を作成し、初期化します。インデックスが数を表し、その値が `true` ならその数は素数候補です。

2. エラトステネスのふるい法を実装します。2から順番に、その数が素数候補なら、その倍数をすべて素数候補から除外します。

3. 最後に、`isPrime` 配列をチェックし、`true` となっている数(つまり素数)をすべて出力します。

このアルゴリズムは非常に効率的で、大きな数の範囲でも高速に素数を見つけることができます。出力結果は2から始まり、10000以下のすべての素数が空白で区切られて表示されます。

まとめ

「一般知識」、「法律問題」、「数学」、「プログラミング」で比較を行ってみました。

どの分野においても、「Amazon Titan Text G1 - Express」よりも「Anthropic Claude 3.5 Sonnet」の方がより詳細に、回答を出してくれるという結果になりました。
数学問題については回答は4分ですが、「Amazon Titan Text G1 - Express」は誤答しており、「Anthropic Claude 3.5 Sonnet」は正解しています。
「Amazon Titan Text G1 - Express」では回答できなかったプログラム作成ですら、「Anthropic Claude 3.5 Sonnet」では回答が可能でした。

また、法律問題においては、適切な機関(労働基準監督署など)への相談を推奨するなどネクストアクションに関する提案も含まれています。
現時点では「Anthropic Claude 3.5 Sonnet」の方がかなり高度な回答が可能な生成モデルと評価できると思います。

ただ、どの回答においても「Anthropic Claude 3.5 Sonnet」の方が回答までに2~3倍の時間がかかっています。
いい回答を出すために回答を考える時間も長くなるようなので、注意が必要です。

生成モデル 質問内容 回答評価 回答時間
Amazon Titan Text G1 - Express 一般知識(レシピ) 4631ms
法律問題 2344ms
数学 4061ms
プログラミング 8245ms
Anthropic Claude 3.5 Sonnet 一般知識(レシピ) 12755ms
法律問題 7216ms
数学 × 11469ms
プログラミング × 10748ms