콘텐츠로 이동하기
AI 및 머신러닝

텍스트용 Vertex AI 임베딩: 간편해진 LLM 그라운딩

2023년 8월 7일
Kaz Sato

Developer Advocate, Cloud AI

Ivan Cheung

Developer Programs Engineer, Google Cloud

*본 아티클의 원문은 2023년 5월 26일 Google Cloud 블로그(영문)에 게재되었습니다.


많은 사람들이 생성형 AI와 대규모 언어 모델(LLM)을 프로덕션 서비스로 가져오는 방법을 고민하기 시작했습니다. 'LLM이나 AI 챗봇을 기존 IT 시스템, 데이터베이스, 비즈니스 데이터와 어떻게 통합해야 하는가?', '제품이 수천 개에 달하는데 LLM이 모든 제품을 외우도록 하려면 어떻게 해야 할까?' 또는 '안정적인 서비스를 구축하기 위해 AI 챗봇에서 할루시네이션 문제를 처리하려면 어떻게 해야 하는가?'가 궁금한가요? 간단한 솔루션이 있습니다. 임베딩과 벡터 검색으로 그라운딩(grounding)하는 것입니다.

그라운딩은 무엇이고, 임베딩과 벡터 검색은 무엇일까요? 이 게시물에서는 기업이 신뢰할 수 있는 생성형 AI 서비스를 구축하는 데 필수적인 중요 개념들을 알아보겠습니다. 자세히 살펴보기에 앞서 다음 예시를 확인해 보세요.

https://storage.googleapis.com/gweb-cloudblog-publish/original_images/1._demo_animation.gif

Stack Overflow 질문 800만 개를 밀리초 단위로 처리하는 시맨틱 검색 (여기에서 데모 사용해 보기)

이 데모는 여기에서 공개 라이브 데모로 제공되고 있습니다. 'STACKOVERFLOW'를 선택하고 코딩 질문을 쿼리로 입력하면 Stack Overflow에 게시된 800만 개 질문에 대한 텍스트 검색을 실행합니다.

이 데모는 다음과 같은 점에서 특별합니다.

  • LLM 지원 시맨틱 검색: 800만 개의 Stack Overflow 질문과 쿼리 텍스트 모두 Vertex AI의 생성형 AI 모델로 해석됩니다. 이 모델은 질문 본문에 포함된 코드 스니펫 및 텍스트의 의미와 인텐트(시맨틱)를 전문가급으로 정밀하게 파악합니다. 데모는 이러한 기능을 활용하여 관련성 높은 질문을 찾아 단순한 키워드 검색 수준을 훨씬 뛰어넘는 사용자 경험을 제공합니다. 예를 들어 '한 번만 인스턴스화하는 클래스를 작성하는 방법'이라고 입력하면 데모는 '싱글톤 클래스를 작성하는 방법'을 가장 상단에 표시합니다. 컴퓨터 프로그래밍 컨텍스트에서 두 질문이 동일한 의미라는 것을 모델이 알고 있기 때문입니다.
  • 비즈니스 정보에 그라운딩: 이 데모에서는 길고 복잡한 프롬프트 엔지니어링을 통해 LLM이 800만 개 항목을 외우도록 시도하는 대신 벡터 검색을 사용하고 Stack Overflow 데이터 세트를 외부 메모리로 모델에 연결했으며 프롬프트 엔지니어링은 사용하지 않았습니다. 즉, LLM의 인공 출력이 아닌 모두 비즈니스 정보에 직접 '그라운딩한'(연결된) 출력입니다. 따라서 이 데모는 지금이라도 미션 크리티컬 비즈니스 책임이 있는 프로덕션 서비스로 제공될 준비가 되었습니다. LLM 메모리 제한이나 할루시네이션과 같은 예기치 않은 동작으로 인한 어려움을 겪지 않습니다.
  • 확장성과 속도: 이 데모는 심층적인 시맨틱 이해 능력을 유지하면서도 수십 밀리초 만에 검색 결과를 제공합니다. 또한 수평 확장하여 초당 수천 개의 검색 쿼리를 처리할 수 있습니다. LLM 임베딩과 Google AI의 벡터 검색 기술의 조합 덕분에 가능한 일입니다.

이 솔루션의 핵심 요소는 1) 텍스트용 Vertex AI 임베딩으로 생성된 임베딩과 2) Vertex AI Matching Engine의 빠르고 확장 가능한 벡터 검색입니다. 먼저 이러한 기술을 자세히 살펴보겠습니다.

첫 번째 핵심 요소: 텍스트용 Vertex AI 임베딩

2023년 5월 10일 Google Cloud는 텍스트 및 이미지용 Embeddings API를 발표했으며 Vertex AI 모델 가든에서 사용할 수 있습니다. 

  • 텍스트용 임베딩 : 텍스트 입력이 최대 3,072개의 입력 토큰까지 가능하며 768차원 텍스트 임베딩을 출력하는 API로, 공개 미리보기로 제공되고 있습니다. 가격은 2023년 5월 10일 기준 1,000자당 $0.0001입니다(최신 가격 정보는 생성형 AI 모델 가격 책정 페이지에서 확인하세요).
  • 이미지용 임베딩: API는 Google AI의 Contrastive Captioners(CoCa) 모델에 기반하여 이미지 또는 텍스트 입력을 처리하고 1024차원 이미지/텍스트 멀티모달 임베딩을 출력하며, 신뢰할 수 있는 테스터에게 제공됩니다. 이 API는 이른바 '멀티모달' 임베딩을 출력하여 사용자가 텍스트 쿼리를 사용해 이미지에서 시맨틱 검색을 실행하거나 그 반대의 경우도 마찬가지인 멀티모달 쿼리를 지원합니다. 이 API에 대해서는 곧 다른 블로그 게시물에서 소개할 예정입니다.

이 블로그에서는 임베딩이 유용한 이유를 구체적으로 설명하고 텍스트용 Embeddings API를 활용하여 애플리케이션을 빌드하는 방법을 알아봅니다. 이미지용 Embeddings API에 대해서는 추후 블로그 게시물에서 자세히 설명할 예정입니다.

https://storage.googleapis.com/gweb-cloudblog-publish/images/2._model_garden.max-2200x2200.png
Vertex AI 모델 가든에서 제공되는 텍스트용 Embeddings API

임베딩 소개

시맨틱 검색과 임베딩이 무엇인가요? LLM이 주목받고 있는 지금 IT 엔지니어와 ITDM이 시맨틱 검색과 임베딩의 작동 방식을 이해하는 것이 중요해진 이유는 무엇인가요? 아래 5분 분량의 Google I/O 2023 세션 동영상을 시청하여 그 답을 찾아보세요.

https://storage.googleapis.com/gweb-cloudblog-publish/images/image4_TpwcwgV.max-2000x2000.png
또한 기본 과정인 Embeddings on Google Machine Learning Crush와 데일 마코위츠의 Meet AI’s multitool: Vector embeddings도 임베딩을 자세히 알아보기 좋은 자료입니다.

LLM 텍스트 임베딩 비즈니스 사용 사례

임베딩 API를 사용하면 임베딩의 혁신 기술을 LLM 기능과 결합하여 다음 예시와 같이 다양한 텍스트 처리 작업에 적용할 수 있습니다.

  • LLM 지원 시맨틱 검색: 텍스트 임베딩을 사용하여 임베딩 공간에서 사용자 쿼리와 문서의 의미 및 인텐트를 모두 나타낼 수 있습니다. 사용자 쿼리 인텐트와 의미가 유사한 문서를 벡터 검색 기술로 빠르게 찾을 수 있습니다. 모델은 해당 문서에 포함된 각각의 문장과 단락의 미묘한 뉘앙스를 포착하는 텍스트 임베딩을 생성할 수 있습니다.
  • LLM 지원 텍스트 분류: LLM 텍스트 임베딩을 사용하면 학습이나 미세 조정 없이(일명 제로샷 러닝) 다양한 컨텍스트에 대한 심층적 이해를 바탕으로 텍스트를 분류할 수 있습니다. 기존 언어 모델에서는 작업별로 학습을 시키지 않으면 불가능했던 일입니다.
  • LLM 지원 추천: 텍스트 임베딩은 추천 시스템에 2타워 모델과 같은 추천 모델을 학습시키는 강력한 기능으로 사용할 수 있습니다. 모델은 쿼리와 후보 임베딩 간의 관계를 학습하여 시맨틱 제품을 추천함으로써 차세대 사용자 경험을 제공합니다.
  • LLM 지원 클러스터링, 이상 감지, 감정 분석 등도 LLM 수준의 심층적인 시맨틱 이해로 처리할 수 있습니다.

'전문가급' 정밀도로 텍스트 800만 개를 분류 

텍스트용 Vertex AI 임베딩에는 768차원의 임베딩 공간이 있습니다. 앞서 동영상에서 설명했듯 이 공간은 세상에 존재하는 다양한 텍스트를 의미에 따라 정리한 거대한 지도를 나타냅니다. 모델은 지도에서 입력 텍스트 각각에 대한 위치(임베딩)를 찾을 수 있습니다.

API는 입력 토큰을 3,072개까지 처리할 수 있으므로 긴 텍스트와 프로그래밍 코드에 담긴 전체 의미를 소화하고 이를 단일 임베딩으로 나타낼 수 있습니다. 이는 마치 다양한 산업에 대해 전문가급 지식을 가지고 있는 것과 같아서 텍스트 수백만 개를 주의 깊게 읽은 다음, 미묘한 차이까지 분류할 수 있는 나노 카테고리 수백만 개로 정렬합니다.

임베딩 공간을 시각화하면 모델이 텍스트를 어떻게 '전문가급' 정밀도로 분류하는지 실제로 관찰할 수 있습니다. Nomic AI는 확장성이 높고 원활한 UI를 통해 임베딩 공간을 저장하고 시각화하며 상호작용하는 Atlas라는 플랫폼을 제공하며, Google과 협력하여 Stack Overflow 질문 800만 개의 임베딩 공간을 시각화했습니다. 이 페이지로 이동하면 사용하는 브라우저에서 임베딩 공간을 둘러보고 각각의 데이터 포인트를 확대 및 축소해 볼 수 있습니다(Nomic AI 제공).

https://storage.googleapis.com/gweb-cloudblog-publish/images/4._Nomic_AI_Atlas.max-2200x2200.png

Nomic AI Atlas가 Stack Overflow 질문 800만 개를 시각화한 임베딩 공간(여기에서 둘러보기)

https://storage.googleapis.com/gweb-cloudblog-publish/images/5._semantic_understanding.max-2200x2200.png

Embeddings API가 Stack Overflow 질문에 대해 '전문가급'으로 시맨틱 이해한 예

이 데모에서 컴퓨터 프로그래밍별 데이터 세트로 학습하거나 미세 조정하는 과정을 거치지 않았다는 점을 주목하세요. LLM의 제로샷 학습 기능이 혁신적인 이유가 여기에 있습니다. 시간과 비용을 들여 업종별 데이터 세트와 학습 모델을 수집하지 않고도 업종별 비즈니스 문서에 대한 심층적인 시맨틱 검색이 가능하며 금융, 의료, 소매, 제조, 건설, 미디어 등 다양한 업종에 적용할 수 있습니다.

두 번째 핵심 요소: 빠르고 확장 가능한 벡터 검색

벡터 검색 기술은 Stack Overflow 데모의 두 번째 핵심 요소이며 데이터 과학 분야의 또 다른 혁신 기술입니다.

관건은 '임베딩 공간에서 유사한 임베딩을 찾는 방법'입니다. 임베딩은 벡터에 해당하므로, 아래와 같이 벡터 간 거리나 유사성을 계산하면 됩니다.

https://storage.googleapis.com/gweb-cloudblog-publish/images/6._vector_search.max-2200x2200.png

그러나 임베딩이 수백만, 수십억 개인 경우에는 이 같은 작업이 녹록지 않습니다. 예를 들어 768 차원의 임베딩이 800만 개 있는 경우 800만x768의 순서로 계산을 반복해야 하므로 완료하기까지 시간이 매우 오래 걸립니다. 실제로 5년 전 BigQuery에서 임베딩 100만 개로 시도했을 때는 20초가 걸렸습니다.

이에 따라 연구자들은 보다 빠른 검색을 위해 최근접 이웃 탐색(Approximate Nearest Neighbor, ANN)이라는 기술을 연구했습니다. ANN은 벡터 양자화'를 통해 공간을 트리 구조로 이루어진 여러 공간으로 분리합니다. 이는 쿼리 성능을 개선하기 위한 관계형 데이터베이스의 색인과 유사하여, 임베딩 수십억 개로 매우 빠르고 확장성 있는 검색을 지원합니다.

LLM이 주목을 받자 ANN 또한 벡터 검색 기술로 알려지며 빠르게 인기를 얻고 있습니다.

https://storage.googleapis.com/gweb-cloudblog-publish/images/7._ANN.max-2200x2200.png

2020년 Google 연구팀은 새로운 ANN 알고리즘인 ScaNN을 발표했습니다. 업계 최고의 ANN 알고리즘 중 하나로 간주되는 ScaNN은 Google 검색, YouTube 등 여러 주요 Google 서비스에서 검색과 추천 기능에 사용되는 가장 중요한 기반이기도 합니다.

https://storage.googleapis.com/gweb-cloudblog-publish/images/image2_PNcDr5r.max-1000x1000.png

Google Cloud 개발자들은 Vertex AI Matching Engine을 통해 Google의 벡터 검색 기술을 최대한 활용할 수 있습니다. 이 완전 관리형 서비스를 사용하면 개발자가 색인에 임베딩을 추가하고 핵심 임베딩이 포함된 검색어를 실행하여 매우 빠른 속도로 벡터 검색을 수행할 수 있습니다. Stack Overflow 데모의 경우 Matching Engine을 사용해 수십 밀리초 내에 임베딩 800만 개에서 관련성 높은 질문을 찾을 수 있습니다.

https://storage.googleapis.com/gweb-cloudblog-publish/images/8._Matching_Engine.max-2200x2200.png

Matching Engine을 사용하면 많은 시간과 비용을 들이지 않고도 처음부터 고유한 벡터 검색 서비스를 빌드할 수 있으며, 프로덕션 시스템에 뛰어난 확장성, 가용성, 유지관리를 제공하는 것이 목표인 경우 오픈소스 도구를 사용할 수도 있습니다.

Matching Engine으로 LLM 출력 그라운딩

Embeddings API와 Matching Engine을 결합하면 임베딩을 사용하여 짧은 지연 시간으로 LLM 출력을 실제 비즈니스 데이터에 '그라운딩'할 수 있습니다.

https://storage.googleapis.com/gweb-cloudblog-publish/images/10._grounding.max-2200x2200.png

앞서 살펴 본 Stack Overflow 데모의 경우에는 다음과 같은 아키텍처로 시스템을 빌드했습니다.

https://storage.googleapis.com/gweb-cloudblog-publish/images/11._architecture.max-1300x1300.jpg
Stack Overflow 시맨틱 검색 데모의 아키텍처

이 데모의 아키텍처는 두 부분으로 구성되었습니다. 1) BigQuery에서 Vertex AI Workbench와 Stack Overflow 데이터 세트를 사용하여 Matching Engine 색인을 빌드하는 부분(오른쪽) 2) Cloud Run과 Matching Engine을 사용하여 벡터 검색 요청을 처리하는 부분(왼쪽)입니다. 자세한 내용은 GitHub 샘플 노트북을 참고하세요.

LangChain 및 Vertex AI로 LLM 그라운딩

Stack Overflow 데모에 사용된 아키텍처 외에 널리 사용되는 또 다른 그라운딩 방식은 LLM에 벡터 검색 결과를 입력하고 LLM이 사용자를 위한 최종 답변 텍스트를 생성하도록 만드는 것입니다. LangChain은 이 파이프라인을 구현하는 데 널리 사용되는 도구이며, LangChain 통합에는 Vertex AI 생성형 AI 임베딩 API와 Matching Engine이 가장 적합합니다. 이 주제에 관해서는 향후 블로그 게시물에서 자세히 살펴보겠습니다. 조금만 기다려 주세요.

시작하는 방법

이 게시물에서는 텍스트용 Embeddings API와 Matching Engine의 결합이 기업에서 생성형 AI 및 LLM을 신뢰할 수 있는 방법으로 그라운딩하는 데 어떤 도움을 주는지 알아봤습니다. API의 세분화된 시맨틱 이해 기능을 활용하면 다양한 비즈니스에 정보 검색과 추천에 인텔리전스를 제공하여 기업 IT 시스템의 사용자 경험을 한 단계 끌어올릴 수 있습니다.

시작하려면 다음 리소스를 확인하세요.

게시 위치