Digamos que você tenha um modelo de embedding. Para um usuário, como você decidiria quais itens recomendar?
No momento da veiculação, com base em uma consulta, você começa fazendo uma das seguintes ações:
- Para um modelo de fatoração de matrizes, o embedding de consulta (ou usuário) é conhecido estaticamente, e o sistema pode simplesmente procurá-lo na matriz de embedding do usuário.
- Para um modelo de DNN, o sistema calcula a embedding de consulta \(\psi(x)\) no momento da veiculação executando a rede no vetor de recursos \(x\).
Depois de ter a embedding da consulta \(q\), procure as embeddings de item \(V_j\) que estão próximas a \(q\) no espaço de embedding. Esse é um problema de vizinho mais próximo. Por exemplo, é possível retornar os Top-K itens de acordo com a pontuação de semelhança \(s(q, V_j)\).
Você pode usar uma abordagem semelhante nas recomendações de itens relacionados. Por exemplo, quando o usuário assiste um vídeo do YouTube, o sistema pode primeiro procurar a incorporação desse item e depois procurar incorporações de outros itens \(V_j\) que estejam próximos no espaço de incorporação.
Recuperação em grande escala
Para calcular os vizinhos mais próximos no espaço de embedding, o sistema pode avaliar todos os candidatos em potencial. A pontuação exaustiva pode ser cara para corporações muito grandes, mas você pode usar uma das seguintes estratégias para torná-la mais eficiente:
- Se a incorporação da consulta for conhecida de forma estática, o sistema poderá realizar classificações exaustivas off-line, pré-computando e armazenando uma lista dos principais candidatos para cada consulta. Essa é uma prática comum para recomendações de itens relacionados.
- Use vizinhos mais próximos aproximados. O Google fornece uma ferramenta de código aberto no GitHub chamada ScaNN (Vizinhos mais próximos escalonáveis, na sigla em inglês). Essa ferramenta realiza pesquisas por similaridade vetorial eficientes em escala.