Produto em produção
Cinerd
Encontre um filme a partir de uma lembrança.
22.029 filmes no catálogo
Projeto autoral: ingestão, busca, avaliação e implantação
No conjunto de teste separado da calibração, o nDCG@10 foi de 0,360 com BM25 para 0,829 com a busca híbrida. A métrica avalia a ordenação; não equivale a uma porcentagem de acertos.
A DECISÃO QUE IMPORTA
Retirar um modelo mais complexo
O cross-encoder aumentava a latência cerca de 40 vezes, sem ganho consistente de qualidade. Retirá-lo foi uma decisão apoiada na avaliação.
UMA DECISÃO REAL DO CINERD
Manter um modelo mais complexo?
Testei um cross-encoder para reordenar os resultados. A avaliação mostrou um ganho dentro do ruído e uma latência cerca de 40 vezes maior.
Ver a decisão e sua justificativa
Retirei o cross-encoder da produção. O custo de latência não se justificava pelo ganho inconsistente. A busca híbrida continuou sendo avaliada por testes de qualidade.
Os números descrevem o teste relatado no currículo. Esta interação apresenta a decisão; não faz uma nova medição nem executa os modelos.
O desafio
Nem sempre lembramos o título de um filme. Uma descrição vaga de uma cena ou personagem deveria ser suficiente para começar a busca.
Minha contribuição
Construí um catálogo com 22.029 títulos e um buscador que combina palavras-chave com compreensão semântica. Cuidei da ingestão dos dados, da avaliação de qualidade e da infraestrutura de produção.
O resultado
O produto está disponível para uso. No conjunto de teste, a qualidade da ordenação dos resultados passou de 0,360 para 0,829 em nDCG@10, comparando a busca apenas por palavras-chave com a busca híbrida. Quanto mais próximo de 1, melhor a ordenação nessa métrica.
Explorar os detalhes técnicos
Catálogo do TMDB, IMDb e Wikipédia. Oito sinais de busca, incluindo BM25, embeddings multilingual-e5-large, personagens e popularidade. Normalização por z-score com limite para extremos. Recomendação com SVD próprio, 64 fatores e 10 milhões de avaliações do MovieLens (RMSE 0,83), combinada com conteúdo por RRF.
Deploy na Oracle Cloud, DVC, CI com ruff, mypy e pytest e métricas Prometheus. A quantização INT8 reduziu a memória de 2,3 para 1,7 GB. Um cross-encoder foi retirado porque aumentava a latência cerca de 40 vezes sem ganho consistente de qualidade.