Filtragem colaborativa baseada em itens para sistema de recomendação de música
O Wanyin App é uma comunidade de compartilhamento de música baseada em IA com a intenção de incentivar o compartilhamento de música e tornar a composição musical mais fácil para os entusiastas da música.
A biblioteca do Wanyin contém uma enorme quantidade de músicas enviadas pelos usuários. A principal tarefa é selecionar as músicas de interesse com base no comportamento anterior dos usuários. Avaliamos dois modelos clássicos: filtragem colaborativa baseada em usuários (User-based CF) e filtragem colaborativa baseada em itens (Item-based CF), como potenciais modelos de sistema de recomendação.
- A User-based CF usa estatísticas de similaridade para obter usuários vizinhos com preferências ou interesses semelhantes. Com o conjunto recuperado de vizinhos mais próximos, o sistema pode prever o interesse do usuário-alvo e gerar recomendações.
- Introduzida pela Amazon, a item-based CF, ou item-to-item (I2I) CF, é um modelo bem conhecido de filtragem colaborativa para sistemas de recomendação. Ela calcula similaridades entre itens em vez de usuários, com base na suposição de que itens de interesse devem ser semelhantes aos itens com pontuações altas.
A User-based CF pode levar a um tempo proibitivamente maior de cálculo quando o número de usuários ultrapassa determinado ponto. Levando em consideração as características do nosso produto, decidimos seguir com a I2I CF para implementar o sistema de recomendação de músicas. Dado que não possuímos muitos metadados sobre as músicas, temos que lidar com as músicas em si, extraindo delas vetores de características (embeddings). Nossa abordagem é converter essas músicas em cepstro de frequência mel (MFC), projetar uma rede neural convolucional (CNN) para extrair os embeddings de características das músicas e, em seguida, fazer recomendações musicais por meio de busca por similaridade de embeddings.
🔎 Selecionar um mecanismo de busca por similaridade de embeddings
Agora que temos vetores de características, a questão restante é como recuperar, do grande volume de vetores, aqueles que são semelhantes ao vetor-alvo. Quando se trata de mecanismo de busca de embeddings, estávamos avaliando entre Faiss e Milvus. Notei o Milvus quando estava examinando os repositórios em alta do GitHub em novembro de 2019. Dei uma olhada no projeto e ele me atraiu com suas APIs abstratas. (Ele estava na v0.5.x naquela época e está na v0.10.2 agora.)
Preferimos o Milvus ao Faiss. Por um lado, já usamos o Faiss antes e, portanto, gostaríamos de experimentar algo novo. Por outro lado, comparado ao Milvus, o Faiss é mais uma biblioteca subjacente, portanto não é muito conveniente de usar. À medida que aprendemos mais sobre o Milvus, finalmente decidimos adotar o Milvus por suas duas principais características:
- O Milvus é muito fácil de usar. Tudo o que você precisa fazer é baixar sua imagem Docker e atualizar os parâmetros com base no seu próprio cenário.
- Ele oferece suporte a mais índices e tem documentação de suporte detalhada.
Em poucas palavras, o Milvus é muito amigável para os usuários e a documentação é bastante detalhada. Se você encontrar algum problema, geralmente pode encontrar soluções na documentação; caso contrário, sempre pode obter suporte da comunidade Milvus.
Serviço de cluster Milvus ☸️ ⏩
Depois de decidir usar o Milvus como mecanismo de busca de vetores de características, configuramos um nó independente em um ambiente de desenvolvimento (DEV). Ele estava funcionando bem há alguns dias, então planejamos executar testes em um ambiente de teste de aceitação de fábrica (FAT). Se um nó independente falhasse em produção, todo o serviço ficaria indisponível. Assim, precisamos implantar um serviço de busca altamente disponível.
O Milvus fornece tanto o Mishards, um middleware de fragmentação de cluster, quanto o Milvus-Helm para configuração. O processo de implantação de um serviço de cluster Milvus é simples. Precisamos apenas atualizar alguns parâmetros e empacotá-los para implantação no Kubernetes. O diagrama abaixo da documentação do Milvus mostra como o Mishards funciona:
Um diagrama do mecanismo de funcionamento do Mishards.
Mishards propaga uma solicitação do upstream para seus submódulos, dividindo a solicitação do upstream, e então coleta e retorna os resultados dos subserviços para o upstream. A arquitetura geral da solução de cluster baseada em Mishards é mostrada abaixo:
Arquitetura geral do Mishards.
A documentação oficial fornece uma introdução clara ao Mishards. Você pode consultar Mishards se tiver interesse.
Em 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 ficou em execução de forma estável em um ambiente FAT por um tempo, nós o implantamos em produção. Ele tem permanecido estável até agora.
🎧 Recomendação de música I2I 🎶
Como mencionado acima, construímos o sistema de recomendação de música I2I da Wanyin usando os embeddings extraídos das músicas existentes. Primeiro, separamos o vocal e o BGM (separação de faixas) de uma nova música enviada pelo usuário e extraímos os embeddings do BGM como a representação de características da música. Isso também ajuda a organizar versões cover de músicas originais. Em seguida, armazenamos esses embeddings no Milvus, pesquisamos músicas semelhantes com base nas músicas que o usuário ouviu e então ordenamos e rearranjamos as músicas recuperadas para gerar recomendações musicais. O processo de implementação é mostrado abaixo:
Implementação do sistema de recomendação de música I2I da Wanyin.
🚫 Filtro de músicas duplicadas
Outro cenário em que usamos Milvus é a filtragem de músicas duplicadas. Alguns usuários enviam a mesma música ou clipe várias vezes, e essas músicas duplicadas podem aparecer em sua lista de recomendações. Isso significa que gerar recomendações sem pré-processamento afetaria a experiência do usuário. Portanto, precisamos identificar as músicas duplicadas e garantir que elas não apareçam na mesma lista por meio de pré-processamento.
Outro cenário em que usamos Milvus é a filtragem de músicas duplicadas. Alguns usuários enviam a mesma música ou clipe várias vezes, e essas músicas duplicadas podem aparecer em sua lista de recomendações. Isso significa que gerar recomendações sem pré-processamento afetaria a experiência do usuário. Portanto, precisamos identificar as músicas duplicadas e garantir que elas não apareçam na mesma lista por meio de pré-processamento.
Assim como no cenário anterior, implementamos a filtragem de músicas duplicadas por meio da busca por vetores de características semelhantes. Primeiro, separamos o vocal e o BGM e recuperamos várias músicas semelhantes usando Milvus. Para filtrar músicas duplicadas com precisão, extraímos as impressões digitais de áudio da música-alvo e das músicas semelhantes (com tecnologias como Echoprint, Chromaprint, etc.), calculamos a similaridade entre a impressão digital de áudio da música-alvo e cada uma das impressões digitais das músicas semelhantes. Se a similaridade ultrapassar o limite, definimos uma música como duplicada da música-alvo. O processo de correspondência de impressões digitais de áudio torna a filtragem de músicas duplicadas mais precisa, mas também é demorado. Portanto, quando se trata de filtrar músicas em uma biblioteca musical massiva, usamos Milvus para filtrar nossas músicas duplicadas candidatas como uma etapa preliminar.
Usando Milvus para realizar a filtragem de músicas duplicadas.
Para implementar o sistema de recomendação I2I para a enorme biblioteca musical da Wanyin, nossa abordagem é extrair os embeddings das músicas como seus recursos, recuperar embeddings semelhantes ao embedding da música-alvo e, em seguida, classificar e reorganizar os resultados para gerar listas de recomendações para o usuário. Para obter recomendações em tempo real, escolhemos Milvus em vez de Faiss como nosso mecanismo de busca por similaridade de vetores de recursos, pois Milvus se mostra mais fácil de usar e sofisticado. Pelo mesmo motivo, também aplicamos Milvus ao nosso filtro de músicas duplicadas, o que melhora a experiência do usuário e a eficiência.
Você pode baixar o Wanyin App 🎶 e experimentá-lo. (Observação: pode não estar disponível em todas as lojas de aplicativos.)
📝 Autores:
Jason, Engenheiro de Algoritmos na Stepbeats Shiyu Chen, Engenheira de Dados na 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!👇🏻
Continue lendo

Zilliz Cloud BYOC Now Available Across AWS, GCP, and Azure
Zilliz Cloud BYOC is now generally available on all three major clouds. Deploy fully managed vector search in your own AWS, GCP, or Azure account — your data never leaves your VPC.

Cosmos World Foundation Model Platform for Physical AI
NVIDIA's Cosmos platform enables safe, digital twin training of GenAI models for physical applications, overcoming data scarcity and safety challenges.

Introducing DeepSearcher: A Local Open Source Deep Research
In contrast to OpenAI’s Deep Research, this example ran locally, using only open-source models and tools like Milvus and LangChain.



