🚀 Попробуйте Zilliz Cloud, полностью управляемый Milvus, бесплатно — ощутите 10-кратное увеличение производительности! Попробовать сейчас>

milvus-logo
LFAI
  • Home
  • Blog
  • 🔎 Выбор поисковой системы по сходству вкраплений

🔎 Выбор поисковой системы по сходству вкраплений

  • Scenarios
September 08, 2020
milvus

Приложение Wanyin - это музыкальное сообщество на основе искусственного интеллекта, цель которого - поощрять обмен музыкой и облегчить ее сочинение для любителей музыки.

Библиотека Wanyin содержит огромное количество музыки, загруженной пользователями. Основная задача - отсортировать интересующую музыку, основываясь на предыдущем поведении пользователей. Мы оценили две классические модели: совместную фильтрацию на основе пользователей (User-based CF) и совместную фильтрацию на основе элементов (Item-based CF), как потенциальные модели рекомендательных систем.

  • Модель CF на основе пользователя использует статистику сходства для получения соседних пользователей со схожими предпочтениями или интересами. С помощью полученного набора ближайших соседей система может предсказывать интересы целевого пользователя и генерировать рекомендации.
  • CF на основе элементов, или CF "от элемента к элементу" (I2I), была введена компанией Amazon и является известной моделью коллаборативной фильтрации для рекомендательных систем. Она рассчитывает сходство между предметами, а не пользователями, основываясь на предположении, что предметы, представляющие интерес, должны быть похожи на предметы с высокими оценками.

CF на основе пользователей может привести к непомерно большому времени вычислений, когда количество пользователей переходит определенный рубеж. Принимая во внимание особенности нашего продукта, мы решили использовать I2I CF для реализации системы музыкальных рекомендаций. Учитывая, что мы не располагаем большим количеством метаданных о песнях, нам приходится работать с песнями как таковыми, извлекая из них векторы признаков (embeddings). Наш подход заключается в преобразовании этих песен в mel-frequency cepstrum (MFC), разработке конволюционной нейронной сети (CNN) для извлечения вкраплений признаков песен, а затем в создании музыкальных рекомендаций путем поиска сходства вкраплений.

🔎 Выбор поисковой системы по сходству вкраплений

Теперь, когда у нас есть векторы признаков, остается вопрос, как извлечь из большого объема векторов те, которые похожи на целевой вектор. Когда речь зашла о поисковой системе по сходству вкраплений, мы выбирали между Faiss и Milvus. Я обратил внимание на Milvus, когда просматривал трендовые репозитории GitHub в ноябре 2019 года. Я взглянул на проект, и он привлек меня своими абстрактными API. (На тот момент он был на v0.5.x, а сейчас - на v0.10.2).

Мы предпочитаем Milvus, а не Faiss. С одной стороны, мы уже использовали Faiss раньше, и поэтому хотели бы попробовать что-то новое. С другой стороны, по сравнению с Milvus, Faiss - это скорее базовая библиотека, поэтому использовать ее не совсем удобно. Узнав больше о Milvus, мы решили остановиться на Milvus из-за двух его основных особенностей:

  • Milvus очень прост в использовании. Все, что вам нужно сделать, - это извлечь его Docker-образ и обновить параметры в соответствии с вашим собственным сценарием.
  • Он поддерживает больше индексов и имеет подробную вспомогательную документацию.

Одним словом, Milvus очень дружелюбен к пользователям, а документация довольно подробная. Если вы столкнетесь с какой-либо проблемой, вы обычно сможете найти решение в документации; в противном случае вы всегда можете получить поддержку от сообщества Milvus.

Кластерная служба Milvus ☸️ ⏩.

Приняв решение использовать Milvus в качестве поисковой системы вектора функций, мы настроили отдельный узел в среде разработки (DEV). Он хорошо работал в течение нескольких дней, поэтому мы планировали провести тесты в среде заводских приемочных испытаний (FAT). Если бы автономный узел сломался в производственной среде, вся служба стала бы недоступной. Таким образом, нам необходимо развернуть высокодоступную службу поиска.

Milvus предоставляет Mishards, промежуточное ПО для шардинга кластеров, и Milvus-Helm для настройки. Процесс развертывания кластерной службы Milvus очень прост. Нам нужно только обновить некоторые параметры и упаковать их для развертывания в Kubernetes. На приведенной ниже схеме из документации Milvus показано, как работает Mishards:

1-how-mishards-works-in-milvus-documentation.png 1-how-mishards-works-in-milvus-documentation.png

Mishards каскадирует запрос от восходящего потока к своим подмодулям, разделяющим запрос восходящего потока, а затем собирает и возвращает результаты работы подсервисов в восходящий поток. Общая архитектура кластерного решения на базе Mishards показана ниже:

2-mishards-based-cluster-solution-architecture.jpg 2-mishards-based-cluster-solution-architecture.jpg

В официальной документации дается четкое представление о Mishards. Вы можете обратиться к Mishards, если вам это интересно.

В нашей системе музыкальных рекомендаций мы развернули один узел с возможностью записи, два узла с возможностью чтения и один экземпляр промежуточного ПО Mishards в Kubernetes, используя Milvus-Helm. После того как сервис некоторое время стабильно работал в среде FAT, мы развернули его в продакшене. До сих пор он работает стабильно.

🎧 I2I музыкальные рекомендации 🎶

Как уже упоминалось выше, мы создали систему музыкальных рекомендаций I2I Wanyin, используя извлеченные вкрапления существующих песен. Сначала мы разделили вокал и BGM (разделение дорожек) новой песни, загруженной пользователем, и извлекли вкрапления BGM в качестве представления характеристик песни. Это также помогает отсортировать кавер-версии оригинальных песен. Затем мы сохранили эти вкрапления в Milvus, выполнили поиск похожих песен на основе песен, которые слушал пользователь, а затем отсортировали и переставили найденные песни для создания музыкальных рекомендаций. Процесс реализации показан ниже:

3-music-recommender-system-implementation.png 3-music-recommender-system-implementation.png

🚫 Фильтр дубликатов песен

Еще один сценарий, в котором мы используем Milvus, - фильтрация дубликатов песен. Некоторые пользователи загружают одну и ту же песню или клип несколько раз, и эти дубликаты могут появиться в списке рекомендаций. Это означает, что генерирование рекомендаций без предварительной обработки негативно скажется на пользовательском опыте. Поэтому нам нужно найти дубликаты песен и гарантировать, что они не появятся в том же списке с помощью предварительной обработки.

Еще один сценарий, в котором мы используем Milvus, - фильтрация дубликатов песен. Некоторые пользователи загружают одну и ту же песню или клип несколько раз, и эти дубликаты могут появиться в списке рекомендаций. Это означает, что генерирование рекомендаций без предварительной обработки негативно скажется на удобстве пользователей. Поэтому нам нужно найти дубликаты песен и гарантировать, что они не появятся в том же списке с помощью предварительной обработки.

Как и в предыдущем сценарии, мы реализовали фильтрацию дубликатов песен с помощью поиска похожих векторов признаков. Сначала мы разделили вокал и BGM и нашли несколько похожих песен с помощью Milvus. Для точной фильтрации дубликатов мы извлекли аудиоотпечатки целевой и похожих песен (с помощью таких технологий, как Echoprint, Chromaprint и т. д.), вычислили сходство между аудиоотпечатком целевой песни и каждым из отпечатков похожих песен. Если сходство превышает пороговое значение, мы определяем песню как дубликат целевой песни. Процесс сопоставления аудиоотпечатков делает фильтрацию дубликатов песен более точной, но при этом занимает много времени. Поэтому, когда дело доходит до фильтрации песен в массивной музыкальной библиотеке, мы используем Milvus для предварительной фильтрации наших кандидатов на дубликаты.

4-using-milvus-filter-songs-music-recommender-duplicates.png 4-using-milvus-filter-songs-music-recommender-duplicates.png

Чтобы реализовать систему рекомендаций I2I для массивной музыкальной библиотеки Wanyin, наш подход заключается в извлечении вкраплений песен в качестве их характеристик, поиске схожих вкраплений с вкраплениями целевой песни, а затем сортировке и перестановке результатов для создания рекомендательных списков для пользователя. Чтобы получить рекомендации в реальном времени, мы выбрали Milvus вместо Faiss в качестве поисковой системы по сходству векторов признаков, поскольку Milvus оказался более удобным и сложным. Кроме того, мы применили Milvus для фильтра дубликатов песен, что повышает удобство и эффективность работы.

Вы можете скачать приложение Wanyin App 🎶 и попробовать его в действии. (Примечание: может быть доступно не во всех магазинах приложений).

📝 Авторы:

Джейсон, инженер по алгоритмам в Stepbeats Шиюй Чен, инженер по данным в Zilliz

📚 Ссылки:

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

🤗 Не будьте чужими, следите за нами в Twitter или присоединяйтесь к нам в Slack!👇🏻

Like the article? Spread the word

Продолжить чтение