주요 컨텐츠로 이동
의료 및 생명 공학

다중 모달 RAG로 환자 데이터를 통합하세요

Databricks의 AI Search를 멀티모달 임베딩과 함께 사용하여 RAG 애플리케이션을 멀티모달 기능으로 강화하는 방법을 알아보세요.

작성자: Austin Choi , Jordan Soldo

  • 크로스 모달 슈퍼파워: 멀티모달 임베딩 모델을 사용하면 태그나 메타데이터 없이 텍스트 쿼리를 사용하여 다양한 모달리티를 검색할 수 있습니다. 서로 다른 데이터 유형을 공유 의미 공간에 배치합니다.
  • 구축, 검색, 배포: 이미지를 임베딩으로 변환하고, Delta 테이블에 저장하고, AI Search를 사용하여 강력한 유사성 검색을 활성화하여 Databricks에서 완전한 멀티모달 RAG 시스템을 구축하는 방법을 알아보세요.
  • 원활한 콘텐츠 연결: 모달리티 간의 격차를 해소하여 RAG 애플리케이션을 강화하고, 혼합 콘텐츠 유형이 포함된 PDF와 같은 복잡한 문서도 완전히 검색 가능하고 문맥적으로 관련성 있게 만듭니다.

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

멀티모달 검색은 최신 AI 시스템에서 중요한 과제입니다. 기존 검색 시스템은 광범위한 메타데이터나 태그 없이 다양한 데이터 유형을 효과적으로 검색하는 데 어려움을 겪습니다. 이는 특히 텍스트, 이미지, 오디오 등 방대한 양의 다양한 콘텐츠를 관리하는 의료 회사에 문제가 되며, 종종 비정형 데이터 소스로 이어집니다.

An image comparing unstructured and structured data.
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 및 벡터 검색 인덱스를 사용하여 입력에 응답하는 멀티툴 호출 에이전트 생성(DSPy)

이 블로그가 끝날 때쯤이면 멀티모달 임베딩이 의료 분야에서 다음을 가능하게 하는 것을 볼 수 있습니다.

  1. PDF의 텍스트뿐만 아니라 모든 것을 사용하여 더 다양한 데이터
  2. 모든 데이터를 함께 사용할 수 있는 유연성. 의료 분야에서는 어떤 종류의 데이터와 작업해야 할지 알 수 없기 때문에 특히 가치가 있습니다.
  3. 에이전트를 통한 데이터 통합으로 더 포괄적인 답변 가능
A conceptual idea of how your data can be unified through Agents and Multi-Modal Embeddings
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]

다음은 임베딩 공간에서 숫자가 존재하는 위치를 시각적으로 표현한 것입니다.

A 2D representation of high-dimensional data points in an embedding space.

실제로는 임베딩 공간 차원이 수백 또는 수천이 되겠지만, 설명을 위해 3차원을 사용하겠습니다. 이러한 벡터의 첫 번째 위치는 "동물성", 두 번째는 "운송성", 세 번째는 "소음성"을 나타낸다고 상상할 수 있습니다. 임베딩을 고려하면 합리적이지만, 일반적으로 각 차원이 무엇을 나타내는지는 알 수 없습니다. 중요한 것은 이러한 차원이 레코드의 의미론적 의미를 나타낸다는 것입니다.

CLIP과 같은 여러 인코더를 동시에 훈련하거나(CLIP), DALL-E와 같은 교차 주의 메커니즘을 사용하거나(DALL-E), 다양한 후훈련 정렬 방법을 사용하는 것을 포함하여 멀티모달 임베딩 공간을 만드는 여러 가지 방법이 있습니다. 이러한 방법을 통해 레코드의 의미는 원래 양식을 초월하여 다른 분산된 레코드 또는 형식과 공유 공간을 차지할 수 있습니다.

이 공유 의미 공간은 강력한 교차 모달 검색 기능을 가능하게 하는 것입니다. 텍스트 쿼리와 이미지가 유사한 벡터 표현을 공유하면 의미론적으로 유사할 가능성이 높으므로 명시적인 태그나 메타데이터 없이 텍스트 설명을 기반으로 관련 이미지를 찾을 수 있습니다.

멀티모달 임베딩 모델: 임베딩 공간 공유

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

2025년 6월 현재 몇 가지 강력한 멀티모달 임베딩 모델을 사용할 수 있습니다.

  • Cohere의 Multimodal Embed 4: 텍스트와 이미지 데이터를 모두 높은 정확도와 성능으로 임베딩하는 데 탁월한 다목적 모델입니다.
  • Nomic-Embed: 다양한 데이터 유형을 통합된 공간에 임베딩하는 강력한 기능을 제공합니다. 몇 안 되는 완전 오픈 소스 모델 중 하나입니다.
  • Meta ImageBind: 이미지, 텍스트, 오디오, 깊이, 열, IMU 데이터를 포함한 6가지 다른 양식을 처리할 수 있는 인상적인 모델입니다.
  • CLIP (Contrastive Language-Image pretraining): OpenAI에서 개발한 CLIP은 다양한 이미지-텍스트 쌍으로 훈련되었으며 시각 및 텍스트 데이터 간의 격차를 효과적으로 해소할 수 있습니다.

주요 아키텍처 고려 사항

Databricks는 사용 사례에 맞게 사용자 정의 가능한 엔드투엔드 솔루션을 호스팅, 평가 및 개발할 수 있는 인프라와 도구를 제공합니다. 이 사용 사례를 배포하기 시작할 때 다음 시나리오를 고려하십시오.

확장성 및 성능

  • 처리 옵션은 데이터셋 크기에 따라 선택해야 합니다. 소규모 데이터셋 또는 개발 작업을 위한 인메모리 처리 대 높은 처리량이 필요한 프로덕션 워크로드의 경우 모델 서빙(AWS | Azure | GCP)
  • Databricks Vector Storage 최적화 엔드포인트 대 표준 엔드포인트 (AWS | Azure | GCP). 벡터가 많다면 스토리지 최적화를 사용하여 더 많은 벡터(약 2억 5천만 개 이상)를 저장하는 것을 고려해 보세요.

비용 고려 사항

  • 대규모 구현의 경우, 임베딩 모델을 서빙하고 배치 추론에 AI 쿼리( AWS | Azure | GCP)를 사용하는 것이 인메모리 처리보다 효율적입니다.
  • 벡터 검색 인덱스에 대한 트리거 업데이트 또는 연속 업데이트가 필요한지 결정하세요 (AWS | Azure | GCP)
  • 다시 한번, 스토리지 최적화 엔드포인트 대 표준 엔드포인트를 고려하세요.
  • 이러한 비용은 서버리스 실시간 추론 SKU로 추적할 수 있습니다.
  • 예산을 정확하게 추적하고 있는지 확인하기 위해 예산 정책( AWS | Azure | GCP) 사용을 고려하세요.

운영 우수성

  • 소스 데이터의 변경 사항을 감지하고 그에 따라 임베딩을 업데이트하기 위해 Databricks에서 파이프라인 및 워크플로( AWS | Azure | GCP) 및 Databricks 에셋 번들( AWS | Azure | GCP)를 사용하세요.
  • 파이프라인 관리가 필요 없이 인덱스 동기화를 완전히 자동화하기 위해 AI Search Delta Sync( AWS | Azure | GCP)를 사용하세요.
  • AI Search는 안정성을 보장하기 위해 오류, 재시도 및 최적화를 자동으로 처리합니다.

네트워크 및 보안 고려 사항

  • 워크스페이스에서 HIPAA 규정 준수를 위해 Databricks 규정 준수 프로필( AWS | Azure | GCP)을 사용하세요.
  • 비밀을 관리하기 위해 Databricks 비밀 관리자 또는 키 관리 시스템을 사용하세요.
  • Databricks가 AI 관리형 서비스를 위해 데이터를 처리하는 방법에 대한 자세한 내용은 설명서에서 신뢰 및 안전 설명을 검토하세요 (AWS | Azure | GCP).

기술 솔루션 분석

이 솔루션의 전체 구현은 여기 리포지토리를 방문하세요: Github 링크

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

이 프로세스는 복잡하게 들릴 수 있지만 Databricks는 완전한 엔드투엔드 솔루션을 제공하는 내장 도구를 제공합니다. 개략적으로 이 프로세스는 다음과 같습니다.

  1. Autoloader를 통한 수집 (AWS | Azure | GCP)
  2. Lakeflow 선언형 파이프라인을 사용한 ETL (AWS | Azure | GCP)
  3. Databricks에서 호스팅되는 멀티모달 임베딩 모델을 사용한 임베딩 생성
  4. 벡터 검색 인덱스에 임베딩 호스팅 (AWS | Azure | GCP)
  5. 모델 서빙을 통한 서빙 (AWS | Azure | GCP)
  6. 에이전트 프레임워크를 사용하여 에이전트를 안전하게 배포하고 관리합니다.

Genie Space 생성

이 Genie Space는 자연어를 SQL 쿼리로 변환하여 구조화된 데이터를 쿼리하는 도구로 사용됩니다.

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

이 예제에서는 Faker 라이브러리를 사용하여 무작위 환자 정보를 생성합니다. 데이터를 다양화하기 위해 방문 사유, 보험 제공자, 보험 유형과 같은 열을 포함하는 두 개의 테이블: 환자 방문 및 진료소 위치를 생성합니다.

2단계: 환자 정보 지니 스페이스 생성

자연어를 사용하여 데이터를 쿼리하기 위해 Databricks 지니 스페이스(AWS | Azure | GCP)를 활용하여 쿼리를 자연어로 변환하고 관련 환자 데이터를 검색할 수 있습니다. Databricks UI에서 왼쪽 바의 지니 탭을 클릭하고 → 새로 만들기를 선택한 다음 patient_visits 및 practice_locations 테이블을 선택하세요.

Business users interacting with data using natural language in a Genie space.

방 뒤에 오는 숫자를 캡처하려면 지니 스페이스 ID가 필요합니다. 아래에서 예를 볼 수 있습니다.

3단계: 에이전트가 사용할 지니 도구를 나타내는 함수 생성

DSPy를 사용하므로 Python 함수만 정의하면 됩니다.

이제 멀티모달 생성 워크플로를 설정해 보겠습니다.

멀티모달 임베딩 생성

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

임베딩을 생성하는 방법은 사용 사례 및 모달리티에 따라 다릅니다. Databricks 벡터 검색 모범 사례(AWS | Azure | GCP)를 검토하여 사용 사례에 가장 적합한 것을 이해하세요.

1단계: 모델을 Databricks에 로드, 등록 및 서빙

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

Python 모델에는 이미지 입력을 처리하기 위한 추가 로직이 포함되어 있으며, 이는 전체 리포지토리에서 찾을 수 있습니다.

UC 볼륨은 파일 시스템처럼 설계되어 모든 파일을 호스팅하며 비정형 데이터를 저장하는 곳입니다. 향후 이미지와 같은 다른 파일을 저장하는 데 사용할 수 있으며 필요에 따라 이 프로세스를 반복할 수 있습니다. 여기에는 위의 모델이 포함됩니다. 리포지토리에서 캐시가 볼륨을 참조하는 것을 볼 수 있습니다.

2단계: PDF를 목록으로 로드

혜택 및 보장 요약이 포함된 sample_pdf_sbc라는 폴더가 있습니다. 임베딩을 위해 이러한 PDF를 준비해야 합니다.

3단계: colNomic 모델에서 임베딩할 PDF를 이미지로 변환

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

이 방법을 사용하면 텍스트 청킹 전략 없이 PDF 내의 모든 콘텐츠를 활용하여 검색이 효과적으로 작동하도록 할 수 있습니다. 모델 자체는 이러한 이미지를 자체 임베딩 공간에 잘 임베딩할 수 있습니다.

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

4단계: 임베딩 생성

이제 PDF 이미지가 준비되었으므로 임베딩을 생성할 수 있습니다. 동시에 벡터 검색과 함께 검색할 추가 열(볼륨 위치로의 파일 경로 등)을 포함하여 임베딩을 Delta 테이블에 저장할 수 있습니다.

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

벡터 검색 인덱스는 UI 또는 API를 통해 생성할 수 있습니다. 아래에는 API 메서드가 표시됩니다.

이제 에이전트와 모든 것을 연결하기만 하면 됩니다.

DSPy를 사용하여 데이터 통합

선언적이고 순수 Python 디자인이기 때문에 DSPy를 사용합니다. 이를 통해 반복 및 개발을 신속하게 수행하고 다양한 모델을 테스트하여 사용 사례에 가장 적합한 모델을 확인할 수 있습니다. 가장 중요한 것은 선언적 특성을 통해 에이전트의 로직을 도구와 분리하여 에이전트가 작업을 수행하는 방법을 정의하는 데 집중할 수 있도록 에이전트를 모듈화할 수 있다는 것입니다.

가장 좋은 점은 무엇일까요? 수동 프롬프트 엔지니어링이 필요 없습니다!

1단계: dspy.Signatures 정의

이 시그니처는 입력과 출력을 지정하고 적용하며 시그니저가 작동하는 방식을 설명합니다.

2단계: 시그니처를 dspy.module에 추가

모듈은 시그니처의 지침을 받아 LLM에 보낼 최적의 프롬프트를 생성합니다. 이 특정 사용 사례의 경우 `MultiModalPatientInsuranceAnalyzer()`라는 사용자 지정 모듈을 빌드합니다.

이 사용자 지정 모듈은 순방향 메서드에서 시그니처를 단계별로 분해하여 호출을 "체인"하는 것과 거의 동일하게 작동합니다. 다음 프로세스를 따릅니다.

  1. 위에 정의된 시그니처를 가져와 클래스에서 초기화합니다.
  2. 도구를 정의합니다. Python 함수이면 됩니다.
    1. 이 게시물에서는 벡터 검색 도구와 Genie Space 도구를 만듭니다. 이 두 도구 모두 Databricks SDK를 사용하여 이러한 서비스에 API 호출을 수행합니다.
    2. 순방향 메서드에서 로직을 정의합니다. 이 경우 키워드를 추출하고, 벡터 검색 인덱스를 히트한 다음, 응답을 위해 모든 것을 최종 LLM 호출에 전달해야 한다는 것을 알고 있습니다.

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

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

다음 단계

작동하는 에이전트를 확보하면 다음을 권장합니다.

  1. Agent Bricks Custom Agents를 사용하여 에이전트를 에이전트 엔드포인트에 배포하고 Unity Catalog를 사용하여 관리 및 버전 관리
  2. Databricks Agent Eval Framework(AWS | Azure | GCP)를 사용하여 평가를 수행하고 에이전트가 예상대로 작동하는지 확인하세요

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

또한 Foundation Model API(AWS | Azure | GCP)가 사용 사례에 충분한지 모니터링해야 합니다. 특정 시점에는 Foundation Model API에 대한 API 제한에 도달하므로 더 안정적인 LLM 엔드포인트를 사용하려면 Provisioned Throughput(AWS | Azure | GCP)으로 전환해야 합니다.

또한 서버리스 모델 서빙(AWS | Azure | GCP)에 대한 비용을 면밀히 주시하세요. 이러한 비용의 대부분은 Databricks SKU 서버리스 모델 서빙에서 발생하며 확장함에 따라 증가할 수 있습니다.

Databricks에서 이를 수행하는 방법에 대한 자세한 내용은 이 블로그를 확인하세요.

또한 Databricks Delivery Solutions Architects(DSA)는 조직 전체의 데이터 및 AI 이니셔티브를 가속화하는 데 도움을 줍니다. DSA는 아키텍처 리더십을 제공하고, 비용 및 성능을 위해 플랫폼을 최적화하며, 개발자 경험을 향상시키고, 성공적인 프로젝트 실행을 주도합니다. 초기 배포와 프로덕션 등급 솔루션 간의 격차를 해소하고 데이터 엔지니어링, 기술 리드, 임원 및 기타 이해 관계자를 포함한 다양한 팀과 긴밀히 협력하여 맞춤형 솔루션과 더 빠른 가치 실현을 보장합니다. 자세한 내용은 Databricks 계정 팀에 문의하세요.


자체 GenAI 앱을 구축하여 시작하세요! 문서를 참조하여 시작하세요.

Databricks에서는 이 엔드투엔드 솔루션을 개발하는 데 필요한 모든 도구를 갖추고 있습니다. 아래 블로그를 확인하여 Agent Bricks Custom Agents를 사용하여 새 에이전트를 관리하고 작업하는 방법에 대해 알아보세요.

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

최신 게시물을 이메일로 받아보세요

블로그를 구독하고 최신 게시물을 이메일로 받아보세요.