주요 컨텐츠로 이동

다중 모달 RAG로 환자 데이터 통합하기

Databrick의 Vector Search를 사용하여 다중 모달 임베딩을 활용하여 RAG 애플리케이션에 다중 모달 기능을 향상시키는 방법을 이해하십시오

Code displaying data analytics and AI embedding concepts.

Published: June 6, 2025

의료 및 생명 공학6분 소요

Summary

  • 크로스-모달 슈퍼파워: 다중 모달 임베딩 모델은 태그나 메타데이터 없이 텍스트 쿼리를 사용하여 다른 데이터 유형을 공유 의미 공간에 배치함으로써 다른 모달리티를 통해 검색할 수 있게 합니다.
  • 구축, 검색, 배포: 이미지를 임베딩으로 변환하고, Delta 테이블에 저장하고, Vector Search를 사용하여 강력한 유사성 검색을 가능하게 함으로써 Databricks에서 완전한 다중 모달 RAG 시스템을 만드는 방법을 배웁니다.
  • 원활한 콘텐츠 연결: 모달리티 간의 간극을 메우고, 혼합 콘텐츠 유형이 있는 복잡한 문서인 PDF조차도 완전히 검색 가능하고 문맥적으로 관련성이 있는 RAG 애플리케이션을 향상시킵니다.

소개: 다양한 데이터가 AI를 가능하게 합니다

다중 모달 검색은 현대 AI 시스템에서 중요한 도전 과제를 나타냅니다. 전통적인 검색 시스템들은 광범위한 메타데이터나 태깅 없이는 다양한 데이터 유형을 효과적으로 검색하는 데 어려움을 겪습니다. 이는 텍스트, 이미지, 오디오 등 다양한 콘텐츠를 대량으로 관리하는 헬스케어 회사들에게 특히 문제가 되며, 이로 인해 비구조화된 데이터 소스가 종종 발생합니다.

비구조화된 데이터와 구조화된 데이터를 비교하는 이미지.
Figure 1: These sources do not communicate well together, especially if they originate from different system

의료 분야에서 일하는 사람이라면 비구조화된 데이터와 구조화된 데이터를 병합하는 어려움을 이해할 것입니다. 이의 대표적인 예는 임상 문서입니다, 여기서 환자의 손으로 쓴 임상 메모나 퇴원 요약서가 종종 PDF, 이미지, 그리고 비슷한 형식으로 제출됩니다. 이것은 수동으로 변환하거나 광학 문자 인식 (OCR)을 사용하여 필요한 정보를 찾아야 합니다. 이 단계를 거친 후에도, 데이터를 기존의 구조화된 데이터와 매핑하여 효과적으로 활용해야 합니다. 

이 블로그에서는 다음을 검토할 것입니다: 

  1. 오픈 소스 다중 모달 모델을 Databricks에 로드하는 방법
  2. 오픈 소스 모델을 사용하여 비구조화된 데이터에 임베딩을 생성합니다
  3. 이 임베딩들을 벡터 검색 인덱스에 저장합니다 (AWS | Azure | GCP)
  4. Genie Spaces를 사용하여 구조화된 데이터를 쿼리합니다 (AWS | Azure | GCP)을 사용하여 구조화된 데이터를 쿼리합니다 
  5. 사용 DSPy 입력에 응답하기 위해 Genie Space와 Vector Search Index를 사용하는 다기능 호출 에이전트를 만드십시오 

이 블로그의 끝부분에서는 다중 모달 임베딩이 헬스케어에 다음과 같은 기능을 가능하게 하는 방법을 확인하게 될 것입니다: 

  1. PDF의 모든 것을 사용하여 더 다양한 데이터를 사용하십시오, 텍스트만이 아닙니다
  2. 어떤 데이터든 함께 사용할 수 있는 유연성. 특히 건강관리 분야에서는 어떤 종류의 데이터를 사용해야 할지 알 수 없을 수 있으므로 이는 특히 가치있습니다 
  3. 에이전트를 통한 데이터 통합, 더욱 포괄적인 답변을 가능하게 함
에이전트와 멀티모달 임베딩을 통해 데이터가 통합될 수 있는 개념적 아이디어
Figure 2: A conceptual idea of how your data can be unified through Agents and Multi-Modal Embeddings

임베딩이란 무엇인가요?

임베딩 공간(AWS | Azure | GCP)은 레코드의 n차원 수학적 표현으로, 하나 이상의 데이터 모달리티를 부동 소수점 숫자의 벡터로 저장할 수 있습니다. 잘 구성된 임베딩 공간에서는 유사한 의미의 레코드가 유사한 공간을 차지하는 것이 유용합니다. 예를 들어, 말의 사진, "트럭"이라는 단어, 개가 짖는 소리의 오디오 녹음을 가지고 있다고 상상해보십시오. 이 세 가지 완전히 다른 데이터 포인트를 다중 모달 임베딩 모델에 전달하고 다음을 받습니다:

  • 말 사진: [0.92, 0.59, 0.17]
  • “트럭”: [0.19, 0.93, 0.81]
  • 개 짖는 소리: [0.94, 0.11, 0.86]

여기에 임베딩 공간에서 숫자가 존재할 위치의 시각적 표현이 있습니다:

임베딩 공간에서 고차원 데이터 포인트의 2D 표현.

실제로는 임베딩 공간의 차원이 수백 또는 수천에 이르지만, 설명을 위해 3차원 공간을 사용해봅시다. 이 벡터들의 첫 번째 위치는 “동물성”을, 두 번째는 “교통성”을, 세 번째는 “소리 크기”를 나타낸다고 생각해볼 수 있습니다. 이것은 임베딩을 고려할 때 의미가 있지만, 일반적으로 각 차원이 무엇을 나타내는지는 알 수 없습니다. 중요한 것은 이들이 레코드의 의미론적 의미를 나타낸다는 것입니다.

멀티모달 임베딩 공간을 만드는 여러 가지 방법이 있으며, 이에는 여러 인코더를 동시에 훈련시키는 것 (예: CLIP), 교차 주의 메커니즘을 사용하는 것 (예: DALL-E), 또는 다양한 후훈련 정렬 방법을 사용하는 것이 포함됩니다. 이러한 방법들은 기록의 의미가 원래의 모달리티를 초월하고 다른 이질적인 기록이나 형식과 공유 공간을 차지하게 합니다.

이 공유된 의미 공간이 강력한 크로스-모달 검색 기능을 가능하게 합니다. 텍스트 쿼리와 이미지가 유사한 벡터 표현을 공유할 때, 그들은 아마도 유사한 의미론적 의미를 공유하게 됩니다. 이를 통해 명시적인 태그나 메타데이터 없이도 텍스트 설명을 기반으로 관련 이미지를 찾을 수 있습니다.

다중 모달 임베딩 모델: 임베딩 공간 공유

멀티모달 검색을 효과적으로 구현하려면, 공유 벡터 공간 내에서 다양한 데이터 유형에 대한 임베딩을 생성할 수 있는 모델이 필요합니다. 이 모델들은 다양한 모달리티 간의 관계를 이해하고 이를 통합된 수학적 공간에서 표현하기 위해 특별히 설계되었습니다.

2025년 6월 현재로서 여러 강력한 다중 모달 임베딩 모델이 사용 가능합니다:

  • Cohere의 Multimodal Embed 4: 텍스트와 이미지 데이터를 모두 높은 정확도와 성능으로 임베딩하는 데 뛰어난 모델입니다.
  • Nomic-Embed: 다양한 데이터 유형을 통합된 공간에 임베딩하는 데 강력한 기능을 제공합니다. 이는 소수의 완전히 오픈 소스 모델 중 하나입니다.
  • Meta ImageBind: 이미지, 텍스트, 오디오, 깊이, 열, IMU 데이터를 포함한 여섯 가지 모달리티를 처리할 수 있는 인상적인 모델입니다.
  • CLIP (Contrastive Language-Image pretraining): OpenAI에서 개발한 CLIP은 다양한 이미지-텍스트 쌍에 대해 학습되어 시각적 데이터와 텍스트 데이터 사이의 간극을 효과적으로 연결할 수 있습니다.

주요 아키텍처 고려사항

Databricks에서는 인프라와 도구를 제공하여 사용 사례에 맞게 커스터마이징할 수 있는 종단간 솔루션을 호스팅, 평가, 개발할 수 있습니다. 이 사용 사례를 배포하기 시작할 때 다음 시나리오를 고려해 보세요: 

확장성 & 성능

  • 데이터셋 크기에 따라 처리 옵션을 선택해야 합니다: 작은 데이터셋이나 개발 작업에 대한 메모리 내 처리, 대비 모델 서빙(AWS | Azure | GCP) 고 처리량이 필요한 프로덕션 작업에 대해
  • Databricks Vector Storage Optimized 엔드포인트 대 Standard 엔드포인트 (AWS | Azure | GCP). 벡터가 많다면, 더 많은 벡터(약 250M+)를 저장하기 위해 저장소 최적화를 고려해보세요. 

비용 고려 사항

  • 대규모 구현의 경우, 임베딩 모델을 제공하고 AI Query를 사용하여(AWS | Azure | GCP)을 사용하여 배치 추론은 메모리 내 처리보다 효율적입니다.
  • 벡터 검색 인덱스 (AWS | Azure | GCP)에 대해 트리거 또는 연속 업데이트가 필요한지 결정하세요
  • 다시, 스토리지 최적화 엔드포인트와 표준 엔드포인트를 고려해 보세요.
  • 이 비용들을 Serverless Real-time Inference SKU 로 추적할 수 있습니다.
  • 예산 정책을 사용하십시오 (AWS | Azure | GCP) 소비를 정확하게 추적하고 있는지 확인하기 위해 

운영 우수성

  • 파이프라인과 워크플로우 (AWS | Azure | GCP) 및 Databricks Asset Bundles (AWS | Azure | GCP)를 Databricks에서 사용하여 소스 데이터의 변경 사항을 감지하고 임베딩을 적절하게 업데이트하세요
  • Vector Search Delta Sync를 사용하면 (AWS | Azure | GCP) 인덱스로의 동기화를 완전히 자동화할 수 있으며, 파이프라인 관리가 필요하지 않습니다.
  • Vector Search는 신뢰성을 보장하기 위해 실패, 재시도, 최적화를 자동으로 처리합니다.

네트워크 및 보안 고려사항

  • Databricks Compliance Profiles를 사용하십시오 (AWS | Azure | GCP) 작업 공간에서 HIPAA 준수를 위해
  • Databricks Secret Manager 또는 Key Management Systems를 사용하여 비밀을 관리하세요.
  • 신뢰와 안전에 대한 설명을 검토하십시오 (AWS | Azure | GCP) Databricks가 AI 관리 서비스를 위해 데이터를 어떻게 처리하는지에 대한 문서를 확인하십시오. 

기술 솔루션 분석

이 솔루션의 전체 구현을 보려면 여기에 있는 저장소를 방문하세요: Github 링크

이 예제에서는 구조화된 데이터로 합성 환자 정보를 사용하고, 비구조화된 데이터로는 PDF 형식의 샘플 혜택 설명을 사용합니다. 먼저, Genie Space와 함께 사용하기 위해 합성 데이터가 생성됩니다. 그런 다음 Nomic 다중 모달 임베딩 모델, 최첨단 오픈 소스 다중 모달 임베딩 모델,이 Databricks 모델 서빙에 로드되어 온라인에서 찾은 샘플 혜택 설명에 대한 임베딩을 생성합니다. 

이 과정은 복잡해 보이지만, Databricks는 완전한 엔드-투-엔드 솔루션을 가능하게 하는 내장 도구를 제공합니다. 고수준에서 보면, 과정은 다음과 같습니다: 

  1. Autoloader를 통한 Ingestion (AWS | Azure | GCP)
  2. Lakeflow 선언적 파이프라인을 사용한 ETL (AWS | Azure | GCP)
  3. Databricks에 호스팅된 다중 모달 임베딩 모델을 사용한 임베딩 생성 
  4. 벡터 검색 인덱스에 임베딩 호스팅 (AWS | Azure | GCP)
  5. 모델 서빙으로 서빙하기 (AWS | Azure | GCP)
  6. Agent Framework 를 사용하여 Agent를 보호, 배포, 관리합니다.

Genie Space 생성

이 지니 스페이스는 자연어를 SQL 쿼리로 변환하는 도구로 사용되어 구조화된 데이터를 쿼리합니다. 

단계 1: 합성 환자 데이터 생성

이 예제에서, Faker 라이브러리 는 무작위 환자 정보를 생성하는 데 사용될 것입니다. 우리는 데이터를 다양화하기 위해 두 개의 테이블을 만들 것입니다: 환자 방문과 진료 장소, 방문 이유, 보험 제공자, 보험 유형 등의 열이 있습니다. 

단계 2: 환자 정보 Genie Space 생성

자연어를 사용하여 데이터를 쿼리하려면, 우리는 Databricks Genie Spaces를 사용하여 쿼리를 자연어로 변환하고 관련 환자 데이터를 검색할 수 있습니다. Databricks UI에서는 왼쪽 바의 Genie 탭을 클릭 → New → patient_visits와 practice_locations 테이블을 선택하면 됩니다.

Genie 공간에서 자연어를 사용하여 데이터와 상호작용하는 비즈니스 사용자.

방 번호 뒤에 오는 숫자를 캡처하기 위해 Genie Space ID가 필요합니다. 아래에 예시를 볼 수 있습니다:

3단계: 에이전트가 사용할 지니 도구를 대표할 함수를 생성합니다. 

우리는 DSPy를 사용하고 있으므로, Python 함수를 정의하기만 하면 됩니다.

그게 다입니다! 이제 다중 모달 생성 워크플로우를 설정해봅시다. 

다중 모달 임베딩 생성

이 단계에서는 완전히 오픈된 colNomic-embed-multimodal-7b 모델을 HuggingFace에서 사용하여 비구조화된 데이터, 이 경우 PDF에 대한 임베딩을 생성합니다. Apache 2.0 라이선스와 벤치마크에서의 높은 성능 때문에 Nomic의 모델을 선택했습니다.

임베딩을 생성하는 방법은 사용 사례와 모달리티에 따라 다릅니다. Databricks Vector Search Best Practices를 검토하여 (AWS | Azure | GCP) 사용 사례에 가장 적합한 것이 무엇인지 이해하십시오. 

단계 1: Databricks에서 모델을 로드, 등록, 서비스하기

Databricks 내에서 이 모델이 사용 가능해야 하므로 Unity Catalog (UC), 우리는 MLflow 를 사용하여 Huggingface에서 로드하고 등록할 것입니다. 그런 다음, 모델을 모델 서빙 엔드포인트에 배포할 수 있습니다. 

파이썬 모델에는 이미지 입력을 처리하는 추가 로직이 포함되어 있으며, 이는 완전한 저장소에서 찾을 수 있습니다. 

UC Volumes 는 파일 시스템처럼 설계되어 어떤 파일이든 호스팅할 수 있으며, 여기에는 우리의 비구조화된 데이터를 저장합니다. 앞으로 이미지와 같은 다른 파일을 저장하고 필요에 따라 프로세스를 반복할 수 있습니다. 이에는 위의 모델이 포함됩니다. 저장소에서 캐시가 볼륨을 참조하는 것을 볼 수 있습니다. 

단계 2: PDF를 목록에 로드

sample_pdf_sbc라는 폴더가 있을 것이며, 이 폴더에는 일부 예제 혜택 및 보장 요약이 포함되어 있습니다. 이 PDF들을 임베드하기 위해 준비해야 합니다.

단계 3: PDF를 이미지로 변환하여 colNomic 모델에 임베딩합니다. 

colNomic-embed-multimodal-7b 모델은 텍스트와 이미지를 한 이미지 내에서 인식하는 데 특별히 훈련되었으며, 이는 PDF에서 흔히 입력되는 형태입니다. 이를 통해 모델은 이러한 페이지를 검색하는 데 탁월한 성능을 발휘할 수 있습니다. 

이 방법을 사용하면 텍스트 청크 전략이 필요 없이 PDF 내의 모든 내용을 활용할 수 있습니다. 모델 자체는 이러한 이미지를 잘 임베딩할 수 있습니다. 

PDF의 각 페이지를 이미지로 변환하기 위해 pdf2image를 사용하며, 이를 임베딩을 위해 준비합니다.

단계 4: 임베딩 생성

이제 PDF 이미지가 있으니, 임베딩을 생성할 수 있습니다. 동시에, 우리는 임베딩을 볼륨 위치에 대한 파일 경로와 같이 Vector Search와 함께 검색할 추가 열이 있는 Delta 테이블에 저장할 수 있습니다. 

단계 5: 벡터 검색 인덱스 및 엔드포인트 생성

Vector Search 인덱스 생성은 UI 또는 API를 통해 수행할 수 있습니다. 아래에 API 방법이 표시되어 있습니다. 

이제 우리는 이 모든 것을 에이전트로 묶어야만 합니다. 

데이터를 DSPy와 통합하기

이를 위해 DSPy를 사용하는데, 이는 선언적이고 순수한 파이썬 디자인 때문입니다. 이를 통해 우리는 빠르게 반복하고 개발할 수 있으며, 어떤 모델이 우리의 사용 사례에 가장 잘 맞을지를 테스트하는 다양한 모델을 시험해 볼 수 있습니다. 가장 중요한 것은, 선언적인 특성이 우리가 에이전트의 로직을 도구에서 분리하고 에이전트가 어떻게 작업을 수행해야 하는지 정의하는 데 집중할 수 있게 해줍니다. 

그리고 가장 좋은 부분은? 수동 프롬프트 엔지니어링은 필요 없습니다! 

단계 1: dspy.Signatures를 정의하세요 

이 서명은 입력과 출력을 지정하고 강제하며, 서명이 어떻게 작동해야 하는지도 설명합니다. 

단계 2: 서명을 dspy.module에 추가하세요.

모듈은 시그니처에서 지시사항을 받아 LLM에 보낼 최적의 프롬프트를 생성합니다. 이 특정 사용 사례에 대해, 우리는 `MultiModalPatientInsuranceAnalyzer()`라는 사용자 정의 모듈을 만들 것입니다. 

이 사용자 정의 모듈은 서명을 단계로 분리하여, 전진 방법에서 호출을 "연결"하는 것처럼 만듭니다. 이 과정을 따릅니다: 

  1. 위에서 정의한 서명을 가져와 클래스에서 초기화합니다
  2. 도구를 정의하세요. 그것들은 단지 파이썬 함수일 필요가 있습니다 
    1. 이 게시물에서는 Vector Search 도구와 Genie Space 도구를 만들 것입니다. 이 두 도구 모두 Databricks SDK를 사용하여 이러한 서비스에 API 호출을 수행합니다. 
    2. 로직을 forward 메소드에서 정의하십시오. 우리의 경우, 키워드를 추출하고, 벡터 검색 인덱스를 적중시키고, 모든 것을 최종 LLM 호출로 응답을 위해 전달해야 할 것을 알고 있습니다.

단계 3: 모두 완료! 이제 실행하세요!

에이전트가 사용한 도구와 질문에 대답하기 위해 거친 추론 과정을 검토하세요.

다음 단계

작동하는 에이전트가 있으면 다음을 권장합니다: 

  1. 사용 Mosaic AI Agent Framework 에이전트를 에이전트 엔드포인트에 배포하고 Unity Catalog를 사용하여 관리/버전 관리하십시오 
  2. Mosaic AI Agent Eval Framework를 사용하십시오 (AWS | Azure | GCP) 평가를 수행하고 에이전트가 기대하는 성능을 발휘하고 있는지 확인하기 위해

평가 프레임워크는 Vector Search 인덱스가 RAG 에이전트에게 관련 정보를 얼마나 효과적으로 검색하는지 이해하는 데 중요할 것입니다. 이러한 지표를 따르면, 임베딩 모델을 변경하는 것부터 LLM과 상호 작용하는 프롬프트를 조정하는 것까지 어디를 조정해야 할지 알 수 있습니다. 

또한 Foundation Model API (AWS | Azure | GCP)가 사용 사례에 충분한지 모니터링해야 합니다. 어느 시점에서는 Foundation Model API의 제한에 도달하게 되므로, Provisioned Throughput (AWS | Azure | GCP)로 전환하여 LLM을 위한 더 안정적인 엔드포인트를 갖게 될 필요가 있습니다. 

또한, 서버리스 모델 서빙에 대한 비용을 주의 깊게 살펴보세요 (AWS | Azure | GCP). 대부분의 이러한 비용은 Databricks SKU 서버리스 모델 서빙에서 발생하며, 규모를 키울수록 증가할 수 있습니다. 

이것을 Databricks에서 어떻게 하는지 이해하기 위해 이 블로그를 확인해 보세요. 

또한, Databricks Delivery Solutions Architects (DSAs)는 조직 전반에 걸친 데이터 및 AI 이니셔티브를 가속화하는 데 도움을 줍니다. DSAs는 아키텍처를 리드하며, 플랫폼의 비용과 성능을 최적화하고, 개발자 경험을 향상시키며, 프로젝트 실행을 성공적으로 이끕니다. 그들은 초기 배포와 생산 수준의 솔루션 사이의 간극을 연결하며, 데이터 엔지니어링, 기술 리드, 경영진, 그리고 다른 이해관계자를 포함한 다양한 팀과 긴밀하게 협력하여 맞춤형 솔루션과 더 빠른 가치 창출을 보장합니다. 자세한 내용은 Databricks 계정 팀에 문의하십시오.


 

자신만의 GenAI 앱을 만들어 보세요! 시작하려면 문서 를 확인하세요. 

Databricks에서는 이 엔드-투-엔드 솔루션을 개발하기 위해 필요한 모든 도구를 갖추고 있습니다. 아래의 블로그를 확인하여 Mosaic AI Agent Framework를 이용한 새로운 에이전트의 관리와 작업 방법에 대해 알아보세요.

 

(이 글은 AI의 도움을 받아 번역되었습니다. 원문이 궁금하시다면 여기를 클릭해 주세요)

게시물을 놓치지 마세요

관심 있는 카테고리를 구독하고 최신 게시물을 받은편지함으로 받아보세요