시맨틱 검색을 사용해 검색을 10배 더 스마트하게 만든 방법
Tokopedia에서는 구매자가 자신에게 관련 있는 상품을 찾을 수 있을 때에만 우리의 상품 코퍼스에 담긴 가치가 발휘된다는 것을 이해하고 있으므로, 검색 결과의 관련성을 개선하기 위해 노력하고 있습니다.
이러한 노력을 더욱 강화하기 위해 Tokopedia에 유사도 검색을 도입합니다. 모바일 기기에서 검색 결과 페이지로 이동하면, 해당 상품과 유사한 상품을 검색할 수 있는 옵션을 제공하는 메뉴를 여는 “…” 버튼을 볼 수 있습니다.
키워드 기반 검색
Tokopedia Search는 상품 검색 및 랭킹에 Elasticsearch를 사용합니다. 각 검색 요청에 대해 먼저 Elasticsearch에 쿼리하며, Elasticsearch는 검색 쿼리에 따라 상품의 순위를 매깁니다. ElasticSearch는 각 단어를 각 글자의 ASCII (또는 UTF) 코드를 나타내는 숫자의 시퀀스로 저장합니다. 사용자 쿼리의 단어가 포함된 문서를 빠르게 찾아내기 위해 inverted-index를 구축한 다음, 다양한 스코어링 알고리즘을 사용해 그중에서 가장 잘 맞는 항목을 찾습니다. 이러한 스코어링 알고리즘은 단어가 무엇을 의미하는지보다는, 문서에서 얼마나 자주 나타나는지, 서로 얼마나 가까이 있는지 등에 거의 더 주목합니다. ASCII 표현은 의미를 전달하기에 충분한 정보를 분명히 담고 있습니다(결국 우리 인간은 그것을 이해할 수 있으니까요). 안타깝게도 컴퓨터가 ASCII로 인코딩된 단어들을 그 의미에 따라 비교할 수 있는 좋은 알고리즘은 없습니다.
벡터 표현
이에 대한 한 가지 해결책은 단어에 포함된 글자뿐만 아니라 그 의미에 관한 정보도 알려주는 대체 표현을 고안하는 것입니다. 예를 들어, 우리 단어가 어떤 다른 단어들과 자주 함께 사용되는지를 인코딩할 수 있습니다(가능성 있는 문맥으로 표현). 그러면 유사한 문맥이 유사한 대상을 나타낸다고 가정하고, 수학적 방법을 사용해 이를 비교하려고 시도할 수 있습니다. 심지어 전체 문장을 그 의미에 따라 인코딩하는 방법을 찾을 수도 있습니다.
벡터 표현은 ASCII 표현과 비교해 단어의 의미도 드러냅니다.
임베딩 유사도 검색 엔진 선택
이제 특징 벡터가 있으므로, 남은 문제는 대량의 벡터 중에서 대상 벡터와 유사한 벡터를 어떻게 검색해 가져올 것인가입니다. 임베딩 검색 엔진과 관련해, 우리는 Github에서 사용할 수 있는 여러 엔진에 대해 POC를 시도했으며 그중 일부는 FAISS, Vearch, Milvus입니다.
부하 테스트 결과를 바탕으로 우리는 다른 엔진보다 Milvus를 선호합니다. 한편으로는 다른 팀에서 이전에 FAISS를 사용해 본 적이 있어 새로운 것을 시도해 보고 싶었습니다. Milvus와 비교하면 FAISS는 기반 라이브러리에 더 가까우므로 사용하기에 그다지 편리하지 않습니다. Milvus에 대해 더 많이 알게 되면서, 우리는 결국 두 가지 주요 기능 때문에 Milvus를 채택하기로 결정했습니다:
Milvus는 사용하기 매우 쉽습니다. Docker 이미지를 가져와 자신의 시나리오에 맞게 매개변수를 업데이트하기만 하면 됩니다.
더 많은 인덱스를 지원하며 자세한 지원 문서가 있습니다.
간단히 말해, Milvus는 사용자에게 매우 친화적이며 문서도 상당히 상세합니다. 문제가 발생하면 보통 문서에서 해결책을 찾을 수 있으며, 그렇지 않더라도 언제든 Milvus 커뮤니티에서 지원을 받을 수 있습니다.
Milvus 클러스터 서비스
특징 벡터 검색 엔진으로 Milvus를 사용하기로 결정한 후, 낮은 충족률 키워드와 높은 충족률 키워드를 매칭하고자 했던 Ads 서비스 사용 사례 중 하나에 Milvus를 사용하기로 했습니다. 개발(DEV) 환경에서 독립형 노드를 구성하고 서비스를 시작했으며, 며칠 동안 잘 실행되었고 개선된 CTR/CVR 지표를 제공했습니다. 프로덕션에서 독립형 노드가 중단되면 전체 서비스가 사용할 수 없게 됩니다. 따라서 고가용성 검색 서비스를 배포해야 합니다.
Milvus는 클러스터 샤딩 미들웨어인 Mishards와 구성을 위한 Milvus-Helm을 모두 제공합니다. Tokopedia에서는 인프라 설정에 Ansible playbook을 사용하므로 인프라 오케스트레이션을 위한 playbook을 만들었습니다. 아래 Milvus 문서의 다이어그램은 Mishards가 어떻게 작동하는지 보여줍니다:
Mishards 작동 방식.
Mishards는 업스트림의 요청을 하위 모듈로 전달하면서 업스트림 요청을 분할한 다음, 하위 서비스의 결과를 수집하여 업스트림으로 반환합니다. Mishards 기반 클러스터 솔루션의 전체 아키텍처는 아래와 같습니다:
Mishards의 전체 아키텍처.
공식 문서는 Mishards에 대한 명확한 소개를 제공합니다. 관심이 있다면 Mishards를 참고할 수 있습니다.
우리의 keyword-to-keyword 서비스에서는 Milvus ansible을 사용하여 GCP에 쓰기 가능 노드 1개, 읽기 전용 노드 2개, Mishards 미들웨어 인스턴스 1개를 배포했습니다. 지금까지 안정적으로 운영되고 있습니다. 유사도 검색 엔진이 의존하는 백만, 십억, 심지어 조 단위 벡터 데이터셋을 효율적으로 쿼리할 수 있게 해주는 핵심 구성 요소는 인덱싱입니다. 인덱싱은 빅데이터 검색을 획기적으로 가속화하는 데이터 구성 과정입니다.
벡터 인덱싱은 유사도 검색을 어떻게 가속화하나요?
유사도 검색 엔진은 입력을 데이터베이스와 비교하여 입력과 가장 유사한 객체를 찾는 방식으로 작동합니다. 인덱싱은 데이터를 효율적으로 구성하는 과정이며, 대규모 데이터셋에서 시간이 많이 걸리는 쿼리를 극적으로 가속화함으로써 유사도 검색을 유용하게 만드는 데 중요한 역할을 합니다. 대규모 벡터 데이터셋이 인덱싱되면, 쿼리는 입력 쿼리와 유사한 벡터를 포함할 가능성이 가장 높은 클러스터 또는 데이터의 하위 집합으로 라우팅될 수 있습니다. 실제로 이는 매우 큰 벡터 데이터에 대한 쿼리 속도를 높이기 위해 어느 정도의 정확도를 희생한다는 의미입니다.
사전에 비유할 수 있습니다. 사전에서는 단어가 알파벳순으로 정렬되어 있습니다. 단어를 찾을 때, 같은 첫 글자를 가진 단어만 포함된 섹션으로 빠르게 이동할 수 있어 입력 단어의 정의를 찾는 검색이 획기적으로 빨라집니다.
다음은 무엇일까요?
Blog_How we used semantic search to make our search 10x smarter_5.jpeg
위에서 보듯이, 모든 경우에 맞는 단일 솔루션은 없으며, 우리는 항상 임베딩을 얻는 데 사용되는 모델의 성능을 개선하고자 합니다.
또한 기술적인 관점에서, 우리는 여러 학습 모델을 동시에 실행하고 다양한 실험의 결과를 비교하고자 합니다. 이미지 검색, 비디오 검색과 같은 실험에 대한 더 많은 정보를 기대해 주세요.
참고 자료:
- Mishards Docs:https://milvus.io/docs/v0.10.2/mishards.md
- Mishards: https://github.com/milvus-io/milvus/tree/master/shards
- Milvus-Helm: https://github.com/milvus-io/milvus-helm/tree/master/charts/milvus
이 블로그 글은 다음에서 재게시되었습니다: https://medium.com/tokopedia-engineering/how-we-used-semantic-search-to-make-our-search-10x-smarter-bd9c7f601821
Milvus로 무언가를 만드는 방법에 대해 더 알아보려면 다른 사용자 사례를 읽어보세요.
계속 읽기

Introducing Loon: A New Storage Engine for Vector Data That Never Stops Changing
Loon is a new storage engine for Milvus 3.0 and Zilliz Vector Lakebase, built to manage evolving vector datasets with ColumnGroups, row ID alignment, and Manifests.

Zilliz Cloud Now Available in Azure North Europe: Bringing AI-Powered Vector Search Closer to European Customers
The addition of the Azure North Europe (Ireland) region further expands our global footprint to better serve our European customers.

Balancing Precision and Performance: How Zilliz Cloud's New Parameters Help You Optimize Vector Search
Optimize vector search with Zilliz Cloud’s level and recall features to tune accuracy, balance performance, and power AI applications.



