Amazon Web Services ブログ

Amazon Bedrock で、Cohere Command Light と Cohere Embed の英語モデルと多言語モデルにアクセスできるように

Cohere は、ビジネスアプリケーションでテキスト生成、要約、検索、クラスタリング、分類、検索拡張生成 (RAG) の利用を支援するテキスト生成および表現モデルを提供しています。11月13日に、Amazon BedrockCohere Command LightCohere Embed の英語モデルと多言語モデルがご利用いただけるようになったことをお知らせします。それらは既にお使いいただける Cohere コマンドモデルに加わります。

Amazon Bedrock は、AI21 LabsAnthropicCohereMetaStability AIAmazon などの大手 AI 企業から提供される高性能基盤モデル (FM) の幅広い選択肢と、生成系 AI アプリケーションを構築するための幅広い機能セットを提供するフルマネージドサービスです。これを利用することで、プライバシーとセキュリティを維持しながら、開発を簡素化できます。今回のローンチにより、Amazon Bedrock はモデルの選択肢をさらに広げ、エンタープライズ対応の生成系 AI の構築とスケーリングを支援します。Amazon Bedrock の詳細については、こちらの Antje の記事をご覧ください

Command は、Cohere の主力テキスト生成モデルです。ユーザーのコマンドに従い、ビジネスアプリケーションで役立つようにトレーニングされています。Embed は、テキストドキュメントから高品質の埋め込みを作成するようにトレーニングされたモデルのセットです。

埋め込みは、機械学習 (ML) における最も魅力的な概念の 1 つです。埋め込みは自然言語、レコメンデーション、検索アルゴリズムを処理する多くのアプリケーションの核となっています。どんな種類の文書、テキスト、画像、動画、音声でも、それをベクトルと呼ばれる一連の数字に変換することができます。埋め込みとは、具体的には、意味のある情報、セマンティックな関係、またはコンテキスト特性を取り込むような方法でデータをベクトルとして表現する手法を指します。簡単に言うと、類似したドキュメントを表すベクトルは互いに「近い」ため、埋め込みは便利です。より正式には、埋め込みとは、人間が認識している意味的類似性を、ベクトル空間における近接性に変換します。埋め込みは通常、トレーニングアルゴリズムまたはモデルによって生成されます。

Cohere Embed は、テキストドキュメントから埋め込みを生成するようにトレーニングされたモデルのファミリーです。Cohere Embed には、英語モデルと多言語モデルの 2 つの形式があり、どちらも Amazon Bedrock で利用できるようになりました。

テキスト埋め込みには、主に次の 3 つのユースケースがあります。

セマンティック検索 – 埋め込みにより、一連の文書を意味別に検索できるため、既存のキーワード照合システムと比較して、コンテキストとユーザーの意図をより適切に組み込んだ検索システムが実現します。

テキスト分類 – テキストを自動的に分類し、タイプに基づいてアクションを実行するシステムを構築します。例えば、E メールフィルタリングシステムでは、あるメッセージを営業担当に転送し、別のメッセージを第 2 階層のサポートにエスカレーションすることを決定する場合があります。

検索拡張生成 (RAG) – コンテキストで提供されるデータでプロンプトを強化することにより、大規模言語モデル (LLM) テキスト生成の品質を向上させます。プロンプトの強化に使用される外部データは、ドキュメントリポジトリ、データベース、API など、複数のデータソースから取得できます。

会社の方針を説明する何百もの文書があるとします。LLM で受け入れられるプロンプトのサイズには限りがあるため、プロンプトのコンテキストとして含めるには、これらの文書の関連部分を選択する必要があります。解決策は、すべてのドキュメントを埋め込みに変換し、OpenSearch などのベクトルデータベースに保存することです。

ユーザーがこのドキュメントのコーパスをクエリする場合、ユーザーの自然言語クエリをベクトルに変換します。そしてベクトルデータベースで類似検索を実行して、このクエリに最も関連性の高いドキュメントを見つけます。次に、ユーザーからの元のクエリと、ベクトルデータベースによって表示される関連ドキュメントを LLM のプロンプトに一緒に埋め込みます (意図的にこのような言い方をしました)。プロンプトのコンテキストに関連文書を含めると、LLM はより正確で適切な回答を生成できます。

Bedrock API を呼び出すか、AWS SDK または AWS コマンドラインインターフェイス (AWS CLI) を使用することにより、Cohere Command Light モデルと Embed モデルを任意のプログラミング言語で記述されたアプリケーションに統合できるようになりました。

Cohere Embed の操作
AWS ニュースブログを定期的に読まれている方はご存知のように、記事中のテクノロジーについてご紹介したいと思います。

11月13日、Cohere Command Light、Cohere Embed (英語)、Cohere Embed (多言語) という 3 つの異なるモデルをローンチしました。Cohere Command Light を呼び出すコードを記述するのは、既に Amazon Bedrock の一部になっている Cohere Command のコードを記述するのと変わりません。そこで、この例では、Cohere Embed とやり取りするコードの記述方法と、生成した埋め込みの使用方法を見ていくことにします。

Bedrock で新しいモデルを使い始めるには、まず AWS マネジメントコンソールに移動し、Bedrock ページを開きます。次に、左下のペインで [Model access] (モデルアクセス) を選択します。次に、右上の [Edit] (編集) ボタンを選択し、Cohere モデルへのアクセスを有効にします。

Bedrock - Cohere モデルのモデルアクティベーション

モデルにアクセスできることがわかったので、ノートパソコンでコードエディタを開きます。AWS コマンドラインインターフェイス (AWS CLI) が設定されていると仮定します。これにより、AWS SDK で AWS 認証情報を検索できるようになります。このデモでは Python を使用していますが、Bedrock はどの言語からでも呼び出すことができることを示したいと思います。また、Swift プログラミング言語で書かれた同じコードサンプルを使ったパブリック gist も共有しています。

Python に戻ったら、まず ListFoundationModels API 呼び出しを実行して Cohere Embed 向けの modelId を見つけます。

import boto3
import json
import numpy

bedrock = boto3.client(service_name='bedrock', region_name='us-east-1')

listModels = bedrock.list_foundation_models(byProvider='cohere')
print("\n".join(list(map(lambda x: f"{x['modelName']} : { x['modelId'] }", listModels['modelSummaries']))))

このコードを実行すると、次のリストが生成されます。

Command : cohere.command-text-v14
Command Light : cohere.command-light-text-v14
Embed English : cohere.embed-english-v3
Embed Multilingual : cohere.embed-multilingual-v3

cohere.embed-english-v3 モデル ID を選択し、テキストドキュメントを埋め込みに変換するコードを記述します。

cohereModelId = 'cohere.embed-english-v3'

# For the list of parameters and their possible values,
# check Cohere's API documentation at https://docs.cohere.com/reference/embed

coherePayload = json.dumps({
     'texts': ["This is a test document", "This is another document"],
     'input_type': 'search_document',
     'truncate': 'NONE'
})

bedrock_runtime = boto3.client(
    service_name='bedrock-runtime',
    region_name='us-east-1'
)
print("\nInvoking Cohere Embed...")
response = bedrock_runtime.invoke_model(
    body=coherePayload,
    modelId=cohereModelId,
    accept='application/json',
    contentType='application/json'
)

body = response.get('body').read().decode('utf-8')
response_body = json.loads(body)
print(np.array(response_body['embeddings']))

応答が印刷されます

[ 1.234375 -0.63671875 -0.28515625 ...0.38085938 -1.2265625 0.22363281]

埋め込みができたので、次のステップはアプリケーションによって異なります。この埋め込みをベクトルストアに保存したり、既存のストアにある類似のドキュメントを検索したりすることができます。

詳細については、Amazon Bedrock ワークショップのこのセクションで示されている実践的な指示に従うことを強くお勧めします。これは RAG のエンドツーエンドの例です。LLM に送信されるプロンプトで、ドキュメントの読み込み、埋め込みの生成、ベクトルストアへの埋め込みの保存、類似検索の実行、関連ドキュメントの使用方法が示されています。

可用性
Cohere Embed モデルは現在、Amazon Bedrock が利用できる、米国東部 (バージニア北部) と米国西部 (オレゴン) の 2 つの AWS リージョンをお使いのすべての AWS のお客様がご利用いただけます。

AWS はモデル推論の料金を請求します。Command Light の場合、AWS は処理された入力トークンまたは出力トークン単位で料金を請求します。Embed モデルでは、AWS は入力トークン単位で料金を請求します。前払いなしの従量制料金で、または定期的な料金で請求されるように選択できます。また、時間ベースの契約と引き換えに、アプリケーションのパフォーマンス要件を満たすのに十分なスループットをプロビジョニングすることもできます。Amazon Bedrock 料金ページに詳細が記載されています

この情報をご紹介したところで、Amazon Bedrock モデルと Cohere Embed モデルのテキスト埋め込みをお使いのアプリケーションで使用する準備が整いました。

構築しましょう!

— seb

原文はこちらです。