TwelveLabs Marengo Embed 3.0 - Amazon Bedrock

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

TwelveLabs Marengo Embed 3.0

TwelveLabs Marengo Embed 3.0 모델은 비디오, 텍스트, 오디오 또는 이미지 입력에서 향상된 임베딩을 생성합니다. 이 최신 버전은 유사성 검색, 클러스터링 및 기타 기계 학습 작업에 향상된 성능과 정확도를 제공합니다.

  • 공급자 - TwelveLabs

  • 모델 ID - twelvelabs.marengo-embed-3-0-v1:0

Marengo Embed 3.0은 몇 가지 주요 개선 사항을 제공합니다.

  • 확장된 비디오 처리 용량 - 최대 4시간의 비디오 및 오디오 콘텐츠를 처리합니다. 파일은 최대 6GB일 수 있으며, 이는 이전 버전의 두 배 용량입니다. 따라서 전체 스포츠 이벤트, 확장 훈련 비디오 및 전체 영화 제작을 분석하는 데 이상적입니다.

  • 향상된 스포츠 분석 - 모델은 상당한 개선을 제공합니다. 게임 플레이 역학, 플레이어 움직임 및 이벤트 감지를 더 잘 이해할 수 있습니다.

  • 글로벌 다국어 지원 - 12개 언어에서 36개 언어로 언어 기능을 확장했습니다. 이를 통해 글로벌 조직은 다양한 리전 및 시장에서 원활하게 작동하는 통합 검색 및 검색 시스템을 구축할 수 있습니다.

  • 멀티모달 검색 정밀도 - 이미지와 설명 텍스트를 단일 임베딩 요청으로 결합합니다. 이를 통해 시각적 유사성과 의미론적 이해를 결합하여 보다 정확하고 상황에 맞는 검색 결과를 제공할 수 있습니다.

  • 임베딩 차원 감소 - 1024에서 512로 감소하여 스토리지 비용을 절감할 수 있습니다.

TwelveLabs Marengo Embed 3.0 모델은 다음 표에서 Amazon Bedrock 런타임 작업을 지원합니다.

API 작업 지원되는 모델 유형 입력 양식 출력 양식

InvokeModel

미국 동부(버지니아 북부) - 기본 모델추론 프로필

유럽(아일랜드) - 추론 프로필

아시아 태평양(서울) - 기본 모델

텍스트

이미지

참고: 텍스트 및 이미지 인터리브도 지원됩니다.

임베딩

StartAsyncInvoke 기본 모델

비디오

오디오

이미지

텍스트

참고: 인터리브된 텍스트 및 이미지도 지원됩니다.

임베딩

참고

InvokeModel을 사용하여 검색 쿼리에 대한 임베딩을 생성합니다. StartAsyncInvoke를 사용하여 자산에 대한 임베딩을 대규모로 생성합니다.

입력에는 다음과 같은 할당량이 적용됩니다.

입력 양식 최대
텍스트 토큰 500개
이미지 이미지당 5MB
비디오(S3) 6GB, 4시간 길이
오디오(S3) 6GB, 4시간 길이
참고

base64 인코딩을 사용하여 오디오 또는 비디오를 인라인으로 정의하는 경우 요청 본문 페이로드가 Amazon Bedrock 25MB 모델 간접 호출 할당량을 초과하지 않는지 확인합니다.

TwelveLabs Marengo Embed 3.0 요청 파라미터

요청을 할 때 모델별 입력이 지정된 필드는 API 작업에 따라 달라집니다.

모델 입력 형식은 입력 형식에 따라 다릅니다.

Text
{ "inputType": "text", "text": { "inputText": "string" } }
Image
{ "inputType": "image", "image": { "mediaSource": { "base64String": "base64-encoded string", // base64String OR s3Location, exactly one "s3Location": { "uri": "s3://amzn-s3-demo-bucket/folder/dog.jpg", "bucketOwner": "123456789012" } } } }
Text & image
{ "inputType": "text_image", "text_image": { "inputText": "man walking a dog", "mediaSource": { "base64String": "base64-encoded string", // base64String OR s3Location, exactly one "s3Location": { "uri": "s3://amzn-s3-demo-bucket/folder/dog.jpg", "bucketOwner": "123456789012" } } } }
Audio
{ "inputType": "audio", "audio": { "mediaSource": { "base64String": "base64-encoded string", // base64String OR s3Location, exactly one "s3Location": { "uri": "s3://amzn-s3-demo-bucket/audio/a.wav", "bucketOwner": "123456789012" } }, "startSec": 0, "endSec": 6, "segmentation": { "method": "fixed", "fixed": { "durationSec": 6 } }, "embeddingOption": [ "audio", "transcription" ], // optional, default=both "embeddingScope": [ "clip", "asset" ] // optional, one or both } }
Video
{ "inputType": "video", "video": { "mediaSource": { "base64String": "base64-encoded string", // base64String OR s3Location, exactly one "s3Location": { "uri": "s3://amzn-s3-demo-bucket/video/clip.mp4", "bucketOwner": "123456789012" } }, "startSec": 0, "endSec": 6, "segmentation": { "method": "dynamic", // dynamic OR fixed, exactly one "dynamic": { "minDurationSec": 4 } "method": "fixed", "fixed": { "durationSec": 6 } }, "embeddingOption": [ "visual", "audio", "transcription" ], // optional, default=all "embeddingScope": [ "clip", "asset" ] // optional, one or both }, "inferenceId": "some inference id" }

입력 파라미터에 대한 자세한 내용은 다음 섹션을 확장하세요.

임베딩 방식입니다.

  • 유형: 문자열

  • 필수 항목 여부:

  • 유효한 값: text | image | text_image | audio | video

임베딩할 텍스트입니다.

  • 유형: 문자열

  • 필수: 예(호환되는 입력 유형의 경우)

  • 호환되는 입력 유형: 텍스트

미디어 소스에 대한 정보를 포함합니다.

  • 유형: 객체

  • 필수: 예(호환되는 유형인 경우)

  • 호환되는 입력 유형: 이미지, 비디오, 오디오

요청 본문의 mediaSource 객체 형식은 미디어가 Base64 인코딩 문자열 또는 S3 위치로 정의되는지 여부에 따라 달라집니다.

  • Base64-encoded 문자열

    { "mediaSource": { "base64String": "base64-encoded string" } }
    • base64String - 미디어용 Base64 인코딩 문자열입니다.

  • S3 위치 - S3 URI와 버킷 소유자를 지정합니다.

    { "s3Location": { "uri": "string", "bucketOwner": "string" } }
    • uri - 미디어가 포함된 S3 URI입니다.

    • bucketOwner - S3 버킷 소유자의 AWS계정 ID입니다.

검색할 임베딩 유형을 지정합니다.

  • 유형: 목록

  • 필수 항목 여부: 아니요

  • 목록 멤버에 유효한 값:

    • visual - 비디오의 시각적 임베딩입니다.

    • audio - 비디오에 오디오를 임베딩합니다.

    • transcription - 트랜스크립션된 텍스트의 임베딩입니다.

  • 기본값:

    • 동영상: ["시각", "오디오", "트랜스크립션"]

    • 오디오: ["audio", "transcription"]

  • 호환되는 입력 유형: 비디오, 오디오

검색할 임베딩의 범위를 지정합니다.

  • 유형: 목록

  • 필수 항목 여부: 아니요

  • 목록 멤버에 유효한 값:

    • clip - 각 클립에 대한 임베딩을 반환합니다.

    • asset - 전체 자산에 대한 임베딩을 반환합니다.

  • 호환되는 입력 유형: 비디오, 오디오

처리가 시작되어야 하는 클립의 초 단위 시점입니다.

  • 유형: Double

  • 필수 항목 여부: 아니요

  • 최솟값: 0

  • 기본값: 0

  • 호환되는 입력 유형: 비디오, 오디오

처리가 종료되어야 하는 초 단위 시점입니다.

  • 유형: Double

  • 필수 항목 여부: 아니요

  • 최소값: startSec + 세그먼트 길이

  • 최댓값: 미디어 지속 시간

  • 기본값: 미디어 기간

  • 호환되는 입력 유형: 비디오, 오디오

임베딩 생성을 위해 미디어를 세그먼트로 나누는 방법을 정의합니다.

  • 유형: 객체

  • 필수 항목 여부: 아니요

  • 호환되는 입력 유형: 비디오, 오디오

분할 객체에는 method 필드와 메서드별 파라미터가 포함됩니다.

  • method - 사용할 분할 방법입니다. 유효한 값: dynamic | fixed

  • dynamic - 비디오의 경우는 샷 경계 감지를 사용하여 콘텐츠를 동적으로 분할합니다. 다음으로 구성됩니다.

    • minDurationSec - 각 세그먼트의 최소 초 단위 기간입니다. 유형: 정수입니다. 범위: 1~5. 기본값: 4.

  • fixed - 콘텐츠를 동일한 기간의 세그먼트로 나눕니다. 다음으로 구성됩니다.

    • durationSec - 각 세그먼트의 초 단위 지속 시간입니다. 유형: 정수입니다. 범위: 1~10. 기본값: 6.

기본 동작:

  • 비디오: 샷 경계 감지와 함께 동적 분할을 사용합니다.

  • 오디오: 고정 분할을 사용합니다. 콘텐츠는 가능한 한 균등하게 분할되며 세그먼트는 10초에 가깝습니다.

추론 요청의 고유 식별자입니다.

  • 유형: 문자열

  • 필수 항목 여부: 아니요

TwelveLabs Marengo Embed 3.0 응답

출력 임베딩 및 관련 메타데이터의 위치는 간접 호출 방법에 따라 달라집니다.

  • InvokeModel - 응답 본문에 있습니다.

  • StartAsyncInvoke -에 정의된 S3 버킷에서 비동기 호출 작업이 완료된 s3OutputDataConfig후.

임베딩 벡터가 여러 개 있는 경우 출력은 각각 벡터와 관련 메타데이터를 포함하는 객체 목록입니다.

출력 임베딩 벡터의 형식은 다음과 같습니다.

{ "data": { "embedding": [ 0.111, 0.234, ... ], "embeddingOption": ["visual", "audio", "transcription" (for video input) | "audio", "transcription" (for audio input)], "embeddingScope": ["asset" | "clip"], "startSec": 0, "endSec": 4.2 } }

임베딩은 부동 소수점 배열로 반환됩니다.

이 응답이 표시되는 위치는 사용한 API 메서드에 따라 달라집니다.

  • InvokeModel - 응답 본문에 표시됩니다.

  • StartAsyncInvoke - 요청에서 지정한 S3 위치에 표시됩니다. 응답은를 반환합니다invocationArn. 이를 사용하여 비동기 호출에 대한 메타데이터를 가져올 수 있습니다. 여기에는 상태 및 결과가 기록되는 S3 위치가 포함됩니다.

응답 파라미터에 대한 자세한 내용은 다음 섹션을 확장하세요.

입력의 벡터 표현을 임베딩합니다.

  • 유형: Double 목록

임베딩의 유형입니다.

  • 유형: 문자열

  • 가능한 값:

    • 시각적 객체 - 비디오의 시각적 객체 임베딩입니다.

    • 오디오 - 비디오에 오디오를 임베딩합니다.

    • 트랜스크립션 - 트랜스크립션된 텍스트의 임베딩입니다.

  • 호환되는 입력 유형: 비디오, 오디오

검색할 임베딩의 범위를 지정합니다.

  • 유형: 문자열

다음 값 중 하나 이상을 포함할 수 있습니다.

  • 클립: 각 클립에 대한 임베딩을 반환합니다.

  • asset: 전체 자산에 대한 임베딩을 반환합니다.

클립의 시작 오프셋입니다.

  • 유형: Double

  • 호환되는 입력 유형: 비디오, 오디오

클립의 끝 오프셋입니다. 텍스트, 이미지 및 text_image 임베딩에는 적용되지 않습니다.

  • 유형: Double

  • 호환되는 입력 유형: 비디오, 오디오

TwelveLabs Marengo Embed 3.0 코드 예제

이 섹션에서는 Python을 사용하여 다양한 입력 유형으로 TwelveLabs Marengo Embed 3.0 모델을 사용하는 방법을 보여줍니다. 이 예제에서는 모델별 입력을 정의하고 모델 호출을 실행하는 방법을 보여줍니다.

참고

InvokeModel은 이미지 인터리브 입력이 있는 텍스트, 이미지 및 텍스트를 지원합니다. 비디오 및 오디오 입력의 경우 StartAsyncInvoke를 사용합니다.

다음 단계에 따라 코드를 통합합니다.

1. 모델별 입력 정의

입력 유형에 따라 모델별 입력을 정의합니다.

Text
# Create the model-specific input model_id = "twelvelabs.marengo-embed-3-0-v1:0" # Replace the us prefix depending on your region inference_profile_id = "us.twelvelabs.marengo-embed-3-0-v1:0" model_input = { "inputType": "text", "text": { "inputText": "man walking a dog" } }
Image
# Create the model-specific input model_id = "twelvelabs.marengo-embed-3-0-v1:0" # Replace the us prefix depending on your region inference_profile_id = "us.twelvelabs.marengo-embed-3-0-v1:0" model_input = { "inputType": "image", "image": { "mediaSource": { "s3Location": { "uri": "s3://amzn-s3-demo-bucket/my_image.png", "bucketOwner": "123456789012" } } } }
Text & image
# Create the model-specific input model_id = "twelvelabs.marengo-embed-3-0-v1:0" # Replace the us prefix depending on your region inference_profile_id = "us.twelvelabs.marengo-embed-3-0-v1:0" model_input = { "inputType": "text_image", "text_image": { "inputText": "man walking a dog", "mediaSource": { "s3Location": { "uri": "s3://amzn-s3-demo-bucket/my_image.jpg", "bucketOwner": "123456789012" } } } }
Audio
# Create the model-specific input model_id = "twelvelabs.marengo-embed-3-0-v1:0" # Replace the us prefix depending on your region inference_profile_id = "us.twelvelabs.marengo-embed-3-0-v1:0" model_input = { "inputType": "audio", "audio": { "mediaSource": { "s3Location": { "uri": "s3://amzn-s3-demo-bucket/my-audio.wav", "bucketOwner": "123456789012" } }, "startSec": 0, "endSec": 5, "segmentation": { "method": "fixed", "fixed": { "durationSec": 5 } }, "embeddingScope": ["clip", "asset"], "embeddingOption": ["audio"] } }
Video
# Create the model-specific input model_id = "twelvelabs.marengo-embed-3-0-v1:0" # Replace the us prefix depending on your region inference_profile_id = "us.twelvelabs.marengo-embed-3-0-v1:0" model_input = { "inputType": "video", "video": { "mediaSource": { "s3Location": { "uri": "s3://amzn-s3-demo-bucket/my-video.mp4", "bucketOwner": "123456789012" } }, "startSec": 10, "endSec": 20, "segmentation": { "method": "fixed", "fixed": { "durationSec": 5 } }, "embeddingOption": [ "visual", "audio" ], "embeddingScope": [ "clip", "asset" ] } }
2. 모델 입력을 사용하여 모델 간접 호출 실행

그런 다음 선택한 모델 간접 호출 방법에 해당하는 코드 조각을 추가합니다.

InvokeModel
# Run model invocation with InvokeModel import boto3 import json # Initialize the Bedrock Runtime client client = boto3.client('bedrock-runtime') # Make the request response = client.invoke_model( modelId=inference_profile_id, body=json.dumps(model_input) ) # Print the response body response_body = json.loads(response['body'].read().decode('utf-8')) print(response_body)
StartAsyncInvoke
# Run model invocation asynchronously import boto3 import json # Initalize the Bedrock Runtime client. client = boto3.client("bedrock-runtime") try: # Start the asynchronous job invocation = client.start_async_invoke( modelId=model_id, modelInput=model_input, outputDataConfig={ "s3OutputDataConfig": { "s3Uri": "s3://amzn-s3-demo-bucket" } } ) # Print the response JSON print("Response:") print(json.dumps(invocation, indent=2, default=str)) except Exception as e: # Implement error handling here. message = e.response["Error"]["Message"] print(f"Error: {message}")