🚀 Experimente o Zilliz Cloud, o Milvus totalmente gerenciado, gratuitamente—experimente um desempenho 10x mais rápido! Experimente Agora>>

milvus-logo
LFAI
  • Home
  • Blog
  • Selecionar um motor de pesquisa de similaridade de incorporação

Selecionar um motor de pesquisa de similaridade de incorporação

  • Scenarios
September 08, 2020
milvus

A aplicação Wanyin é uma comunidade de partilha de música baseada em IA com a intenção de incentivar a partilha de música e facilitar a composição de música para os entusiastas da música.

A biblioteca do Wanyin contém uma enorme quantidade de música carregada pelos utilizadores. A principal tarefa é selecionar a música de interesse com base no comportamento anterior dos utilizadores. Avaliámos dois modelos clássicos: a filtragem colaborativa baseada no utilizador (FC baseada no utilizador) e a filtragem colaborativa baseada no item (FC baseada no item), como potenciais modelos de sistemas de recomendação.

  • A FC baseada no utilizador utiliza estatísticas de semelhança para obter utilizadores vizinhos com preferências ou interesses semelhantes. Com o conjunto recuperado de vizinhos mais próximos, o sistema pode prever o interesse do utilizador-alvo e gerar recomendações.
  • Introduzido pela Amazon, o CF baseado em itens, ou CF item-a-item (I2I), é um modelo de filtragem colaborativa bem conhecido para sistemas de recomendação. Calcula as semelhanças entre itens em vez de utilizadores, com base no pressuposto de que os itens de interesse devem ser semelhantes aos itens com pontuações elevadas.

A FC baseada no utilizador pode levar a um tempo de cálculo proibitivamente longo quando o número de utilizadores ultrapassa um determinado ponto. Tendo em conta as caraterísticas do nosso produto, decidimos optar pelo I2I CF para implementar o sistema de recomendação de música. Dado que não possuímos muitos metadados sobre as músicas, temos de lidar com as músicas em si, extraindo-lhes vectores de caraterísticas (embeddings). Nossa abordagem é converter essas músicas em mel-frequency cepstrum (MFC), projetar uma rede neural convolucional (CNN) para extrair os embeddings de recursos das músicas e, em seguida, fazer recomendações de música por meio da pesquisa de similaridade de embedding.

Selecionar um motor de pesquisa de similaridade de incorporação

Agora que temos vectores de caraterísticas, a questão remanescente é como recuperar do grande volume de vectores aqueles que são semelhantes ao vetor alvo. No que diz respeito ao motor de pesquisa de embeddings, estávamos a ponderar entre o Faiss e o Milvus. Eu notei Milvus quando estava passando pelos repositórios de tendências do GitHub em novembro de 2019. Eu dei uma olhada no projeto e ele me atraiu com suas APIs abstratas. (Na altura estava na v0.5.x e agora na v0.10.2).

Preferimos o Milvus ao Faiss. Por um lado, já usámos o Faiss antes e, por isso, gostaríamos de experimentar algo novo. Por outro lado, comparado com Milvus, Faiss é mais uma biblioteca subjacente, portanto não é muito conveniente de usar. À medida que fomos aprendendo mais sobre Milvus, decidimos finalmente adotar Milvus pelas suas duas caraterísticas principais:

  • Milvus é muito fácil de usar. Tudo o que precisa de fazer é puxar a sua imagem Docker e atualizar os parâmetros com base no seu próprio cenário.
  • Suporta mais índices e tem documentação de apoio detalhada.

Em suma, Milvus é muito amigável para os utilizadores e a documentação é bastante detalhada. Se se deparar com algum problema, pode normalmente encontrar soluções na documentação; caso contrário, pode sempre obter apoio da comunidade Milvus.

Serviço de cluster Milvus ☸️ ⏩

Depois de decidirmos utilizar o Milvus como motor de pesquisa de vectores de caraterísticas, configurámos um nó autónomo num ambiente de desenvolvimento (DEV). Estava a funcionar bem há alguns dias, pelo que planeámos executar testes num ambiente de teste de aceitação de fábrica (FAT). Se um nó autónomo falhasse em produção, todo o serviço ficaria indisponível. Assim, precisamos de implementar um serviço de pesquisa altamente disponível.

O Milvus fornece o Mishards, um middleware de fragmentação de clusters, e o Milvus-Helm para configuração. O processo de implementação de um serviço de cluster Milvus é simples. Só precisamos atualizar alguns parâmetros e empacotá-los para implantação no Kubernetes. O diagrama abaixo, retirado da documentação do Milvus, mostra como o Mishards funciona:

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

O Mishards faz uma solicitação em cascata do upstream para seus sub-módulos que dividem a solicitação do upstream e, em seguida, coleta e retorna os resultados dos sub-serviços para o upstream. A arquitetura geral da solução de cluster baseada em Mishards é mostrada abaixo:

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

A documentação oficial fornece uma introdução clara do Mishards. Pode consultar o Mishards se estiver interessado.

No nosso sistema de recomendação de música, implantamos um nó gravável, dois nós somente leitura e uma instância de middleware Mishards no Kubernetes, usando Milvus-Helm. Depois que o serviço estava funcionando de forma estável em um ambiente FAT por um tempo, nós o implantamos em produção. Até à data, tem-se mantido estável.

Recomendação de música I2I 🎶

Como já foi referido, criámos o sistema de recomendação de música I2I da Wanyin utilizando os embeddings extraídos das canções existentes. Em primeiro lugar, separámos o vocal e o BGM (separação de faixas) de uma nova canção carregada pelo utilizador e extraímos os embeddings do BGM como representação da caraterística da canção. Isto também ajuda a selecionar versões cover de canções originais. Em seguida, armazenámos estes embeddings no Milvus, procurámos canções semelhantes com base nas canções que o utilizador ouviu e, depois, ordenámos e reorganizámos as canções recuperadas para gerar recomendações de música. O processo de implementação é mostrado abaixo:

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

Filtro de músicas duplicadas

Outro cenário em que utilizamos o Milvus é a filtragem de músicas duplicadas. Alguns utilizadores carregam a mesma música ou clip várias vezes, e estas músicas duplicadas podem aparecer na sua lista de recomendações. Isto significa que a geração de recomendações sem pré-processamento afectaria a experiência do utilizador. Por isso, temos de descobrir as músicas duplicadas e garantir que não aparecem na mesma lista através do pré-processamento.

Outro cenário em que utilizamos o Milvus é a filtragem de músicas duplicadas. Alguns utilizadores carregam a mesma música ou clip várias vezes, e estas músicas duplicadas podem aparecer na sua lista de recomendações. Isto significa que a geração de recomendações sem pré-processamento afectaria a experiência do utilizador. Por isso, temos de descobrir as músicas duplicadas e garantir que não aparecem na mesma lista através do pré-processamento.

Tal como no cenário anterior, implementámos a filtragem de canções duplicadas através da procura de vectores de caraterísticas semelhantes. Primeiro, separámos a voz e a música de fundo e obtivemos um conjunto de canções semelhantes utilizando o Milvus. Para filtrar com precisão as canções duplicadas, extraímos as impressões digitais de áudio da canção alvo e das canções semelhantes (com tecnologias como Echoprint, Chromaprint, etc.), calculámos a semelhança entre a impressão digital de áudio da canção alvo e cada uma das impressões digitais das canções semelhantes. Se a semelhança ultrapassar o limiar, definimos uma canção como um duplicado da canção alvo. O processo de correspondência de impressões digitais de áudio torna a filtragem de canções duplicadas mais precisa, mas também é moroso. Por isso, quando se trata de filtrar canções numa biblioteca de música maciça, utilizamos o Milvus para filtrar as nossas canções candidatas a duplicado como passo preliminar.

4-using-milvus-filter-songs-music-recommender-duplicates.png 4-usar-milvus-filtrar-músicas-recomendador-duplicadas.png

Para implementar o sistema de recomendação I2I para a enorme biblioteca de música do Wanyin, a nossa abordagem consiste em extrair os "embeddings" das canções como sua caraterística, recuperar "embeddings" semelhantes ao "embedding" da canção alvo e, em seguida, ordenar e reorganizar os resultados para gerar listas de recomendação para o utilizador. Para obter recomendações em tempo real, escolhemos o Milvus em vez do Faiss como motor de pesquisa de semelhanças de vectores de caraterísticas, uma vez que o Milvus se revela mais fácil de utilizar e sofisticado. Da mesma forma, também aplicámos o Milvus ao nosso filtro de músicas duplicadas, o que melhora a experiência e a eficiência do utilizador.

Pode descarregar a aplicação Wanyin 🎶 e experimentá-la. (Nota: pode não estar disponível em todas as lojas de aplicações).

📝 Autores:

Jason, Engenheiro de Algoritmos da Stepbeats Shiyu Chen, Engenheiro de Dados da Zilliz

Referências:

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

Não seja um estranho, siga-nos no Twitter ou junte-se a nós no Slack! 👇🏻

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started

Like the article? Spread the word

Continue Lendo