Создайте семантический поиск на высокой скорости
Семантический поиск - отличный инструмент, помогающий вашим клиентам или сотрудникам находить нужные продукты или информацию. Он может даже выводить на поверхность трудноиндексируемую информацию для достижения лучших результатов. Однако если ваши семантические методологии не развернуты для быстрой работы, они не принесут вам никакой пользы. Клиент или сотрудник не собирается сидеть сложа руки, пока система не спешит отвечать на его запрос, а ведь одновременно с ним может быть получена еще тысяча других.
Как сделать семантический поиск быстрым? Медленный семантический поиск не подходит.
К счастью, Lucidworks любит решать именно такие проблемы. Недавно мы протестировали кластер скромных размеров - читайте дальше, чтобы узнать подробности - и получили 1500 RPS (запросов в секунду) для коллекции из более чем миллиона документов со средним временем ответа около 40 миллисекунд. Вот это уже серьезная скорость.
Реализация семантического поиска
Чтобы сделать магию машинного обучения молниеносной, Lucidworks реализовала семантический поиск, используя подход семантического векторного поиска. Здесь есть две важные части.
Часть первая: модель машинного обучения
Во-первых, вам нужен способ закодировать текст в числовой вектор. Этим текстом может быть описание продукта, поисковый запрос пользователя, вопрос или даже ответ на вопрос. Модель семантического поиска обучается кодировать текст таким образом, чтобы текст, семантически схожий с другими текстами, кодировался в векторы, которые численно "близки" друг к другу. Этот этап кодирования должен быть быстрым, чтобы поддерживать тысячу или более возможных запросов клиентов или пользователей, поступающих каждую секунду.
Часть вторая: Векторная поисковая система
Во-вторых, вам нужен способ быстро найти наилучшие совпадения с запросом клиента или пользователя. В модели текст будет закодирован в числовой вектор. Затем вам нужно сравнить его со всеми числовыми векторами в вашем каталоге или списках вопросов и ответов, чтобы найти эти лучшие соответствия - векторы, которые "ближе всего" к вектору запроса. Для этого вам понадобится векторный движок, способный эффективно и молниеносно обрабатывать всю эту информацию. Он может содержать миллионы векторов, а вам нужны только двадцать или около того лучших совпадений с вашим запросом. И, конечно, он должен обрабатывать тысячу или около того таких запросов каждую секунду.
Чтобы решить эти проблемы, мы добавили векторный поисковый движок Milvus в наш выпуск Fusion 5.3. Milvus - это программное обеспечение с открытым исходным кодом, и он очень быстрый. Milvus использует FAISS(Facebook AI Similarity Search), ту же самую технологию, которую Facebook использует в производстве для своих собственных инициатив в области машинного обучения. При необходимости он может работать еще быстрее на GPU. При установке Fusion 5.3 (или выше) с компонентом машинного обучения Milvus автоматически устанавливается как часть этого компонента, поэтому вы можете легко включить все эти возможности.
Размер векторов в данной коллекции, задаваемый при ее создании, зависит от модели, которая создает эти векторы. Например, в данной коллекции могут храниться векторы, созданные в результате кодирования (с помощью модели) всех описаний товаров в каталоге товаров. Без векторного поискового механизма, подобного Milvus, поиск по сходству во всем векторном пространстве был бы невозможен. Поэтому поиск по сходству пришлось бы ограничить заранее отобранными кандидатами из векторного пространства (например, 500), что привело бы к снижению производительности и качества результатов. Milvus может хранить сотни миллиардов векторов в нескольких коллекциях векторов, чтобы обеспечить быстроту поиска и релевантность результатов.
Использование семантического поиска
Давайте вернемся к рабочему процессу семантического поиска, после того как мы немного узнали о том, почему Milvus может быть так важен. Семантический поиск состоит из трех этапов. На первом этапе загружается и/или обучается модель машинного обучения. После этого данные индексируются в Milvus и Solr. Последний этап - это этап запроса, когда происходит собственно поиск. Ниже мы сосредоточимся на этих двух последних этапах.
Индексирование в Milvus
Lucidworks-1.png
Как показано на диаграмме выше, этап запросов начинается так же, как и этап индексирования, только вместо документов приходят запросы. Для каждого запроса:
- Запрос отправляется на конвейер индексации Smart Answers.
- Затем запрос отправляется в модель ML.
- ML-модель возвращает числовой вектор (зашифрованный из запроса). Опять же, тип модели определяет размер вектора.
- Вектор отправляется в Milvus, который определяет, какие векторы в указанной коллекции Milvus лучше всего соответствуют предоставленному вектору.
- Milvus возвращает список уникальных идентификаторов и расстояний, соответствующих векторам, определенным на четвертом шаге.
- Запрос, содержащий эти идентификаторы и расстояния, отправляется в Solr.
- Затем Solr возвращает упорядоченный список документов, связанных с этими идентификаторами.
Тестирование масштаба
Чтобы доказать, что наши потоки семантического поиска работают с той эффективностью, которая требуется нашим клиентам, мы провели масштабные тесты с помощью скриптов Gatling на облачной платформе Google Cloud Platform, используя кластер Fusion с восемью репликами ML-модели, восемью репликами сервиса запросов и одним экземпляром Milvus. Тесты проводились с использованием индексов Milvus FLAT и HNSW. Индекс FLAT имеет 100 % отзыв, но менее эффективен - за исключением случаев, когда наборы данных малы. Индекс HNSW (Hierarchical Small World Graph) по-прежнему показывает высокое качество результатов и улучшает производительность на больших наборах данных.
Давайте рассмотрим некоторые цифры из недавнего примера:
Lucidworks-2.png
Lucidworks-3.png
Lucidworks-4.png
Начало работы
Конвейеры Smart Answers разработаны так, чтобы ими было легко пользоваться. В Lucidworks есть предварительно обученные модели, которые легко внедряются и обычно дают хорошие результаты, хотя обучение собственных моделей в тандеме с предварительно обученными моделями даст наилучшие результаты. Свяжитесь с нами сегодня, чтобы узнать, как вы можете внедрить эти инициативы в свои поисковые инструменты для получения более эффективных и приятных результатов.
Этот блог перепощен с сайта: https://lucidworks.com/post/how-to-build-fast-semantic-search/?utm_campaign=Oktopost-Blog+Posts&utm_medium=organic_social&utm_source=linkedin
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word