아마존 타이탄 임베딩 텍스트 - Amazon Bedrock

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

아마존 타이탄 임베딩 텍스트

Titan Embeddings G1 - Text추론 파라미터 사용을 지원하지 않습니다. 다음 섹션에서는 요청 및 응답 형식을 자세히 설명하고 코드 예제를 제공합니다.

요청 및 응답

요청 본문은 InvokeModel요청 body 필드에 전달됩니다.

V2 Request

입력텍스트 매개변수는 필수입니다. 정규화 및 치수 매개변수는 선택사항입니다.

  • InputText — 임베딩으로 변환할 텍스트를 입력합니다.

  • normalize - 출력 임베딩을 정규화할지 여부를 나타내는 플래그입니다. 기본값은 true입니다.

  • 치수 - 출력 임베딩이 가져야 하는 차원 수입니다. 허용되는 값은 1024 (기본값), 512, 256입니다.

{ "inputText": string, "dimensions": int, "normalize": boolean }
V2 Response

필드가 아래에 설명되어 있습니다.

  • 임베딩 — 제공한 입력의 임베딩 벡터를 나타내는 배열입니다.

  • 입력 TextTokenCount — 입력의 토큰 개수.

{ "embedding": [float, float, ...], "inputTextTokenCount": int }
G1 Request

사용할 수 있는 유일한 필드는 임베딩으로 변환할 텍스트를 포함할 수 있는 필드입니다inputText.

{ "inputText": string }
G1 Response

응답에는 다음 필드가 포함됩니다. body

{ "embedding": [float, float, ...], "inputTextTokenCount": int }

필드가 아래에 설명되어 있습니다.

  • 임베딩 — 제공한 입력의 임베딩 벡터를 나타내는 배열입니다.

  • 입력 TextToken 개수 — 입력에 포함된 토큰 수입니다.

예제 코드

다음 예는 Amazon Titan Embeddings 모델을 호출하여 임베딩을 생성하는 방법을 보여줍니다. 사용 중인 모델에 해당하는 탭을 선택합니다.

Amazon Titan Embeddings G1 - Text
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 """ Shows how to generate embeddings with the Amazon Titan Embeddings G1 - Text model (on demand). """ import json import logging import boto3 from botocore.exceptions import ClientError logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) def generate_embeddings(model_id, body): """ Generate a vector of embeddings for a text input using Amazon Titan Embeddings G1 - Text on demand. Args: model_id (str): The model ID to use. body (str) : The request body to use. Returns: response (JSON): The embedding created by the model and the number of input tokens. """ logger.info("Generating embeddings with Amazon Titan Embeddings G1 - Text model %s", model_id) bedrock = boto3.client(service_name='bedrock-runtime') accept = "application/json" content_type = "application/json" response = bedrock.invoke_model( body=body, modelId=model_id, accept=accept, contentType=content_type ) response_body = json.loads(response.get('body').read()) return response_body def main(): """ Entrypoint for Amazon Titan Embeddings G1 - Text example. """ logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s") model_id = "amazon.titan-embed-text-v1" input_text = "What are the different services that you offer?" # Create request body. body = json.dumps({ "inputText": input_text, }) try: response = generate_embeddings(model_id, body) print(f"Generated embeddings: {response['embedding']}") print(f"Input Token count: {response['inputTextTokenCount']}") except ClientError as err: message = err.response["Error"]["Message"] logger.error("A client error occurred: %s", message) print("A client error occured: " + format(message)) else: print(f"Finished generating embeddings with Amazon Titan Embeddings G1 - Text model {model_id}.") if __name__ == "__main__": main()
Amazon 타이탄 텍스트 임베딩 V2
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 """ Shows how to generate embeddings with the Amazon Titan Text Embeddings V2 Model """ import json import logging import boto3 from botocore.exceptions import ClientError logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) def generate_embeddings(model_id, body): """ Generate a vector of embeddings for a text input using Amazon Titan Text Embeddings G1 on demand. Args: model_id (str): The model ID to use. body (str) : The request body to use. Returns: response (JSON): The embedding created by the model and the number of input tokens. """ logger.info("Generating embeddings with Amazon Titan Text Embeddings V2 model %s", model_id) bedrock = boto3.client(service_name='bedrock-runtime') accept = "application/json" content_type = "application/json" response = bedrock.invoke_model( body=body, modelId=model_id, accept=accept, contentType=content_type ) response_body = json.loads(response.get('body').read()) return response_body def main(): """ Entrypoint for Amazon Titan Embeddings V2 - Text example. """ logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s") model_id = "amazon.titan-embed-text-v2:0" input_text = "What are the different services that you offer?" # Create request body. body = json.dumps({ "inputText": input_text, "dimensions": 512, "normalize": True }) try: response = generate_embeddings(model_id, body) print(f"Generated embeddings: {response['embedding']}") print(f"Input Token count: {response['inputTextTokenCount']}") except ClientError as err: message = err.response["Error"]["Message"] logger.error("A client error occurred: %s", message) print("A client error occured: " + format(message)) else: print(f"Finished generating embeddings with Amazon Titan Text Embeddings V2 model {model_id}.") if __name__ == "__main__": main() </programlisting> <para><emphasis role="bold">Configure your accuracy-cost tradeoff as you go</emphasis></para> <para>While normalization is available via API customers can also reduce the embedding dimension after generating the embeddings allowing them to tradeoff between accuracy and cost as their need evolve. This empower customers to generate 1024-dim index embeddings, store them in low-cost storage options such as S3 and load their 1024, 512 or 256 dimension version in their favorite vector DB as they go. </para> <para>To reduce a given embedding from 1024 to 256 dimensions you can use the following example logic:</para> <programlisting language="json">import numpy as np from numpy import linalg def normalize_embedding(embedding: np.Array): ''' Args: embedding: Unnormlized 1D/2D numpy array - 1D: (emb_dim) - 2D: (batch_size, emb_dim) Return: np.array: Normalized 1D/2D numpy array ''' return embedding/linalg.norm(embedding, dim=-1, keep_dim=True) def reduce_emb_dim(embedding: np.Array, target_dim:int, normalize:bool=True) -> np.Array: ''' Args: embedding: Unnormlized 1D/2D numpy array. Expected shape: - 1D: (emb_dim) - 2D: (batch_size, emb_dim) target_dim: target dimension to reduce the embedding to Return: np.array: Normalized 1D numpy array ''' smaller_embedding = embedding[..., :target_dim] if normalize: smaller_embedding = normalize_embedding(smaller_embedding) return smaller_embedding if __name__ == '__main__': embedding = # bedrock client call reduced_embedding = # bedrock client call with dim=256 post_reduction_embeddings = reduce_emb_dim(np.array(embeddings), dim=256) print(linalg.norm(np.array(reduced_embedding) - post_reduction_embeddings))