멀티모달용 임베딩(multimodalembedding
) 모델은 제공된 입력을 기반으로 차원 벡터(128, 256, 512, 1,408 차원)를 생성합니다. 이 입력에는 텍스트, 이미지 또는 동영상의 모든 조합이 포함될 수 있습니다. 그런 다음 임베딩 벡터를 이미지 분류 또는 콘텐츠 검토와 같은 다른 후속 태스크에 사용할 수 있습니다.
텍스트, 이미지, 동영상 임베딩 벡터는 동일한 차원을 사용하는 동일한 시맨틱 공간에 위치합니다. 따라서 텍스트로 이미지를 검색하거나 이미지로 동영상을 검색하는 등의 사용 사례에 맞게 이러한 벡터를 서로 교환해서 사용할 수 있습니다.
사용 사례
멀티모달 임베딩의 일반적인 사용 사례는 다음과 같습니다.
- 이미지 또는 동영상 분류: 이미지 또는 동영상을 입력으로 사용하여 하나 이상의 클래스(라벨)를 예측합니다.
- 이미지 검색: 관련되었거나 유사한 이미지를 검색합니다.
- 동영상 콘텐츠 검색
- 시맨틱 검색 사용: 텍스트를 입력으로 받고 쿼리와 일치하는 순위가 지정된 프레임 세트를 반환합니다.
- 유사성 검색 사용:
- 동영상을 입력으로 받고 쿼리와 일치하는 동영상 세트를 반환합니다.
- 이미지를 입력으로 받고 쿼리와 일치하는 동영상 세트를 반환합니다.
- 추천: 이미지 또는 동영상을 기반으로 제품 또는 광고 추천을 생성합니다(유사성 검색).
콘솔에서 이 모델을 살펴보려면 Model Garden에서 멀티모달용 임베딩 모델 카드를 참조하세요.
<a{: class="button button-primary" l10n-attrs-original-order="href,target,class,track-name,track-type" l10n-encrypted-href="SAHUNDUxy6reWq97H1UtVltigmNHgUGOXn/QVSGplOi71dheYhG9dKuv3S+0ajmQkfzB9oP/Mo2x7xIe1klR5WMcFGqgYIW2vdvnDTxO1+88jFCqaIV0kUsj2YehOF0AqvP4zdF86Pqj1NbCoHpRoQ==" target="console" track-name="consoleLink" track-type="tasks" }="">Model Garden으로 이동</a{:>
HTTP 요청
POST https://us-central1-aiplatform.googleapis.com/v1/projects/${PROJECT}/locations/us-central1/publishers/google/models/multimodalembedding:predict
요청 본문
{
"instances": [
{
"text": string,
"image": {
// Union field can be only one of the following:
"bytesBase64Encoded": string,
"gcsUri": string,
// End of list of possible types for union field.
"mimeType": string
},
"video": {
// Union field can be only one of the following:
"bytesBase64Encoded": string,
"gcsUri": string,
// End of list of possible types for union field.
"videoSegmentConfig": {
"startOffsetSec": integer,
"endOffsetSec": integer,
"intervalSec": integer
}
},
"parameters": {
"dimension": integer
}
}
]
}
멀티모달 생성 모델 multimodal
embeddings
에 다음 매개변수를 사용합니다. 자세한 내용은 멀티모달 임베딩 가져오기를 참조하세요.
매개변수 | 설명 | 사용 가능한 값 |
---|---|---|
instances |
정보를 가져올 데이터(텍스트, 이미지, 동영상)가 있는 객체가 포함된 배열입니다. | 배열(객체 1개 허용) |
text |
임베딩을 만들려는 입력 텍스트입니다. | 문자열(최대 32개 토큰) |
image.bytesBase64Encoded |
임베딩을 가져올 이미지입니다. image.bytesBase64Encoded 를 지정하면 image.gcsUri 를 설정할 수 없습니다. |
Base64로 인코딩된 이미지 문자열(BMP, GIF, JPG 또는 PNG 파일, 최대 20MB) |
image.gcsUri |
임베딩을 가져올 이미지의 Cloud Storage URI입니다. image.gcsUri 를 지정하면 image.bytesBase64Encoded 를 설정할 수 없습니다. |
Cloud Storage에 있는 이미지 파일의 문자열 URI(BMP, GIF, JPG 또는 PNG 파일, 최대 20MB) |
image.mimeType |
선택사항입니다. 지정한 이미지의 MIME 유형입니다. | 문자열(image/bmp , image/gif , image/jpeg 또는 image/png ) |
video.bytesBase64Encoded |
임베딩을 가져올 동영상입니다. video.bytesBase64Encoded 를 지정하면 video.gcsUri 를 설정할 수 없습니다. |
Base64로 인코딩된 동영상 문자열(AVI, FLV, MKV, MOV, MP4, MPEG, MPG, WEBM 또는 WMV 파일) |
video.gcsUri |
임베딩을 가져올 동영상의 Cloud Storage URI입니다. video.gcsUri 를 지정하면 video.bytesBase64Encoded 를 설정할 수 없습니다. |
Cloud Storage에 있는 동영상 파일의 문자열 URI(AVI, FLV, MKV, MOV, MP4, MPEG, MPG, WEBM 또는 WMV 파일) |
videoSegmentConfig.startOffsetSec |
선택사항입니다. 모델이 임베딩 감지를 시작하는 시간(초)입니다. 기본값: 0 | 정수 |
videoSegmentConfig.endOffsetSec |
선택사항입니다. 모델이 임베딩 감지를 종료하는 시간(초)입니다. 기본값: 120 | 정수 |
videoSegmentConfig.intervalSec |
선택사항입니다. 임베딩이 생성되는 동영상 데이터 세그먼트의 시간(초)입니다. 이 값은 동영상 임베딩 모드(Essential, Standard 또는 Plu)에 해당하며 기능 가격 책정에 영향을 미칩니다. Essential 모드( intervalSec >= 15): 임베딩이 생성되는 동영상의 세그먼트가 가장 적습니다. 최저 비용 옵션입니다.Standard 등급(8 <= intervalSec < 15): Essential 모드에 비해 임베딩이 생성되는 동영상 세그먼트가 더 많지만 Plus 모드보다는 적습니다. 중간 비용 옵션입니다.Plus 모드(4 <= intervalSec < 8): 대부분의 동영상 세그먼트에서 임베딩이 생성됩니다. 가장 높은 비용 옵션입니다.기본값: 16(Essential 모드) |
정수(최솟값: 4) |
parameters.dimension |
선택사항입니다. 임베딩을 생성할 벡터 차원입니다(텍스트 또는 이미지만 해당). 설정하지 않으면 기본값인 1,408이 사용됩니다. | 정수(128 , 256 , 512 또는 1408 [기본값]) |
샘플 요청
REST
다음 예시에서는 이미지, 텍스트, 동영상 데이터를 사용합니다. 요청 본문에서 이러한 데이터 유형의 조합을 사용할 수 있습니다.
또한 이 샘플에서는 Cloud Storage에 있는 동영상을 사용합니다. video.bytesBase64Encoded
필드를 사용하여 동영상의 base64 인코딩 문자열 표현을 제공할 수도 있습니다.
요청 데이터를 사용하기 전에 다음을 바꿉니다.
- LOCATION: 프로젝트의 리전입니다. 예를 들면
us-central1
,europe-west2
,asia-northeast3
입니다. 사용 가능한 리전 목록은 Vertex AI의 생성형 AI 위치를 참조하세요. - PROJECT_ID: Google Cloud 프로젝트 ID입니다.
- TEXT: 임베딩을 가져올 대상 텍스트. 예를 들면
a cat
입니다. - IMAGE_URI: 임베딩을 가져올 대상 동영상의 Cloud Storage URI입니다.
예를 들면
gs://my-bucket/embeddings/supermarket-img.png
입니다.이미지를 base64 인코딩 바이트 문자열로 제공할 수도 있습니다.
[...] "image": { "bytesBase64Encoded": "B64_ENCODED_IMAGE" } [...]
- VIDEO_URI: 임베딩을 가져올 대상 동영상의 Cloud Storage URI입니다.
예를 들면
gs://my-bucket/embeddings/supermarket-video.mp4
입니다.동영상을 base64 인코딩 바이트 문자열로 제공할 수도 있습니다.
[...] "video": { "bytesBase64Encoded": "B64_ENCODED_VIDEO" } [...]
videoSegmentConfig
(START_SECOND, END_SECOND, INTERVAL_SECONDS). 선택사항. 임베딩이 생성될 특정 동영상 세그먼트(초)입니다.예를 들면 다음과 같습니다.
[...] "videoSegmentConfig": { "startOffsetSec": 10, "endOffsetSec": 60, "intervalSec": 10 } [...]
이 구성을 사용하면 10초에서 60초 사이의 동영상 데이터가 지정되고 다음 10초 비디오 간격([10, 20), [20, 30), [30, 40), [40, 50), [50, 60))에 대한 임베딩이 생성됩니다. 이 동영상 간격(
"intervalSec": 10
)은 Standard 동영상 임베딩 모드에 속하며 사용자에게 Standard 모드 가격 책정 요금이 부과됩니다.videoSegmentConfig
를 생략하면 서비스에서 기본값"videoSegmentConfig": { "startOffsetSec": 0, "endOffsetSec": 120, "intervalSec": 16 }
을 사용합니다. 이 동영상 간격("intervalSec": 16
)은 Essential 동영상 임베딩 모드에 속하며 사용자에게 Essential 모드 가격 책정 요금이 부과됩니다.
HTTP 메서드 및 URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/multimodalembedding@001:predict
JSON 요청 본문:
{ "instances": [ { "text": "TEXT", "image": { "gcsUri": "IMAGE_URI" }, "video": { "gcsUri": "VIDEO_URI", "videoSegmentConfig": { "startOffsetSec": START_SECOND, "endOffsetSec": END_SECOND, "intervalSec": INTERVAL_SECONDS } } } ] }
요청을 보내려면 다음 옵션 중 하나를 선택합니다.
curl
요청 본문을 request.json
파일에 저장하고 다음 명령어를 실행합니다.
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/multimodalembedding@001:predict"
PowerShell
요청 본문을 request.json
파일에 저장하고 다음 명령어를 실행합니다.
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/multimodalembedding@001:predict" | Select-Object -Expand Content
{ "predictions": [ { "textEmbedding": [ 0.0105433334, -0.00302835181, 0.00656806398, 0.00603460241, [...] 0.00445805816, 0.0139605571, -0.00170318608, -0.00490092579 ], "videoEmbeddings": [ { "startOffsetSec": 0, "endOffsetSec": 7, "embedding": [ -0.00673126569, 0.0248149596, 0.0128901172, 0.0107588246, [...] -0.00180952181, -0.0054573305, 0.0117037306, 0.0169312079 ] } ], "imageEmbedding": [ -0.00728622358, 0.031021487, -0.00206603738, 0.0273937676, [...] -0.00204976718, 0.00321615417, 0.0121978866, 0.0193375275 ] } ], "deployedModelId": "DEPLOYED_MODEL_ID" }
Python
Python용 Vertex AI SDK를 설치하거나 업데이트하는 방법은 Python용 Vertex AI SDK 설치를 참조하세요. 자세한 내용은 Python API 참고 문서를 확인하세요.
Node.js
이 샘플을 사용해 보기 전에 Vertex AI 빠른 시작: 클라이언트 라이브러리 사용의 Node.js 설정 안내를 따르세요. 자세한 내용은 Vertex AI Node.js API 참고 문서를 참조하세요.
Vertex AI에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Java
이 샘플을 사용해 보기 전에 Vertex AI 빠른 시작: 클라이언트 라이브러리 사용의 Java 설정 안내를 따르세요. 자세한 내용은 Vertex AI Java API 참고 문서를 참조하세요.
Vertex AI에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
응답 본문
{
"predictions": [
{
"textEmbedding": [
float,
// array of 128, 256, 512, or 1408 float values
float
],
"imageEmbedding": [
float,
// array of 128, 256, 512, or 1408 float values
float
],
"videoEmbeddings": [
{
"startOffsetSec": integer,
"endOffsetSec": integer,
"embedding": [
float,
// array of 1408 float values
float
]
}
]
}
],
"deployedModelId": string
}
응답 요소 | 설명 |
---|---|
imageEmbedding |
부동 소수점 수의 128, 256, 512 또는 1,408 차원 목록입니다. |
textEmbedding |
부동 소수점 수의 128, 256, 512 또는 1,408 차원 목록입니다. |
videoEmbeddings |
임베딩이 생성된 동영상 세그먼트의 시작 및 종료 시간(초)이 포함된 부동 소수점 수의 1,408 차원 목록입니다. |