Как Tokopedia добилась 10-кратного повышения эффективности поиска с помощью Milvus

В 10 раз умнее
опыт поиска
Улучшенный
опыт пользователей
Расширенный
масштабируемость и надежность
Our search system has been much more intelligent, stable, and reliable using Milvus.
Rahul Yadav
О Токопедии
Tokopedia - крупнейшая в Индонезии платформа электронной коммерции, насчитывающая 90 миллионов ежемесячных активных пользователей и впечатляющую сеть из 8,6 миллиона продавцов. С охватом 98 % административных регионов Индонезии Tokopedia стала основным местом для онлайн-покупок в стране.
Tokopedia понимает, что ценность ее обширного каталога товаров заключается в том, что покупатели могут без труда найти товары, соответствующие их предпочтениям. Неизменно стремясь повысить релевантность результатов поиска, они ввели на Tokopedia поиск по сходству.
Когда пользователь переходит на страницу результатов поиска на своем мобильном устройстве, он замечает незаметную кнопку "...". Нажав на эту кнопку, пользователь получает доступ к меню, предлагающему увлекательную возможность изучить товары, которые очень похожи на тот, который он просматривает.
Проблемы поиска по ключевым словам
В прошлом Tokopedia Search использовала Elasticsearch в качестве основного механизма для поиска и ранжирования товаров. Каждый поисковый запрос инициировал запрос к Elasticsearch, который ранжировал товары на основе ключевого слова пользователя. Elasticsearch хранит ключевые слова в виде последовательностей числовых значений, представляющих собой коды ASCII или UTF для отдельных букв. Он строит инвертированный индекс для быстрой идентификации документов, содержащих слова из запроса пользователя, и затем определяет лучшие совпадения с помощью ряда алгоритмов оценки.
Однако эти алгоритмы обычно не учитывают семантику искомых ключевых слов. Вместо этого они ориентируются на такие факторы, как частота появления слов в документах, степень их близости друг к другу и другая статистическая информация. Хотя человек может понять смысл, скрывающийся за ASCII-представлением слов, компьютеру нужен надежный алгоритм для сравнения семантики ASCII-кодированных слов.
Векторное представление
Одним из решений проблемы, которое нашла команда Токопедии, было создание нового способа представления ключевых слов, который показывает буквы в слове и дает информацию о его значении. Например, они могут закодировать часто используемые слова вместе с ключевым словом для поиска, чтобы обеспечить вероятный контекст. Отсюда можно предположить, что схожие контексты обозначают схожие понятия, и сравнить их с помощью математических методов. Можно даже кодировать целые предложения, основываясь на их значении.
Выбор Milvus в качестве поисковой системы векторного сходства
Теперь, когда Tokopedia располагает векторами признаков, оставшаяся задача заключается в эффективном извлечении векторов из обширного набора данных, которые близко соответствуют целевому вектору. При изучении систем поиска векторов мы провели пробную оценку (POC) на нескольких стеках векторного поиска, доступных на GitHub, включая FAISS, Vearch и Milvus.
По результатам нагрузочного тестирования мы отдали предпочтение Milvus. По сравнению с Milvus, FAISS работает скорее как базовая библиотека и, следовательно, менее удобна в использовании. По мере углубления в Milvus мы остановились на нем по следующим причинам:
- Milvus оказался удивительно удобным в использовании. Они обнаружили, что вам нужно только извлечь его образ из Docker и настроить параметры в соответствии с вашими конкретными задачами.
- Milvus предлагает более широкий спектр поддерживаемых индексов. Помимо FAISS, HSNW, DISK_ANN и ScaNN, на выбор предлагается 11 индексов.
- Milvus предоставляет исчерпывающую документацию для помощи пользователям в реализации.
Одним словом, Milvus удобен для пользователя, имеет понятную документацию и надежную поддержку сообщества по любым возникающим вопросам.
Milvus в производстве
После внедрения Milvus в качестве векторной поисковой системы, они использовали ее в своем сервисе Ads для подбора ключевых слов с низким коэффициентом наполнения к ключевым словам с высоким коэффициентом наполнения. Они настроили и запустили автономный узел в среде разработки (DEV), и он работал без сбоев, обеспечивая впечатляющий 10-кратный рост коэффициента кликов (CTR) и конверсии (CVR).
Однако возникла потенциальная проблема. Если бы отдельный узел потерпел крах, это сделало бы недоступным весь сервис. Поэтому команда Tokopedia перешла на HA-реализацию Milvus.
Milvus предлагает два инструмента: Mishards, промежуточное ПО для шардинга кластеров, и Milvus-Helm для упрощенной настройки. В Tokopedia для настройки инфраструктуры используют плейбуки Ansible, что побудило их создать плейбук для оркестровки инфраструктуры. На схеме ниже показано, как работает Mishards.
Mishards обеспечивает беспрепятственный поток запросов от восходящего потока к нисходящему, разделяя восходящие запросы на подмодули, собирая результаты от подсервисов и впоследствии доставляя эти результаты обратно источнику восходящего потока.
Архитектура кластерного решения на базе Mishards показана ниже.
Система семантического поискового сервиса Tokopedia включает в себя один узел с возможностью записи, два узла с возможностью чтения и один экземпляр промежуточного ПО Mishards, развернутый в GCP с помощью Milvus Ansible. Система оказалась значительно умнее, стабильнее и надежнее.
Как векторное индексирование ускоряет поиск по сходству?
Для эффективного запроса больших векторных наборов данных в поисковых системах по сходству требуется правильное индексирование. Этот процесс упорядочивает данные и ускоряет поиск, что делает его необходимым для работы с наборами данных, содержащими миллионы, миллиарды и даже триллионы векторов. Проиндексировав массивный векторный набор данных, можно направлять запросы к кластерам или подмножествам данных, которые с наибольшей вероятностью содержат векторы, схожие с входным запросом. Однако при таком подходе можно пожертвовать точностью ради более быстрого выполнения запросов к большим векторным данным.
Чтобы лучше понять, представьте себе индексирование как сортировку слов в словаре по алфавиту. При поиске ключевого слова можно быстро перейти к разделу, содержащему только слова с одинаковой начальной буквой, что значительно ускоряет поиск определения введенного слова.
Резюме
Стремление Tokopedia к расширению функциональности поиска привело ее к Milvus, переломному моменту в семантическом поиске. С помощью Milvus они раскрыли возможности векторного представления и создали в 10 раз более умную систему поиска, которая значительно улучшила пользовательский опыт. Кроме того, их поисковый сервис отличается высокой доступностью, что обеспечивает бесперебойную работу. Путешествие с Milvus изменило поиск Tokopedia, обещая будущее персонализированных и осмысленных результатов поиска. Вместе с Milvus они совершают революцию в электронной коммерции в Индонезии и за ее пределами.
*Это сообщение было написано Рахулом Ядавом, инженером-программистом в Tokopedia. Оно отредактировано и перепощено здесь с разрешения. *