[アップデート] Amazon Bedrock が Rerank API をサポートしました #AWSreInvent

[アップデート] Amazon Bedrock が Rerank API をサポートしました #AWSreInvent

Clock Icon2024.12.03

こんにちは!AWS 事業本部コンサルティング部のたかくに(@takakuni_)です。

re:Invent 2024 ですね。

ついに、Amazon Bedrock が Rerank API をサポートしました。初日から素晴らしいです。

https://aws.amazon.com/about-aws/whats-new/2024/12/amazon-bedrock-rerank-api-accuracy-rag-applications/

リランク

今回のアップデートに触れる前にリランクをおさらいしましょう。リランクは RAG の回答精度を向上させるための手段の 1 つです。

ベクトル埋め込みで行うセマンティック検索は、ユーザーのクエリと文書の関連性をもとに検索結果を返す検索手法のため、クエリに部分的一致した関連しない文書を検索してしまう可能性があります。ユーザーのクエリが複雑、曖昧な文脈の場合、ユーザーの好みやクエリの文脈に基づいて最適な文書を優先順位付けすることに限界があります。

リランクはこの部分をフォローする機能で、ベクトル検索によって返ってきたドキュメントを再度ユーザーの質問の意図に沿っているかランキングづけする技術です。

image.png
Question answering using a search API and re-ranking より引用

アップデート

今回のアップデートでリランク用のモデルが Bedrock に登場しました。

  • Amazon Rerank 1.0 – amazon.rerank-v1:0
  • Cohere Rerank 3.5 – cohere.rerank-v3-5:0

また、Amazon Bedrock Knowledge bases でも、Retrieve または RetrieveAndGenerate API を呼び出す際のモデルにリランク用モデルを指定することで利用可能になります。

If you're using Amazon Bedrock Knowledge Bases for building your Retrieval Augmented Generation (RAG) application, use a reranker model while calling the Retrieve or RetrieveAndGenerate operation. The results from reranking override the default ranking that Amazon Bedrock Knowledge Bases determines.

https://docs.aws.amazon.com/bedrock/latest/userguide/rerank.html

現時点では見えていないですが、東京リージョンもサポート範囲内にいました。非常に楽しみですね。

US West (Oregon)
Canada (Central)
Europe (Frankfurt)
Asia Pacific (Tokyo)

https://docs.aws.amazon.com/bedrock/latest/userguide/rerank-supported.html

やってみる

それでは実際にリランクモデルを使ってみようと思います。

RetrieveAndGenerate API を読んでいるものの、 reRank のモデル指定箇所が不透明なのでマネジメントコンソールから作業をおこないます。

https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_RetrieveAndGenerate.html

Reranking の ^ を選択します。

2024-12-02 at 00.27.44-Amazon Bedrock  us-west-2@2x.png

モデルの選択画面に遷移します。

今回は日本語対応している、Amazon Rerank 1.0 を選択します。

2024-12-02 at 00.28.32-Amazon Bedrock  us-west-2@2x.png

回答が生成されていますね。ただ、このままだとどのようにリランクが行われたのか不明なのでログを見てみましょう。

2024-12-02 at 00.30.53-Amazon Bedrock  us-west-2@2x.png

CloudWatch Logs に保管されているモデルの実行ログを見てみます。

inputBodyJson にベクトル検索で引っかかってきたインデックスが 5 つ存在し、query との関連性を relevance_score で再評価していることがわかりますね。

本来であれば、 index の 0 番目から評価されるところを、正しくユーザーの質問をもとにリランキングできていることがわかります。

ModelInvocationLog.json
{
	"schemaType": "ModelInvocationLog",
	"schemaVersion": "1.0",
	"timestamp": "2024-12-02T08:19:36Z",
	"accountId": "123456789012",
	"identity": {
		"arn": "arn:aws:sts::123456789012:assumed-role/takakuni/takakuni"
	},
	"region": "us-west-2",
	"requestId": "2e055df8-cf86-4027-98a4-b59ea4596664",
	"operation": "InvokeModel",
	"modelId": "arn:aws:bedrock:us-west-2::foundation-model/amazon.rerank-v1:0",
	"input": {
		"inputContentType": "application/json",
		"inputBodyJson": {
			"documents": [
				"おばあさんはそこで、「あっちの水は、かあらいぞ。こっちの水は、ああまいぞ。かあらい水は、よけて来い。ああまい水に、よって来い。と歌いながら、手をたたきました。  すると桃はまた、「ドンブラコッコ、スッコッコ。ドンブラコッコ、スッコッコ。」といいながら、おばあさんの前へ流れて来ました。  おばあさんはにこにこしながら、「早くおじいさんと二人で分けて食べましょう。」と言って、桃をひろい上げて、洗濯物といっしょにたらいの中に入れて、えっちら、おっちら、かかえておうちへ帰りました。  夕方になってやっと、おじいさんは山からしばを背負って帰って来ました。  「おばあさん、今帰ったよ。」",
				"桃太郎はこの話をきくと、その鬼が島へ行ってみたくって、もう居ても立ってもいられなくなりました。そこでうちへ帰るとさっそく、おじいさんの前へ出て、「どうぞ、わたくしにしばらくおひまを下ください。」と言いました。  おじいさんはびっくりして、「お前どこへ行くのだ。」と聞きました。  「鬼が島へ鬼せいばつに行こうと思います。」と桃太郎はこたえました。  「ほう、それはいさましいことだ。じゃあ行っておいで。」とおじいさんは言いました。  「まあ、そんな遠方へ行くのでは、さぞおなかがおすきだろう。よしよし、おべんとうをこしらえて上げましょう。」とおばあさんも言いました。",
				"むかし、むかし、あるところに、おじいさんとおばあさんがありました。まいにち、おじいさんは山へしば刈りに、おばあさんは川へ洗濯に行きました。  ある日、おばあさんが、川のそばで、せっせと洗濯をしていますと、川上から、大きな桃が一つ、「ドンブラコッコ、スッコッコ。ドンブラコッコ、スッコッコ。」と流れて来ました。  「おやおや、これはみごとな桃だこと。おじいさんへのおみやげに、どれどれ、うちへ持って帰りましょう。」  おばあさんは、そう言いながら、腰をかがめて桃を取ろうとしましたが、遠くって手がとどきません。  おばあさんはそこで、「あっちの水は、かあらいぞ。こっちの水は、ああまいぞ。",
				"夕方になってやっと、おじいさんは山からしばを背負って帰って来ました。  「おばあさん、今帰ったよ。」  「おや、おじいさん、おかいんなさい。待っていましたよ。さあ、早くお上がんなさい。いいものを上げますから。」  「それはありがたいな。何だね、そのいいものというのは。」  こういいながら、おじいさんはわらじをぬいで、上に上がりました。その間に、おばあさんは戸棚の中からさっきの桃を重そうにかかえて来て、「ほら、ごらんなさいこの桃を。」と言いました。  「ほほう、これはこれは。どこからこんなみごとな桃を買って来た。」  「いいえ、買って来たのではありません。今日川で拾って来たのですよ。」  「え、なに、川で拾って来た。",
				"おじいさんも、おばあさんも、びっくりして、二人いっしょに声を立てました。  「まあまあ、わたしたちが、へいぜい、どうかして子供が一人ひとりほしい、ほしいと言っていたものだから、きっと神さまがこの子をさずけて下さったにちがいない。」  おじいさんも、おばあさんも、うれしがって、こう言いました。  そこであわてておじいさんがお湯をわかすやら、おばあさんがむつきをそろえるやら、大さわぎをして、赤さんを抱き上あげて、うぶ湯をつかわせました。するといきなり、  「うん。」  と言いいながら、さんは抱いているおばあさんの手をはねのけました。  「おやおや、何という元気のいい子だろう。」"
			],
			"top_n": 5,
			"query": "おばあさんはどこに行きましたか"
		}
	},
	"output": {
		"outputContentType": "application/json",
		"outputBodyJson": {
			"results": [
				{
					"index": 2,
					"relevance_score": 0.29798040367830164
				},
				{
					"index": 1,
					"relevance_score": 0.05623634570448376
				},
				{
					"index": 0,
					"relevance_score": 0.0436095275656257
				},
				{
					"index": 3,
					"relevance_score": 0.00881316650304586
				},
				{
					"index": 4,
					"relevance_score": 0.0001420236402299791
				}
			]
		}
	}
}

まとめ

以上、「Amazon Bedrock が Rerank API をサポートしました。」でした。

API リファレンスが更新され次第、もっと細かな情報を載せていければと思いますが、 Amazon Bedrock Knowledge bases 側でマネージドにリランクしてくれるようになったのはとても素晴らしいアップデートだと思います。

このブログがどなたかの参考になれば幸いです。

AWS 事業本部コンサルティング部のたかくに(@takakuni_)でした!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.