Elasticsearch에서 이미지 유사성 검색 개요

enterprise-search-search-bar-pattern-light-1680x980.png

스크린샷으로 연예인의 스타일을 따라 할 수 있다고 상상해 보세요. 사용자는 이 이미지를 사용하여 온라인에서 판매되는 의류 중 해당 스타일과 일치하는 의류를 빠르게 찾을 수 있을 것입니다. 하지만, 이것은 현재 제공되는 검색 경험이 아닙니다.

고객은 필요한 것을 찾기 위해 고군분투하며, 찾지 못하면 포기하게 됩니다. 일부 고객은 찾고 있는 것의 이름(키워드)을 기억하지 못하지만, 그것의 실제 이미지 또는 어떻게 생겼는지는 기억하고 있습니다. Elastic의 통합 기능인 벡터 검색을 사용하면 유사성 이미지 검색을 구현할 수 있습니다. 기업은 이를 통해 더욱 직관적인 검색 경험을 구축하여 고객이 이미지만으로 원하는 것을 쉽게 검색하도록 지원할 수 있습니다.

머신 러닝 전문가가 아니어도 Elastic에서 이 기능을 구현할 수 있습니다. 벡터 검색이 이미 확장 가능하고 성능이 뛰어난 Elastic 플랫폼에 통합되어 있기 때문입니다. 애플리케이션 프레임워크에 통합되므로 대화형 애플리케이션을 보다 쉽게 구동할 수 있습니다.

여러 파트로 구성된 이 블로그 시리즈에서는 자체 이미지 세트를 사용하여 Elastic에서 프로토타입 유사성 검색 애플리케이션을 만드는 방법에 대해 설명합니다. 이 프로토타입 애플리케이션의 프런트 엔드는 Flask를 사용하여 구현되며, 자체 맞춤형 애플리케이션의 청사진 역할을 할 수 있습니다.

이 개요 블로그에서는 Elastic을 사용하여 이미지 데이터에 벡터 검색을 적용하는 데 필요한 아키텍처를 더 잘 이해하기 위해 이면의 이야기를 살펴보겠습니다. 이미지보다는 텍스트에 대한 시맨틱 검색에 더 관심이 있으시다면 자연어 처리(NLP)에 대한 여러 블로그 시리즈를 검토하여 텍스트 임베딩 및 벡터 검색, 명명된 엔티티 인식(NER), 감정 분석, 이러한 기술을 Elastic에 적용하는 방법에 대해 알아보세요. 여기에서는 조금 뒤로 물러서서 벡터 검색이 유사성과 시맨틱 검색을 어떻게 지원하는지 설명하는 것으로 시작하겠습니다.

시맨틱 검색과 유사성 검색 - 모두 벡터 검색 기반

벡터 검색은 머신 러닝(ML)을 활용하여 비정형 데이터의 의미와 컨텍스트를 파악합니다. 벡터 검색은 근사 근접 이웃(ANN) 알고리즘을 사용하여 유사한 데이터를 찾습니다. 기존 텍스트 검색과 비교할 때(Elastic의 경우 BM25 점수 기준), 벡터 검색은 극단적인 검색 엔진 최적화 없이 좀 더 정확도가 높은 결과를 산출하고 더 빠르게 실행됩니다.

이 접근 방식은 텍스트 데이터뿐만 아니라 일반 임베딩 모델을 사용할 수 있는 이미지 및 기타 유형의 비정형 데이터에도 적용됩니다. 텍스트 데이터의 경우 일반적으로 시맨틱 검색이라고 하며, 유사성 검색은 이미지와 오디오의 맥락에서 자주 사용됩니다.

이미지에 대한 벡터 임베딩은 어떻게 생성하나요?

벡터 임베딩은 고차원(고밀도) 벡터에 저장된 데이터 및 관련 컨텍스트의 숫자 표현입니다. 임베딩을 생성하는 모델은 일반적으로 더 관련성이 높고 정확한 결과를 제공하기 위해 수백만 개의 예제를 사용해 훈련됩니다.

텍스트 데이터의 경우, BERT와 유사한 변환기는 다양한 유형의 텍스트에서 작동하는 임베딩을 생성하는 데 널리 사용되며, Hugging Face와 같은 퍼블릭 리포지토리에 제공되어 있습니다. 모든 유형의 이미지에서 잘 작동하는 임베딩 모델은 지속적인 연구 대상입니다. 이미지 유사성 앱의 프로토타입을 만들기 위해 우리 팀에서 사용하는 CLIP 모델은 OpenAI에서 배포하며 좋은 출발점을 제공합니다. 전문적인 사용 사례와 고급 사용자의 경우, 원하는 성능을 달성하기 위해 사용자 정의 임베딩 모델을 훈련해야 할 수 있습니다. 다음으로는 효율적으로 검색할 수 있는 기능이 필요합니다. Elastic은 널리 사용되고 있는 HNSW 기반의 근사 최근접 이웃 검색을 지원합니다.

유사성 검색이 혁신적인 애플리케이션을 지원하는 방법

유사성 검색이 혁신을 어떻게 지원할까요? 첫 번째 예에서 사용자들은 스크린샷을 찍고 검색하여 좋아하는 연예인의 의상을 찾을 수 있었습니다.

유사성 검색을 사용하면 다음을 수행할 수 있습니다.

  • 다른 쇼핑객이 구매한 제품과 비슷한 제품을 제안합니다.
  • 시각적 디자인 요소 라이브러리에서 관련된 기존 디자인 또는 관련 템플릿을 찾습니다.
  • 최근에 들은 음악을 바탕으로 인기 있는 음악 스트리밍 서비스에서 좋아할 만한 노래를 찾습니다.
  • 자연어 설명을 사용하여 태그가 지정되지 않은 비정형 이미지의 방대한 데이터 세트를 검색합니다.

이미지 유사성 검색의 기반에 대해 자세히 알아보기 >>

이미지 유사성 앱의 아키텍처 개요

이러한 종류의 대화형 애플리케이션을 만드는 것은 복잡해 보일 수 있습니다. 특히 아래와 같이 기존 아키텍처 내에서 구현을 고려하고 있다면 더욱 그렇습니다. 그러나 두 번째 다이어그램에서는 Elastic이 이 아키텍처를 얼마나 크게 간소화하는지 보여줍니다.

그림 1: 이미지 유사성 검색의 일반적인 구현(외부 서비스 필요)

색인된 데이터를 검색하기 위한 대부분의 검색 애플리케이션 프레임워크는 벡터(유사성) 검색에 필요한 k-최근접 이웃 검색이나 NLP 모델을 적용하는 데 필요한 추론을 기본적으로 지원하지 않습니다. 따라서 이미지 유사성 애플리케이션은 핵심 검색인 kNN 서비스 외에도 여러 서비스와 상호 작용해야 합니다. 텍스트 처리가 포함된 경우, 그림 1과 같이 NLP 서비스와도 상호 작용해야 합니다. 이는 구축 및 유지 관리가 복잡할 수 있습니다.

그와 대조적으로, Elastic Platform을 사용하여 이미지 유사성 검색을 구현할 때는   벡터 검색과 NLP가 기본적으로 통합됩니다. 애플리케이션은 기본적으로 관련된 모든 구성 요소와 통신할 수 있습니다. Elasticsearch 클러스터는 아래와 같이 kNN 검색 및 NLP 추론을 실행할 수 있습니다.

그림 2: Elastic에서 이미지 유사성 검색 구현

이미지 유사성 검색에 Elastic을 사용하는 이유

Elastic에서 이미지 유사성 검색을 구현하면 명확한 이점을 얻을 수 있습니다. Elastic을 사용하면 다음과 같은 이점이 있습니다.

애플리케이션 복잡성을 줄일 수 있습니다. Elastic을 사용하면 kNN 검색을 실행하고 검색 입력을 벡터화하기 위해 별도의 서비스가 필요하지 않습니다. 벡터 검색 및 NLP 추론 엔드포인트는 확장 가능한 검색 플랫폼 내에 통합됩니다. 다른 인기 있는 프레임워크에서는 심층 신경망 및 NLP 모델을 적용하는 작업이 대규모 데이터 세트에 대한 검색 확장과 별도로 발생합니다. 즉, 전문가를 고용하고, 프로젝트에 개발 시간을 추가하며, 시간이 지남에 따라 프로젝트를 관리할 리소스를 확보해야 합니다. 

빠르게 확장할 수 있습니다. Elastic에서는 확장성과 속도를 얻을 수 있습니다. 모델은 동일한 클러스터에서 검색을 실행하는 노드와 함께 상주합니다. 이는 온프레미스 클러스터에 적용되며, 클라우드에 배포하는 경우 더욱 그렇습니다. Elastic Cloud를 사용하면 현재 검색 워크로드에 따라 손쉽게 확장하고 축소할 수 있습니다.

애플리케이션에 필요한 서비스 수를 줄이는 것은 확장 이상의 이점이 있습니다. 몇 가지 예를 들면 성능 모니터링 간소화, 유지 관리 공간 축소, 보안 취약점 감소 등을 경험할 수 있습니다. 향후 서버리스 아키텍처가 구현되면 애플리케이션이 완전히 새로운 수준으로 간소화될 것입니다.

이제 그다음은?

이 시리즈의 1부와 2부에서는 Elastic에서 이미지 유사성 검색을 구현하는 방법에 대해 자세히 설명할 것입니다. 여기에는 상위 수준 아키텍처의 각 구성 요소에 대한 기술적 설계 고려 사항과 Elastic에서 아키텍처를 구현하기 위한 실제 코드가 포함됩니다. 

Elastic 내에서 벡터 검색을 적용하는 실제 경험을 쌓으려면 벡터 검색 실습 워크숍에 등록하세요. 가상 이벤트 허브로 이동하면 다음 워크숍을 찾아 등록하실 수 있습니다. 그동안 이 시리즈에서 설명한 개념에 대해 궁금한 점이 있으시면 이 토론 포럼에서 Elastic 커뮤니티에 참여하세요.

2022년 12월 14일 최초 게시, 2023년 2월 28일 업데이트