Cada um desses eventos é acompanhado por um surto de interesse dos usuários da Internet. As pessoas não querem apenas ler sobre o que aconteceu, mas também ver as fotos. Eles vão em busca de fotos e esperam encontrar fotos novas e relevantes que podem não ter existido algumas horas atrás. O interesse surge inesperadamente e, em poucos dias, cai para quase zero.
A peculiaridade da situação é que os motores de busca convencionais não são projetados para tal cenário. Além disso, o critério de atualização do conteúdo contradiz outras propriedades importantes da boa pesquisa: relevância, autoridade, etc. Tecnologias especiais são necessárias para não apenas encontrar novos conteúdos, mas também para manter um equilíbrio nos resultados.
Meu nome é Denis Sakhnov, hoje irei falar sobre uma nova abordagem para fornecer conteúdo novo para Yandex.Images. E meu colega Dmitry KrivokonKrivokonirá compartilhar detalhes sobre as métricas e classificação de imagens novas. Você aprenderá sobre as abordagens antigas e novas de avaliação da qualidade. Também iremos lembrá-lo sobre YT, Logbroker e RTMR.
Para que a pesquisa de imagens funcione bem nessa parte das consultas, cujas respostas devem conter conteúdo novo, você precisa resolver as seguintes tarefas:
- Aprenda a encontrar e baixar imagens novas rapidamente.
- Aprenda a processá-los rapidamente.
- Aprenda como coletar rapidamente documentos para pesquisa baseada em imagens (este ponto ficará mais claro à medida que a história avança).
- Formule critérios para a qualidade da busca por novos conteúdos.
- Aprenda como classificar e combinar conteúdo no SERP com base nos requisitos de qualidade.
Vamos começar com o primeiro ponto.
1. Obtendo fotos
Existem muitos sites na Internet, muitos deles publicam algo regularmente, incluindo fotos. Para que as pessoas vejam tudo isso na busca de imagens, o robô deve chegar ao site e baixar o conteúdo. Normalmente é assim que a pesquisa funciona: percorremos os sites que conhecemos com relativa rapidez e obtemos novas fotos. Mas quando se trata de conteúdo que de repente se torna relevante agora, esse modelo falha. Como a Internet é enorme, é impossível baixar documentos HTML de todos os sites do mundo “agora” e digerir tudo rapidamente. Pelo menos ninguém no mundo resolveu esse problema ainda.
Alguém pode imaginar uma solução para o problema desta forma: rastreie os surtos de solicitações e, em primeiro lugar, processe apenas as fontes que de alguma forma correspondem às solicitações. Mas isso soa bem no papel. Primeiro, para verificar a correspondência entre algo e algo, você precisa já ter o conteúdo disponível. Em segundo lugar, se começarmos a fazer algo após o pico de solicitações, já estamos atrasados. Por mais louco que pareça, você precisa encontrar novos conteúdos antes de precisar deles. Mas como você prevê o inesperado?
A resposta correta é de jeito nenhum. Não sabemos nada sobre o momento das erupções vulcânicas. Mas sabemos em quais sites geralmente aparece conteúdo novo e útil. Nós fomos deste lado. Começamos a usar uma fórmula de aprendizado de máquina que prioriza o rastreamento de nosso rastreador com base na qualidade e relevância do conteúdo. Que os SEOs nos perdoem: não entraremos em detalhes aqui. A tarefa do robô é nos entregar documentos HTML o mais rápido possível. Só depois podemos olhar seu preenchimento e encontrar novos textos, links para fotos, etc.
Links de imagens são bons, mas não são particularmente úteis para pesquisas até agora. Em primeiro lugar, você precisa baixá-los para nós. Mas, novamente, há muitos novos links para imagens para fazer o download instantaneamente. E o problema aqui não está apenas em nossos recursos: os proprietários de sites também não gostariam que o Yandex os incomodasse acidentalmente. Portanto, usamos o aprendizado de máquina para priorizar o download de imagens. Os fatores são diferentes, são muitos, não vamos explicar tudo, mas por exemplo podemos dizer que a frequência com que a imagem aparece em diferentes recursos também afeta a prioridade.
Agora temos uma lista de links para imagens. Então, nós os baixamos para nós mesmos. Usamos nosso próprio serviço Logbroker. Essa coisa funciona como um ônibus de transporte, sobrevivendo com sucesso a enormes volumes de tráfego. Vários anos atrás, nosso colega Alexey Ozeritsky já falou sobre essa tecnologia no Habré.
É aqui que o primeiro estágio é concluído logicamente. Identificamos as fontes e extraímos com sucesso algumas fotos. Só falta um pouco: aprender a trabalhar com eles.
2. Processar fotos
As fotos em si são, claro, úteis, mas ainda precisam ser preparadas.
Funciona assim: 1. No serviço de computação stateless RTHub, versões de tamanhos diferentes são preparadas. Isso é necessário para pesquisa, onde é conveniente mostrar miniaturas nos resultados e fornecer o conteúdo original do site de origem com um clique.
2. Os recursos da rede neural são calculados. Offline (ou seja, antecipadamente, e não no momento da classificação) em máquinas com GPU, são lançadas redes neurais, cujo resultado serão vetores de recursos de imagem. E também são calculados os valores de classificadores úteis: beleza, estética, conteúdo impróprio e muitos outros. Ainda precisamos de tudo isso.
3. E então, usando a informação contada da imagem, as duplicatas são coladas. Isso é importante: o usuário provavelmente não ficará satisfeito com os resultados da pesquisa em que as mesmas imagens prevalecerão. Ao mesmo tempo, podem diferir ligeiramente: em algum lugar cortam a borda, em algum lugar adiciona uma marca d'água, etc. Efetuamos a colagem de duplicados em duas etapas. Primeiro, há um agrupamento aproximado de imagens próximas usando vetores de rede neural. Nesse caso, as imagens no cluster podem nem mesmo coincidir em significado, mas isso nos permite paralelizar um trabalho posterior com elas. Então, dentro de cada cluster, colamos duplicatas procurando pontos de ancoragem nas imagens. Observação: as redes neurais são ótimas para procurar imagens semelhantes, mas ferramentas menos "na moda" são mais eficazes para localizar duplicatas completas; redes neurais podem ser muito inteligentes e ver "o mesmo em diferente".
Assim, ao final dessa etapa, temos as fotos prontas em diferentes versões, passadas pela colagem de duplicatas, com rede neural pré-calculada e outras características. Enviando para o ranking? Não, é muito cedo.
3. Coletamos fotos em documentos
Documento é o nosso nome para a entidade que participa do ranking. Do lado do usuário, pode parecer um link para uma página (pesquisa em sites), uma imagem (pesquisa de imagens), um vídeo (pesquisa de vídeo), uma cafeteira (pesquisa de mercadorias) ou qualquer outra coisa. Mas, por dentro, atrás de cada unidade nos resultados da pesquisa, há um monte de informações heterogêneas. No nosso caso - não apenas a imagem em si, sua rede neural e outros recursos, mas também informações sobre as páginas onde está inserida, os textos que a descrevem nessas páginas, estatísticas de comportamento do usuário (por exemplo, cliques na imagem). Todos juntos - este é o documento. E antes de prosseguir diretamente para a pesquisa, o documento deve ser recolhido. E o mecanismo de formação da base de pesquisa usual de imagens não é adequado aqui.
O principal desafio é que diferentes componentes de um documento são gerados em diferentes momentos e em diferentes lugares. O mesmo Logbroker pode baixar informações sobre páginas e textos, mas não simultaneamente com imagens. Os dados de comportamento do usuário em tempo real chegam por meio do sistema de processamento de log RTMR . E tudo isso é armazenado independentemente das fotos. Para coletar um documento, você precisa ignorar de forma consistente diferentes fontes de dados.
Usamos MapReduce para formar a base de pesquisa principal de imagens. É uma maneira eficiente e confiável de trabalhar com grandes quantidades de dados. Mas para a tarefa de frescor, não é adequado: precisamos receber muito rapidamente do armazenamento todos os dados necessários para a formação de cada documento, o que não corresponde ao MapReduce. Portanto, no ciclo de atualização, usamos um método diferente: informações heterogêneas chegam ao sistema de processamento de dados de streaming RTRobot, que usa armazenamento KV para sincronizar diferentes fluxos de processamento de dados e tolerância a falhas.
No ciclo de atualização, usamos tabelas dinâmicas baseadas em nosso sistema YT como armazenamento KV... Na verdade, este é um repositório de todo o conteúdo de que podemos precisar. Com acessos muito rápidos. A partir daí solicitamos prontamente tudo o que pode ser útil para a busca de fotos, coleta de documentos e, através do LogBroker, transfere-os para servidores de busca, de onde os dados preparados são adicionados ao banco de dados de busca.
Graças a um circuito separado de trabalho com frescura, que abrange todas as etapas (da busca de imagens na web à preparação de documentos), conseguimos processar centenas de novas imagens por segundo e entregá-las para busca, em média, em poucos minutos a partir do seu aparecimento.
Mas trazer fotos para pesquisar não é suficiente. Você precisa ser capaz de mostrá-los nos resultados da pesquisa quando forem úteis. E aqui passamos para a próxima etapa - determinação da utilidade. Eu passo a palavra para o DmitryKrivokon...
4. Nós medimos a qualidade
Uma abordagem geral para otimizar a qualidade da pesquisa começa com a escolha de uma métrica. Na pesquisa de imagens Yandex, o tipo de métrica é aproximadamente o seguinte:
onde
n é o número das primeiras imagens (documentos) do problema que avaliamos;
p_i - peso da posição nos resultados da pesquisa (quanto maior a posição, maior o peso);
r_i - relevância (quão próximo a imagem corresponde ao pedido);
w_i… m_i - outros componentes da qualidade de resposta (frescor, beleza, tamanho ...);
f (...) é um modelo que agrega esses componentes.
Resumindo, quanto maior for a quantidade de imagens mais úteis nos resultados da pesquisa, maior será a quantidade nesta expressão.
Algumas palavras sobre o modelo f (...). Ela é treinada pela comparação de pares de imagens com polokers. Uma pessoa vê um pedido e duas fotos e, em seguida, escolhe a melhor. Se você repetir isso muitas e muitas vezes, o modelo aprenderá a prever qual componente de qualidade é mais importante para uma determinada solicitação.
Por exemplo, se uma solicitação de novas fotografias de um buraco negro, o componente de atualização tem o coeficiente mais alto. E se for uma ilha tropical, então beleza, porque poucas pessoas estão procurando por fotos amadoras de ilhas feias, elas geralmente precisam de fotos atraentes. Quanto melhor for a aparência visual da entrega de imagens em tais casos, maior será a probabilidade de uma pessoa continuar a usar o serviço. Mas não vamos nos distrair com isso.
Portanto, a tarefa dos algoritmos de classificação é otimizar essa métrica. Mas não dá para estimar todos os milhões de pedidos diários: é uma carga enorme, e antes de tudo, para usuários. Portanto, para controle de qualidade, alocamos uma amostra aleatória (cesta) por um período fixo de tempo.
Parece que há uma métrica em que o componente de frescor já é levado em consideração, e há uma seleção de solicitações de controle de qualidade. Você pode fechar o tópico sobre isso e ir para o ranking. Mas não.
No caso de fotos recentes, surge um problema. Ao avaliar algoritmos, devemos ser capazes de entender que respondemos bem à solicitação de um usuário no momento em que a solicitação é inserida na pesquisa. O novo pedido do ano passado pode não ser agora. E outra coisa seria uma boa resposta. Portanto, uma cesta fixa de solicitações (por exemplo, por ano) não é adequada.
Como uma primeira abordagem para resolver esse problema, tentamos dispensar a cesta. Seguindo uma certa lógica, começamos a misturar imagens novas na saída e depois estudamos o comportamento do usuário. Se mudou para melhor (por exemplo, as pessoas clicaram mais ativamente nos resultados), então a mixagem foi útil. Mas essa abordagem tem uma falha: a avaliação da qualidade dependia diretamente da qualidade de nossos algoritmos. Por exemplo, se para alguma solicitação nosso algoritmo não atender e não misturar conteúdo, então não haverá nada para comparar, o que significa que não entenderemos se conteúdo novo era necessário ali. Assim, chegamos ao entendimento de que é necessário um sistema de avaliação independente que mostre a qualidade atual de nossos algoritmos e não dependa deles.
Nossa segunda abordagem foi a seguinte. Sim, não podemos usar um carrinho fixo devido à variabilidade de novos pedidos. Mas podemos deixar para a base aquela parte do cesto para a qual não há requisitos de frescura, e aí adicionar a parte fresca diariamente. Para fazer isso, criamos um algoritmo que seleciona aqueles no fluxo de solicitações do usuário que provavelmente requerem uma resposta com imagens novas. Essas consultas geralmente têm detalhes inesperados. Obviamente, usamos a validação manual para filtrar ruídos e detritos e acomodar situações especiais. Por exemplo, uma consulta pode ser relevante apenas para um país específico. Nesse caso, não somos mais auxiliados por compradores, mas por avaliadores: esse trabalho exige experiência e conhecimentos especiais.
Solicitar [foto do buraco negro]
Ao fazer isso, não apenas adicionamos essas novas solicitações ao carrinho para avaliação de qualidade, mas também salvamos os resultados de nossa pesquisa no momento em que as solicitações são encontradas. Dessa forma, podemos avaliar não apenas a qualidade primária da resposta, mas também a rapidez com que nossa pesquisa reagiu ao evento.
Então, vamos resumir os resultados preliminares. Para responder bem às novas perguntas, não apenas garantimos a entrega rápida para pesquisa e processamento de imagens, mas também reinventamos a forma como medimos a qualidade. Resta descobrir a qualidade que estamos medindo.
5. Classificação
Deixe-me lembrá-lo de que descrevemos acima a transição da primeira abordagem para avaliar a qualidade da pesquisa de imagens para a segunda: da mistura dos resultados à reposição diária da cesta de aceitação com novas solicitações. O paradigma mudou - os próprios algoritmos precisavam de mudanças. É bastante difícil explicar aos leitores de fora, mas vou tentar. Se você tiver alguma dúvida, fique à vontade para colocá-la nos comentários.
Anteriormente, os métodos eram implementados por analogia com a solução que eu estava falandonosso colega Alexey Shagraev. Existe uma fonte principal de documentos (índice de pesquisa principal). E também há uma fonte adicional de documentos novos, para os quais a velocidade de entrada na pesquisa é crítica. Documentos de fontes diferentes não podiam ser classificados de acordo com uma única lógica, então usamos um esquema bastante não trivial para misturar documentos de uma fonte nova no problema principal. Em seguida, comparamos as métricas dos principais resultados da pesquisa sem e com documentos adicionais.
Agora a situação é diferente. Sim, as fontes ainda são fisicamente diferentes, mas em termos de métricas, não importa de onde veio a nova imagem. Ele também pode ser obtido da fonte principal se um robô comum conseguir chegar até ele. Nesse caso, as métricas serão idênticas à situação quando a mesma imagem chegou ao problema por meio de uma fonte separada. A nova abordagem tem uma atualização significativa da consulta e do resultado, e a arquitetura de origem não é mais tão importante. Como resultado, tanto os documentos principais quanto os recentes são classificados usando o mesmo modelo, o que nos permite misturar novas imagens na saída usando uma lógica muito mais simples do que antes: simplesmente classificando por valor na saída de um único modelo. Claro, isso também afetou a qualidade.
Ir em frente. Para classificar algo, você precisa de um conjunto de dados no qual o modelo será treinado. Para novas imagens - um conjunto de dados com exemplos de novos conteúdos. Já temos um conjunto de dados básico, precisamos aprender como adicionar exemplos de atualização a ele. E aqui somos lembrados da cesta de recebimento, que já usamos para controle de qualidade. As novas solicitações variam todos os dias, o que significa que no dia seguinte podemos pegar as novas solicitações de ontem e adicioná-las ao conjunto de dados para treinamento. Ao mesmo tempo, não corremos o risco de um retreinamento, uma vez que os mesmos dados não são usados simultaneamente para treinamento e controle.
Devido à transição para um novo esquema, a qualidade dos resultados da pesquisa por imagens novas aumentou significativamente. Se o treinamento anterior se baseava principalmente nas estatísticas do usuário sobre novas solicitações e, por isso, tivemos feedback com o algoritmo de classificação atual, agora a base do treinamento são cestas de solicitações coletadas objetivamente, que dependem exclusivamente do fluxo de solicitações do usuário. Isso nos permitiu aprender como mostrar resultados novos, mesmo quando não havia nenhum antes. Além disso, devido à fusão dos pipelines de classificação dos contornos principais e novos, o último começou a se desenvolver visivelmente mais rápido (todas as melhorias em uma fonte agora alcançam automaticamente a segunda).
É impossível contar em detalhes em um post sobre todo o trabalho que a equipe de busca de imagens Yandex fez. Esperamos ter conseguido explicar quais são as características de encontrar fotos novas. E por que são necessárias mudanças em todos os estágios da pesquisa para que os usuários possam encontrar rapidamente fotos novas de Plutão ou qualquer outra informação relevante.