Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

Amazon Bedrock「Claude2.1」の最大20万トークンで何が変わるか確認してみた

Amazon Bedrock Advent Calendar 2023 13日、
および Anthropic Claude Advent Calendar 2023 18日の記事です。

こんにちは、機械学習チーム YAMALEX の駿です。
YAMALEX は Acroquest 社内で発足した、会社の未来の技術を創る、機械学習がメインテーマのデータサイエンスチームです。
(詳細はリンク先をご覧ください。)

先日、 Bedrock 上で Claude 2.1 が使えるようになりました。

aws.amazon.com

このモデルは精度が高いことはもちろんですが、 20 万( 200K )トークンを一度に扱うことができる という特徴があります。
200K のトークンがあれば、約 15 万単語もしくは 500 ページの本を一度に扱える、と言われています。

とは言いますが、これは実際どれくらいインパクトがあることなのでしょうか?
今回は実際に本の要約タスクをさせてみて、トークンが大きいことの利点を確認します。

1. 扱うデータ

今回は題材として、著作権が切れた作品を無料で公開している青空文庫から、スウィフト・ジョナサン『ガリバー旅行記』を選択しました。

物語が有名で多くの人があらすじをすでに知っている、かつ transformers の GPT2Tokenizer を用いてトークン数をカウントしてみたところ、約 162,000 トークンと今回の検証にぴったりの長さでした。

www.aozora.gr.jp

1.1. 前処理

ルビありのテキストファイルをダウンロードしましたが、このままでは読む人やビューワー向けの記述が多いため、これらを削除して、モデルが読みやすい形に変換します。

具体的には下記変換を行いました。

  1. ルビの削除 %s/《(.*?)》//g
  2. 注の削除 %s/[(.*?)]//g
  3. 冒頭の凡例を削除
  4. 「著者から読者へに代えて」以下を削除

2. 実験条件

今回は下記条件で実験を行いました。

# モデル 一度に要約するトークン数
OpenAI gpt-3.5-turbo-16k 約15K
Anthropic Claude 2.1 約15K
Anthropic Claude 2.1 全文(約162K)

①と②では、下記手順で要約を生成しました。

  1. 一行ずつ読み込み累積トークン数を計算する
  2. 15K トークンを超えた時点で 1 かたまりとし、モデルに要約文を生成させる
  3. 累積を 0 に戻し再び 15K トークン分を取得、モデルに直前の要約文と合わせて、このかたまりの要約文を生成させる
  4. 全文を読み込むまで 3. を繰り返す

③は単に 全文をまとめてモデルに入れる だけです。

2.1. プロンプト

分割して要約する①②と全文を一度に要約する③、それぞれに利用したプロンプトを以下に示します。
分割する場合に、ひとつ前の要約を加えている以外は同一の内容になっています。

  • ①②分割して要約

      Task: Identify Significant Events: Based on the provided text, list the significant events in the book in Japanese. These should include major plot points, character developments, and any turning points in the story.
      Goal: The aim is to provide an engaging and informative summary for someone who hasn't read the book, and to recommend the book based on its strengths and appeal.
      Events up to now: {ひとつ前の要約}
      Input: {15Kトークン分の本文}
    
  • ③全文を一度に要約

      Task: Identify Significant Events: Based on the provided text, list the significant events in the book in Japanese. These should include major plot points, character developments, and any turning points in the story.
      Goal: The aim is to provide an engaging and informative summary for someone who hasn't read the book, and to recommend the book based on its strengths and appeal.
      Input: {本文}
    

3. 結果

それぞれ最終成果物は下記のようになりました。

  • ① GPT3.5 15K トーク

      Significant Events:
      1. 主人公が船で航海をしている途中、船員たちが海賊であるこ とが明らかになり、船長の私をとじこめる。
      2. 私が船から降ろされ、馬のいる地域にたどり着く。
      3. 私が馬と出会い、馬が私を不思議そうに見つめる。
      4. 馬がもう一匹やってきて、二匹が何かを相談しているように 見える。
      5. 馬が私を呼び止め、私が引き返して馬のそばに行く。       
      6. 馬が私に何かを伝えようとしているように見える。
      7. 私が洋服の秘密を主人に打ち明ける。
      8. 私が戦争や金銭の話を主人に説明する。
      9. 主人がヤーフの争いや好物の話をしてくれる。
    
      この本は、主人公が不思議な馬たちとの出会いを通じて、異なる文化や社会のあり方について考えさせられる物語です。馬たちの行動や意思疎通の試みなど、読者は彼らとの交流を通じて新たな視点を得ることができます。また、戦争や金銭の問題についても触れられており、人間の欲望や争いの根源について考えさせられます。この本は、異文化交流や社会問題に興味がある読者におすすめです。
    
  • ② Claude 2.1 15K トーク

      はい、ここまでのガリバー旅行記の主な出来事を要約すると以下のようになります:
    
      1. ガリバーは海賊に捕らわれ、ある島に放置される
      2. 島で猿のようなヤーフに出会うが、馬に助けられる
      3. 馬とコミュニケーションをとろうとするが言葉が通じない
      4. 馬同士が相談する様子を見て、馬の賢さに驚く
      5. 馬の国の人々はさらに賢いのではないかと考える
      6. 馬に家に連れていかれ、馬の言葉を教えられる
      7. ヤーフと自分を比較される
      8. 馬に自分の身の上を話すが、理解してもらえないこともある
      9. 馬の家で生活し、馬の家族と交流する
    
      以上が、ガリバーが馬の国を訪れてからの主な出来事です。
      特にガリバーが馬の高い知能に驚き、コミュニケーションをとろうと努力する様子が印象的です。また、馬と人間の違いや人間社会の理解の難しさも描かれています。
    
  • ③ Claude 2.1 全文

      ガリバー旅行記の重要な出来事を日本語で要約します。
      小人国リリパットでは、ガリバーは小人たちに捕らえられ、展示物のように見世物にされます。その後、小人国と戦争しているブレフスキュ島の艦隊を捕獲し、小人国の英雄となります。      
      次に訪れた大人国ブロブディングナグでは、ガリバーは巨人にとらえられます。彼は巨人の家で飼育され、展示物のように見せびらかされます。
      その後、空中都市ラピュタにたどり着きます。ここでは科学が発達していて、磁石の力で浮遊している島があります。ガリバーは国王に会う機会を得ます。
      最後に、馬の国ホイニームにたどり着きます。ここでは馬が文明化され、人間は野生の動物のように扱われます。ガリバーは人間をヤーフと呼ぶ馬の家族に飼育されますが、人間を特別扱いしていることが問題視され、追放されてしまいます。
      こうしてガリバーは多くの奇妙な世界を旅し、人間社会を相対的な視点から批評する機会を得ます。これは人間性や文明についての風刺として機能しています。
    

4. 考察

ここでざっくりと『ガリバー旅行記』のポイントを確認しておきましょう。

  1. ガリバーが主に4つの国を訪れる物語である

    1. 小人の国 リリパット
    2. 巨人の国 ブロブディンナグ
    3. 空とぶ島 ラピュタ
    4. 馬の国 フウイヌム国
  2. イギリス人の社会や慣習に対するスウィフトの批判的な風刺がちりばめられている

4.1. トークン数による違い

上のポイントを踏まえて、結果を見てみると、トークン数が小さい①②では、前半部分の国々が抜け落ちてしまっていることが分かります。
反対に一度に全文を入れた③では訪れた 4 つの国すべてが要約に登場しています。

トークン数が大きければ本一冊のように長い文章を渡しても、前半部分を忘れることなく、応答ができていることが分かります。
反対に、トークン数が少ない場合、分割して次々に新しい情報を与えていく過程で、過去分(物語の前半部分)が失われてしまっています。

今までであれば、少ないトークン数の中でいかに過去の情報を残していくかがプロンプトエンジニアの腕の見せ所、となっていたかもしれませんが、トークン数が多ければその必要はなく、初心者でも簡単に精度の高い結果を得られます。

4.2. 実行時間

実行時間は次のようになりました。

# モデル トークン数 全体所要時間
OpenAI gpt-3.5-turbo-16k 約15K 135秒
Anthropic Claude 2.1 約15K 349秒
Anthropic Claude 2.1 約162K 163秒

同じモデルを使っている②と③を比べた時に、分割して実行するよりも、まとめて実行したほうが早い、という結果になりました。

サンプル数が 1 つしかありませんが、実行環境とモデル間でのやり取りが複数回発生するオーバーヘッドが所要時間の増大に影響したのではないかと推測しています。

特に今回は東京-オレゴン間で通信を行っているため、往復は少ない方が通信時間は少なく済みそうです。

4.3. 実装時の違い

結果には表れていませんが、実装時に感じた大きな違いは実装の複雑さです。

全文をまとめてモデルに渡す場合、単純に渡すだけで事足ります。
しかし、分割してモデルに渡す場合、下記のような点に留意して実装をする必要があり、面倒でした。

  1. これまでの要約文の与え方

  2. 分割単位の決定

    段落単位/行単位/単語単位など、分割単位を変えるだけで、精度に影響が出ると考えられます。
    適切な分割単位を検討する必要があります。

  3. トークン数管理

    本文を許容されるトークン以下に抑えたとしても、直前の要約文やシステムプロンプトにあたる文章などを付与すると、トークンを超過してしまう、ということが起こりえます。
    実際にモデルに渡す文章のトークン数が許容トークン内に入るかを確認する必要があります。

  4. レートリミット管理

    トークン数の時速やリクエスト数の時速など、さまざまなレートリミットがかかることがあります。
    ライブラリを導入するか自前で実装して、適切に処理する必要があります。

それと引き換えに、一度にまとめてモデルに渡す場合、雑に投げ込むだけである程度の結果が出る、というのがいいですね。

5. 実装時の注意点

大きなトークン数を扱うにあたって、一点発生した問題について、紹介します。

ガリバー旅行記』全文を入力として boto3.client("bedrock-runtime").invoke_model に渡した際、ReadTimeout を超過するエラーが発生しました。

botocore.exceptions.ReadTimeoutError: Read timeout on endpoint URL: "https://bedrock-runtime.us-west-2.amazonaws.com/model/anthropic.claude-v2%3A1/invoke"

client 作成時に、 ReadTimeout までの時間を長くする設定を入れることで解決できました。

client = boto3.client(
    "bedrock-runtime",
    config=Config(read_timeout={十分に大きな値}),
)

6. まとめ

今回は大きなトークンが扱えると、どんな利点があるのか、実際に試してみました。

項目 トークン小 トークン大
長い文章全体を考慮して回答できる ×
すべてのトークンを処理する時間が短い ×
実装が楽 ×

使えるトークン数が大きいことは、あるHTMLの構造を分析してもらう、 RAG においてコンテキストサイズについて悩むことなく検索結果を入れられるなど、有用な場面が多そうです。

それにしても、人間が数時間かけて読む本を 160 秒そこらで読んで、要約までしてくれるのは、やっぱりパワーを感じますね。

Acroquest Technologyでは、キャリア採用を行っています。
  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSクラウドサービスを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長
  少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。 www.wantedly.com