Google VertexAI 멀티모달 임베딩
Google VertexAI 멀티모달 임베딩 (Multimodal Embeddings)
Vertex AI는 텍스트와 멀티모달 두 가지 유형의 임베딩 모델을 지원해요. 이 문서는 Vertex AI Multimodal embeddings API를 사용해 멀티모달 임베딩을 만드는 방법을 설명해요. 멀티모달 임베딩 모델은 이미지, 텍스트, 비디오 데이터 조합을 입력받아 1408차원 벡터를 생성해요.
출처: 문서
본문
| __ | EXPERIMENTAL. 실험 목적으로만 사용돼요. 아직 VectorStores와 호환되지 않아요. |
|---|
Vertex AI는 텍스트와 멀티모달 두 가지 유형의 임베딩 모델을 지원해요. 이 문서는 Vertex AI Multimodal embeddings API를 사용해 멀티모달 임베딩을 만드는 방법을 설명해요.
멀티모달 임베딩 모델은 이미지, 텍스트, 비디오 데이터의 조합을 포함할 수 있는 입력을 기반으로 1408차원 벡터를 생성해요. 그런 다음 임베딩 벡터는 이미지 분류나 비디오 콘텐츠 검토 같은 후속 작업에 사용될 수 있어요.
이미지 임베딩 벡터와 텍스트 임베딩 벡터는 동일한 차원을 가진 동일한 의미 공간(semantic space)에 있어요. 따라서 이미지로 텍스트를 검색하거나, 이미지로 비디오를 검색하는 등의 사용 사례에서 이 벡터들을 서로 바꿔 사용할 수 있어요.
| __ | VertexAI Multimodal API는 다음 제한 사항을 부과해요. |
|---|
| __ | 텍스트 전용 임베딩 사용 사례에는 Vertex AI text-embeddings model을 사용하는 것을 권장해요. |
|---|
Prerequisites
-
운영체제에 맞는 gcloud CLI를 설치하세요.
-
다음 명령을 실행해 인증하세요.
PROJECT_ID를 Google Cloud 프로젝트 ID로,ACCOUNT를 Google Cloud 사용자 이름으로 바꾸세요.gcloud config set project <PROJECT_ID> && gcloud auth application-default login
Add Repositories and BOM
Spring AI 아티팩트는 Maven Central과 Spring Snapshot 저장소에 게시돼요. 빌드 시스템에 이러한 저장소를 추가하려면 Artifact Repositories 섹션을 참고하세요.
의존성 관리를 돕기 위해 Spring AI는 프로젝트 전체에서 일관된 Spring AI 버전을 사용하도록 보장하는 BOM(bill of materials)을 제공해요. 빌드 시스템에 Spring AI BOM을 추가하려면 Dependency Management 섹션을 참고하세요.
Auto-configuration
| __ | Spring AI 자동 설정과 스타터 모듈 아티팩트 이름에 큰 변경이 있었어요. 자세한 내용은 upgrade notes를 참고해주세요. |
|---|
Spring AI는 VertexAI Embedding Model에 대한 Spring Boot 자동 설정을 제공해요. 활성화하려면 프로젝트의 Maven pom.xml 파일에 다음 의존성을 추가하세요:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-vertex-ai-embedding</artifactId>
</dependency>
또는 Gradle build.gradle 빌드 파일에 추가할 수도 있어요:
dependencies {
implementation 'org.springframework.ai:spring-ai-starter-model-vertex-ai-embedding'
}
| __ | 빌드 파일에 Spring AI BOM을 추가하려면 Dependency Management 섹션을 참고해주세요. |
|---|
Embedding Properties
프리픽스 spring.ai.vertex.ai.embedding은 VertexAI Embedding API에 연결할 수 있게 해주는 프로퍼티 프리픽스예요.
| Property | Description | Default |
|---|---|---|
| spring.ai.vertex.ai.embedding.project-id | Google Cloud Platform 프로젝트 ID | - |
| spring.ai.vertex.ai.embedding.location | 리전 | - |
| spring.ai.vertex.ai.embedding.api-endpoint | Vertex AI Embedding API 엔드포인트. | - |
| __ | 임베딩 자동 설정의 활성화/비활성화는 이제 프리픽스 spring.ai.model.embedding이 붙은 최상위 프로퍼티로 설정해요. 활성화하려면 spring.ai.model.embedding.multimodal=vertexai (기본값으로 활성화됨). 비활성화하려면 spring.ai.model.embedding.multimodal=none (또는 vertexai와 일치하지 않는 어떤 값). 이 변경은 여러 모델의 설정을 허용하기 위한 것이에요. |
|---|
프리픽스 spring.ai.vertex.ai.embedding.multimodal은 VertexAI 멀티모달 임베딩의 임베딩 모델 구현을 구성할 수 있게 해주는 프로퍼티 프리픽스예요.
| Property | Description | Default |
|---|---|---|
| spring.ai.vertex.ai.embedding.multimodal.enabled (제거됨, 더 이상 유효하지 않음) | Vertex AI Embedding API 모델 활성화. | true |
| spring.ai.model.embedding.multimodal=vertexai | Vertex AI Embedding API 모델 활성화. | vertexai |
| spring.ai.vertex.ai.embedding.multimodal.model | 다음 모델을 사용해 멀티모달 임베딩을 얻을 수 있어요: | multimodalembedding@001 |
| spring.ai.vertex.ai.embedding.multimodal.dimensions | 더 낮은 차원의 임베딩을 지정하세요. 기본적으로 임베딩 요청은 데이터 유형에 대해 1408 float 벡터를 반환해요. 텍스트와 이미지 데이터에 대해 더 낮은 차원의 임베딩(128, 256, 또는 512 float 벡터)을 지정할 수도 있어요. | 1408 |
| spring.ai.vertex.ai.embedding.multimodal.video-start-offset-sec | 비디오 세그먼트의 시작 오프셋(초). 지정하지 않으면 max(0, endOffsetSec - 120)로 계산돼요. | - |
| spring.ai.vertex.ai.embedding.multimodal.video-end-offset-sec | 비디오 세그먼트의 끝 오프셋(초). 지정하지 않으면 min(video length, startOffSec + 120)로 계산돼요. startOffSec와 endOffSec가 모두 지정되면 endOffsetSec은 min(startOffsetSec+120, endOffsetSec)으로 조정돼요. | - |
| spring.ai.vertex.ai.embedding.multimodal.video-interval-sec | 임베딩이 생성될 비디오의 간격. interval_sec의 최소값은 4예요. 간격이 4보다 작으면 InvalidArgumentError가 반환돼요. 간격의 최대값에는 제한이 없어요. 하지만 간격이 min(video length, 120s)보다 크면 생성된 임베딩의 품질에 영향을 미쳐요. 기본값: 16. | - |
Manual Configuration
VertexAiMultimodalEmbeddingModel은 DocumentEmbeddingModel을 구현해요.
프로젝트의 Maven pom.xml 파일에 spring-ai-vertex-ai-embedding 의존성을 추가하세요:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-vertex-ai-embedding</artifactId>
</dependency>
또는 Gradle build.gradle 빌드 파일에 추가할 수도 있어요:
dependencies {
implementation 'org.springframework.ai:spring-ai-vertex-ai-embedding'
}
| __ | 빌드 파일에 Spring AI BOM을 추가하려면 Dependency Management 섹션을 참고해주세요. |
|---|
다음으로 VertexAiMultimodalEmbeddingModel을 만들고 임베딩 생성에 사용해요:
VertexAiEmbeddingConnectionDetails connectionDetails =
VertexAiEmbeddingConnectionDetails.builder()
.projectId(System.getenv(<VERTEX_AI_GEMINI_PROJECT_ID>))
.location(System.getenv(<VERTEX_AI_GEMINI_LOCATION>))
.build();
VertexAiMultimodalEmbeddingOptions options = VertexAiMultimodalEmbeddingOptions.builder()
.model(VertexAiMultimodalEmbeddingOptions.DEFAULT_MODEL_NAME)
.build();
var embeddingModel = new VertexAiMultimodalEmbeddingModel(this.connectionDetails, this.options);
Media imageMedial = new Media(MimeTypeUtils.IMAGE_PNG, new ClassPathResource("/test.image.png"));
Media videoMedial = new Media(new MimeType("video", "mp4"), new ClassPathResource("/test.video.mp4"));
var document = new Document("Explain what do you see on this video?", List.of(this.imageMedial, this.videoMedial), Map.of());
EmbeddingResponse embeddingResponse = this.embeddingModel
.embedForResponse(List.of("Hello World", "World is big and salvation is near"));
DocumentEmbeddingRequest embeddingRequest = new DocumentEmbeddingRequest(List.of(this.document),
EmbeddingOptions.EMPTY);
EmbeddingResponse embeddingResponse = multiModelEmbeddingModel.call(this.embeddingRequest);
assertThat(embeddingResponse.getResults()).hasSize(3);