우리가 인터뷰한 많은 조직은 AI 기반 개인화, 권장 사항, 의미 체계 검색 및 이상 탐지를 위해 벡터 검색을 사용하는 탐색 단계에 있습니다. BERT 및 OpenAI를 포함한 대규모 언어 모델(LLM)의 정확성과 접근성이 최근 천문학적으로 향상됨에 따라 기업은 관련 검색 및 분석 경험을 구축하는 방법을 다시 생각하게 되었습니다.
이 블로그에서는 AI를 애플리케이션에 통합한 Pinterest, Spotify, eBay, Airbnb 및 Doordash 등 벡터 검색의 얼리 어답터 5명의 엔지니어링 이야기를 포착합니다. 이 이야기가 임베딩 생성부터 프로덕션 배포까지 벡터 검색의 전체 수명주기를 고려하고 있는 엔지니어링 팀에게 도움이 되기를 바랍니다.
벡터 검색은 고차원 공간에서의 데이터 표현을 기반으로 대규모 데이터 세트에서 유사한 항목을 효율적으로 찾고 검색하는 방법입니다. 이러한 맥락에서 항목은 문서, 이미지, 사운드 등 무엇이든 될 수 있으며 벡터 임베딩으로 표시됩니다. 항목 간의 유사성은 두 벡터 임베딩의 근접성을 수량화하는 코사인 유사성 또는 유클리드 거리 와 같은 거리 측정법을 사용하여 계산됩니다.
벡터 검색 프로세스에는 일반적으로 다음이 포함됩니다.
벡터 검색을 더 잘 시각화하기 위해 각 축이 특징에 해당하는 3D 공간을 상상할 수 있습니다. 공간 내 한 지점의 시간과 위치는 이러한 특징의 값에 따라 결정됩니다. 이 공간에는 비슷한 물건들이 더 가까이 위치하고, 다른 물건들은 더 멀리 떨어져 있습니다.
^ | x Item 1 | / | / | /x Item 2 | / | / | /x Item 3 | / | / | / +------------------->
쿼리가 주어지면 데이터 세트에서 가장 유사한 항목을 찾을 수 있습니다. 쿼리는 항목 임베딩과 동일한 공간에 벡터 임베딩으로 표현되며, 쿼리 임베딩과 각 항목 임베딩 사이의 거리가 계산됩니다. 쿼리 임베딩과의 거리가 가장 짧은 항목 임베딩이 가장 유사한 것으로 간주됩니다.
Query item: x | ^ | | x Item 1| | / | | / | | /x Item 2 | | / | | / | | /x Item 3 | | / | | / | | / | +------------------->
벡터 검색이 고차원 공간에서 작동하므로 이는 분명히 단순화된 시각화입니다.
다음 섹션에서는 벡터 검색에 관한 5개의 엔지니어링 블로그를 요약하고 주요 구현 고려 사항을 강조하겠습니다. 전체 엔지니어링 블로그는 아래에서 확인할 수 있습니다.
Pinterest는 홈 피드의 추천 콘텐츠, 관련 핀, 멀티태스킹 학습 모델을 사용한 검색 등 플랫폼의 여러 영역에서 이미지 검색 및 발견을 위해 벡터 검색을 사용합니다.
다중 작업 모델은 여러 작업을 동시에 수행하도록 학습되며 종종 기본 표현이나 기능을 공유하여 관련 작업 전반에 걸쳐 일반화 및 효율성을 향상시킬 수 있습니다. Pinterest의 경우 팀은 홈피드, 관련 핀 및 검색에서 추천 콘텐츠를 구동하기 위해 동일한 모델을 훈련하고 사용했습니다.
Pinterest는 사용자 검색 쿼리(q)를 사용자가 클릭한 콘텐츠 또는 저장한 핀(p)과 연결하여 모델을 학습합니다. Pinterest가 각 작업에 대해 (q,p) 쌍을 생성한 방법은 다음과 같습니다.
관련 핀 : 선택한 주제(q)와 사용자가 클릭하거나 저장한 핀(p)에서 단어 임베딩이 파생됩니다.
검색 : 검색어 텍스트(q)와 사용자가 클릭하거나 저장한 핀(p)을 바탕으로 단어 임베딩이 생성됩니다.
홈피드 : 사용자의 관심도(q)와 사용자가 클릭하거나 저장한 핀(p)을 기반으로 워드 임베딩이 생성됩니다.
전체 엔터티 임베딩을 얻기 위해 Pinterest는 관련 핀, 검색 및 홈피드에 대한 관련 단어 임베딩의 평균을 계산합니다.
Pinterest는 GloVe, word2vec 및 단일 작업 학습 모델인 PinText-SR을 포함한 비지도 학습 모델에 대해 자체 감독 Pintext-MTL(다중 작업 학습)을 만들고 평가했습니다. PinText-MTL은 다른 임베딩 모델보다 정밀도가 높았습니다. 즉, 모든 긍정적인 예측 중에서 참긍정적인 예측의 비율이 더 높았음을 의미합니다.
또한 Pinterest는 다중 작업 학습 모델이 더 높은 재현율을 갖거나 모델에 의해 정확하게 식별된 관련 사례의 비율이 더 높아 검색 및 발견에 더 적합하다는 사실을 발견했습니다.
이 모든 것을 프로덕션에 통합하기 위해 Pinterest에는 홈피드, 검색 및 관련 핀의 스트리밍 데이터에 대해 훈련된 멀티태스킹 모델이 있습니다. 해당 모델이 훈련되면 Kubernetes+Docker 또는 맵 축소 시스템을 사용하여 대규모 배치 작업으로 벡터 임베딩이 생성됩니다. 플랫폼은 벡터 임베딩의 검색 색인을 구축하고 KNN(K-Nearest Neighbors) 검색을 실행하여 사용자에게 가장 관련성이 높은 콘텐츠를 찾습니다. Pinterest 플랫폼의 성능 요구 사항을 충족하기 위해 결과가 캐시됩니다.
Spotify는 키워드와 의미 검색을 결합하여 사용자에게 관련 팟캐스트 에피소드 결과를 검색합니다. 예를 들어 팀은 Spotify 라이브러리에 관련 팟캐스트 에피소드가 있음에도 불구하고 결과가 0인 "전기 자동차 기후 영향"이라는 쿼리에 대한 키워드 검색의 한계를 강조했습니다. 회상률을 높이기 위해 Spotify 팀은 빠르고 관련성 높은 팟캐스트 검색을 위해 ANN(Approximate Nearest Neighbor)을 사용했습니다.
팀은 Universal Sentence Encoder CMLM 모델을 사용하여 다국어 팟캐스트의 글로벌 라이브러리를 지원하는 벡터 임베딩을 생성하고 고품질 벡터 임베딩을 생성합니다. 텍스트 데이터의 대규모 코퍼스에 대해 훈련된 모델인 BERT를 포함한 다른 모델도 평가되었지만 BERT는 문장 임베딩보다 단어 임베딩에 더 적합하고 영어로만 사전 훈련된 것으로 나타났습니다.
Spotify는 입력 임베딩인 쿼리 텍스트와 팟캐스트 에피소드 임베딩에 대한 제목 및 설명을 포함한 텍스트 메타데이터 필드의 연결을 사용하여 벡터 임베딩을 구축합니다. 유사성을 확인하기 위해 Spotify는 쿼리와 에피소드 임베딩 간의 코사인 거리를 측정했습니다.
기본 Universal Sentence Encoder CMLM 모델을 훈련하기 위해 Spotify는 성공적인 팟캐스트 검색 및 에피소드의 긍정적인 쌍을 사용했습니다. 그들은 무작위 네거티브 쌍을 생성하기 위해 DPR(Open-Domain Question Answering)을 위한 Dense Passage Retrieval 및 Que2Search: Fast and Accurate Query and Document Understanding for Search at Facebook 등의 논문에서 강조된 기술인 일괄 네거티브를 통합했습니다. 테스트는 합성 쿼리와 수동으로 작성된 쿼리를 사용하여 수행되었습니다.
제작 시 팟캐스트 추천 제공에 벡터 검색을 통합하기 위해 Spotify는 다음 단계와 기술을 사용했습니다.
에피소드 벡터 인덱스 : Spotify는 ANN을 기본적으로 지원하는 검색 엔진인 Vespa를 사용하여 오프라인으로 에피소드 벡터를 일괄적으로 인덱스합니다. Vespa를 선택한 이유 중 하나는 에피소드 인기도와 같은 기능에 대한 검색 후 필터링을 포함하는 메타데이터를 통합할 수 있다는 것입니다.
온라인 추론 : Spotify는 Google Cloud Vertex AI를 사용하여 쿼리 벡터를 생성합니다. Vertex AI는 대규모 변환기 모델을 사용하여 임베딩을 생성할 때 더 비용 효율적인 GPU 추론과 쿼리 캐시 지원을 위해 선택되었습니다. 쿼리 벡터 임베딩이 생성된 후 Vespa에서 상위 30개 팟캐스트 에피소드를 검색하는 데 사용됩니다.
의미 검색은 관련 팟캐스트 에피소드를 식별하는 데 기여하지만 키워드 검색을 완전히 대체할 수는 없습니다. 이는 사용자가 정확한 에피소드나 팟캐스트 이름을 검색할 때 의미론적 검색이 정확한 용어 일치에 미치지 못하기 때문입니다. Spotify는 Vespa의 의미론적 검색과 Elasticsearch 의 키워드 검색을 병합한 후 최종 순위 재지정 단계를 거쳐 사용자에게 표시되는 에피소드를 설정하는 하이브리드 검색 접근 방식을 사용합니다.
전통적으로 검색 엔진은 검색 쿼리 텍스트를 항목이나 문서의 텍스트 설명과 정렬하여 결과를 표시했습니다. 이 방법은 선호도를 추론하기 위해 언어에 광범위하게 의존하며 스타일이나 미적 요소를 포착하는 데는 효과적이지 않습니다. eBay는 사용자가 원하는 스타일에 맞는 관련성 있고 유사한 항목을 찾을 수 있도록 이미지 검색을 도입했습니다.
eBay는 텍스트, 이미지, 오디오 또는 비디오와 같은 여러 양식 또는 입력 유형의 데이터를 처리하고 통합하여 예측을 하거나 작업을 수행하도록 설계된 다중 모드 모델을 사용합니다. eBay는 텍스트와 이미지를 모델에 통합하여 CNN(Convolutional Neural Network) 모델, 특히 Resnet-50을 활용하여 이미지 임베딩을 생성하고 BERT 와 같은 텍스트 기반 모델을 사용하여 제목 임베딩을 생성합니다. 모든 목록은 이미지와 제목 임베딩을 모두 결합한 벡터 임베딩으로 표현됩니다.
이미지-제목 목록 쌍과 최근 판매된 목록의 대규모 데이터 세트를 사용하여 다중 모드 모델을 학습한 후에는 사이트 검색 환경에서 이를 프로덕션에 투입할 때입니다. eBay의 목록 수가 많기 때문에 데이터는 eBay의 데이터 웨어하우스인 HDFS에 일괄적으로 로드됩니다. eBay는 Apache Spark를 사용하여 목록 임베딩 생성을 포함하여 목록의 추가 처리에 필요한 이미지와 관련 필드를 검색하고 저장합니다. 목록 임베딩은 대규모 데이터를 집계하는 데 적합한 HBase와 같은 열 형식 저장소에 게시됩니다. HBase에서 목록 임베딩은 eBay에서 만든 검색 엔진인 Cassini에서 색인화되고 제공됩니다.
파이프라인은 작업 양이 많고 복잡하더라도 확장이 가능한 Apache Airflow를 사용하여 관리됩니다. 또한 Spark, Hadoop, Python에 대한 지원도 제공하므로 머신러닝 팀이 쉽게 채택하고 활용할 수 있습니다.
시각적 검색을 통해 사용자는 스타일과 미학이 구매 결정의 핵심인 가구 및 가정 장식 카테고리에서 유사한 스타일과 선호도를 찾을 수 있습니다. 앞으로 eBay는 모든 카테고리에 걸쳐 시각적 검색을 확장하고 사용자가 관련 항목을 검색하여 집 전체에서 동일한 모양과 느낌을 설정할 수 있도록 지원할 계획입니다.
검색 및 유사한 숙소 기능은 AirBnb 사이트 예약의 99%를 유도합니다. AirBnb는 유사한 숙소 추천을 개선하고 검색 순위에 실시간 개인화 기능을 제공하기 위해 숙소 임베딩 기술을 구축했습니다.
AirBnb는 단순히 단어 표현을 넘어 클릭과 예약을 포함한 사용자 행동까지 포함하여 임베딩 적용을 확장할 수 있다는 사실을 일찍부터 깨달았습니다.
임베딩 모델을 훈련하기 위해 AirBnb는 450만 개가 넘는 활성 목록과 8억 개가 넘는 검색 세션을 통합하여 세션에서 사용자가 클릭하고 건너뛰는 목록을 기반으로 유사성을 결정했습니다. 세션에서 동일한 사용자가 클릭한 목록은 서로 더 가깝게 푸시됩니다. 사용자가 건너뛴 목록은 더 멀리 푸시됩니다. 팀은 오프라인 성능과 온라인 제공에 필요한 메모리 간의 균형을 고려하여 d=32인 목록 임베딩의 차원을 결정했습니다.
AirBnb는 특정 목록 특성은 가격과 같은 메타데이터에서 직접 얻을 수 있으므로 학습이 필요하지 않다는 것을 발견했습니다. 그러나 건축, 스타일, 분위기와 같은 속성을 메타데이터에서 파생시키는 것은 훨씬 더 어렵습니다.
AirBnb는 프로덕션으로 전환하기 전에 모델이 사용자가 실제로 예약한 목록을 얼마나 잘 추천하는지 테스트하여 모델을 검증했습니다. 또한 팀은 기존 목록 알고리즘과 벡터 임베딩 기반 알고리즘을 비교하는 A/B 테스트도 실행했습니다. 그들은 벡터 임베딩을 사용한 알고리즘을 통해 CTR이 21% 증가하고 자신이 예약한 목록을 발견하는 사용자가 4.9% 증가한 것으로 나타났습니다.
또한 팀은 검색 시 실시간 개인화를 위한 모델의 일부로 벡터 임베딩을 사용할 수 있다는 사실도 깨달았습니다. 각 사용자에 대해 지난 2주 동안의 사용자 클릭 및 건너뛰기의 단기 기록인 Kafka를 사용하여 실시간으로 수집하고 유지했습니다. 사용자가 수행한 모든 검색에 대해 두 가지 유사성 검색을 실행했습니다.
최근 검색된 지리적 시장을 기반으로
후보 목록과 사용자가 클릭/건너뛴 목록 간의 유사성
임베딩은 오프라인 및 온라인 실험을 통해 평가되었으며 실시간 개인화 기능의 일부가 되었습니다.
Doordash에는 사용자가 주문할 수 있는 다양한 매장이 있으며 개인별 선호도를 사용하여 가장 관련성이 높은 매장을 표시할 수 있으므로 검색 및 발견이 향상됩니다.
Doordash는 벡터 임베딩을 사용하여 매장 피드 알고리즘에 잠재 정보를 적용하려고 했습니다. 이를 통해 Doordash는 매장에 달콤한 품목이 있는지, 트렌디한 것으로 간주되는지, 채식 옵션이 있는지 등 잘 문서화되지 않은 매장 간의 유사점을 찾아낼 수 있습니다.
Doordash는 자연어 처리에 사용되는 임베딩 모델인 word2vec의 파생 모델인 store2vec을 기존 데이터를 기반으로 적용하여 사용했습니다. 팀은 각 매장을 단어로 처리하고 단일 사용자 세션 동안 본 매장 목록을 사용하여 문장을 구성했습니다. 문장당 매장 수는 최대 5개입니다. 사용자 벡터 임베딩을 생성하기 위해 Doordash는 지난 6개월 동안 사용자가 주문한 매장의 벡터 또는 최대 100개의 주문을 합산했습니다.
예를 들어 Doordash는 벡터 검색을 사용하여 샌프란시스코의 인기 있고 트렌디한 조인트인 4505 Burgers 및 New Nagano Sushi에서 최근 구매한 사용자를 기반으로 유사한 레스토랑을 찾았습니다. Doordash는 사용자 임베딩에서 해당 지역의 매장 임베딩까지 코사인 거리를 측정하는 유사한 레스토랑 목록을 생성했습니다. 코사인 거리에서 가장 가까운 매장은 케자르 펍(Kezar Pub)과 목탄한인마을 BBQ인 것을 알 수 있습니다.
Doordash는 더 큰 추천 및 개인화 모델의 기능 중 하나로 store2vec 거리 기능을 통합했습니다. 벡터 검색을 통해 Doordash는 클릭률이 5% 증가하는 것을 확인할 수 있었습니다. 또한 팀은 seq2seq , 모델 최적화, 사용자의 실시간 현장 활동 데이터 통합과 같은 새로운 모델을 실험하고 있습니다.
Pinterest, Spotify, eBay, Airbnb 및 Doordash는 벡터 검색을 통해 더 나은 검색 및 발견 경험을 제공합니다. 이들 팀 중 다수는 텍스트 검색을 사용하기 시작했지만 퍼지 검색이나 특정 스타일이나 미학 검색에 한계가 있음을 발견했습니다. 이러한 시나리오에서 경험에 벡터 검색을 추가하면 관련성이 높고 종종 개인화된 팟캐스트, 베개, 대여, 핀 및 식당을 더 쉽게 찾을 수 있습니다.
벡터 검색을 구현할 때 언급할 가치가 있는 이러한 회사의 몇 가지 결정이 있습니다.
실시간 검색 및 분석 데이터베이스인 Rockset은 최근 벡터 검색 에 대한 지원을 추가했습니다. 지금 $300 크레딧으로 무료 평가판을 시작하여 Rockset에서 벡터 검색을 통해 실시간 개인화, 추천, 이상 탐지 등을 시도해 보세요.