🧠
Amazon Bedrock Knowledge BasesでCohereのRerank試してみた
Amazon Bedrock Knowledge BasesでCohereのRerankが使用できるようになったので、試してみました。
事前準備
- boto3のバージョンを
1.35.72
に更新する - CohereのRerankモデルを有効化する
実際に使ってみた
今回はretrieve APIを使用してRerankしてみます。ドキュメント通りではありますが、retrieveの項目にrerankingConfigurationを設定するだけでRerank機能を追加できます。
import boto3
region = boto3.Session().region_name
client = boto3.client('bedrock-agent-runtime',region_name=region)
modelId = "cohere.rerank-v3-5:0"
model_package_arn = f"arn:aws:bedrock:{region}::foundation-model/{modelId}"
query = 'AWSの事例について教えてください。' # 質問
response = client.retrieve(
knowledgeBaseId='KBのID',
retrievalConfiguration={
'vectorSearchConfiguration': {
'numberOfResults': 5,
'overrideSearchType': 'SEMANTIC',
'rerankingConfiguration': {
'bedrockRerankingConfiguration': {
"modelConfiguration": {
"modelArn": model_package_arn
},
},
'type': 'BEDROCK_RERANKING_MODEL',
},
}
},
retrievalQuery={
'text': query
},
)
for r in response['retrievalResults']:
print(r['score'], r['location']['webLocation']['url'])
結果は以下のとおりです。弊社の公開事例について質問し、Rerankなしとありで結果が違うことがわかると思います。
# Rerankあり
0.5588332414627075 https://fusic.co.jp/works/58
0.4263460636138916 https://fusic.co.jp/stories/4
0.3762110471725464 https://fusic.co.jp/works/48
0.3417148292064667 https://fusic.co.jp/works/23
# Rerankなし
0.51292914 https://fusic.co.jp/works/48
0.506749 https://fusic.co.jp/stories/4
0.50632834 https://fusic.co.jp/works/58
0.5046154 https://fusic.co.jp/works/23
rerankingConfigurationではRerankに使用するメタデータをカスタマイズできます。selectionModeをSELECTIVE
に変更し、selectiveModeConfigurationで使用するメタデータを選択したり、除外することで、より適切なRerankの結果を得ることができます。試しにWebクローリングしてるKBでurlのメタデータを削除してみました。
response = client.retrieve(
knowledgeBaseId='KBのID',
retrievalConfiguration={
'vectorSearchConfiguration': {
'numberOfResults': 5,
'overrideSearchType': 'SEMANTIC',
'rerankingConfiguration': {
'bedrockRerankingConfiguration': {
"modelConfiguration": {
"modelArn": model_package_arn
},
"metadataConfiguration": {
"selectionMode": "SELECTIVE",
"selectiveModeConfiguration": {
'fieldsToExclude': [
{'fieldName': 'location'} # locationを除外
]
}
}
},
'type': 'BEDROCK_RERANKING_MODEL',
},
}
},
retrievalQuery={
'text': query
},
)
Rerankの結果は変わりませんが、メタデータ(url)を除外したときの方がスコアは上がりました。
# Rerankあり メタデータ(url)を除外
0.6044228076934814 https://fusic.co.jp/works/58
0.4921643137931824 https://fusic.co.jp/stories/4
0.46410053968429565 https://fusic.co.jp/works/48
0.4379923343658447 https://fusic.co.jp/works/23
# Rerankあり
0.5588332414627075 https://fusic.co.jp/works/58
0.4263460636138916 https://fusic.co.jp/stories/4
0.3762110471725464 https://fusic.co.jp/works/48
0.3417148292064667 https://fusic.co.jp/works/23
推測にはなってしまいますが、おそらくデフォルトでは全てのメタデータをRerankに使用しており、Textに関係のない不要なものを削除したため、スコアが上がったと思います。
まとめ
retrieve APIの結果をわざわざ整形してRerankしなくとも、rerankingConfiguration
を追加するだけでCohereのRerankモデルを使用することができました。KBを使用している人は多いと思うので、ぜひ使ってみてください。
Discussion