No semestre passado, os alunos do Centro de Ciência da Computação Sergey Gorbatyuk e Peter Karol trabalharam na desduplicação de anúncios no Yandex.Real Estate, sob a liderança de Vladimir Gorovoy, gerente de projetos. Os caras nos disseram como o projeto funciona e quais resultados eles alcançaram.

Tarefa de design
Yandex.Real Estate é um serviço de anúncios para a venda e aluguel de apartamentos, quartos, casas, terrenos. Os anúncios são colocados por indivíduos, incorporadoras ou agências imobiliárias; portanto, a mesma propriedade é frequentemente representada por várias ofertas. Na maioria das vezes, várias agências tentam vender um apartamento de uma só vez e, às vezes, também o proprietário.
Duplicatas de anúncios visualizados, na melhor das hipóteses, incomodam os usuários, na pior das hipóteses, são enganosas. Isso também impede que a equipe do Yandex colete análises por apartamento e conte exatamente quanto é para venda ou aluguel. Portanto, quero aprender a pesquisar e colar duplicados em uma oferta.
Um fluxo de anúncios não pode ser moderado manualmente porque é enorme. Portanto, precisamos de um algoritmo capaz de encontrar o maior número possível de duplicatas com alta precisão. A precisão é importante porque o preço do erro é alto: vincular anúncios diferentes fará com que os usuários se queixem.
Tarefas com requisitos tão altos e uma estrutura de dados complexa são tradicionalmente resolvidas usando algoritmos de aprendizado de máquina; portanto, na realidade, a tarefa foi formulada como "Treinamento de um dos classificadores de ponta".
Os problemas
- A área de assunto é nova para nós, possui suas próprias dificuldades e características.
- Não há dados marcados.
- Não há tarefa explícita de aprendizado de máquina - quais serão os fatores e as variáveis-alvo aqui?
Com o último parágrafo, tudo é relativamente simples: os fatores serão informações sobre um par de objetos de anúncios diferentes, e a variável de destino é se um objeto é na realidade ou dois diferentes. Mas descobrir as características do mercado imobiliário e marcar os dados levou a maior parte do tempo do projeto.
Marcação de dados
Recebemos parte do banco de dados com ofertas para a venda de apartamentos em Moscou. Os principais dados que os descrevem são:
- Dados estruturados gerais - filmagem, preço, piso, número de quartos, banheiros, altura do teto, meta-informações sobre o vendedor e outros.
- Descrição de texto do objeto.
- Fotos do objeto.
Antes do Yandex, tínhamos um classificador duplicado treinado em fatores de 1 ponto sem dados de controle. Esse é um algoritmo de cluster de ofertas chamado ofertas duplicadas que se enquadram em um cluster. Tinha uma precisão bastante alta, mas uma completude relativamente baixa. Isso significa que a proporção de duplicatas que ele descobriu era baixa, embora ele raramente se enganasse.
Usamos a ideia de comparar ofertas entre si com base nas diferenças e nas relações entre os principais indicadores: por exemplo, preço ou piso, para obter uma métrica empírica de dissimilaridade de anúncios. E eles criaram uma função que correlacionava os dois números com um único número - uma medida da diferença entre os dois anúncios nos dados primários. Esse indicador nos ajudou a criar uma amostra equilibrada enquanto marcava os dados e pelo menos aproximadamente a regular a distribuição de exemplos: queremos exemplos mais idênticos, ou muito diferentes ou complexos em algum lugar no meio.
A marcação acabou sendo muito mais complicada do que esperávamos. E aqui está o porquê:
- Descrições idênticas e não informativas de objetos semelhantes. Especialmente do novo fundo: as empresas de construção as transportam em lotes, e apenas em casos raros elas podem ser distinguidas pelo número do lote.
- Corrupção intencional de dados. Os especialistas imobiliários nos explicaram que às vezes as pessoas querem esconder o piso ou a aparência real do apartamento.
- Fotografias não exteriores informativas ou similares de objetos.
- Fotos diferentes do mesmo objeto. Abaixo está um dos exemplos simples, no entanto, algumas fotos precisam ser vistas por um longo tempo como um detetive, usando todo o poder do método dedutivo com o único objetivo de decidir se é um apartamento ou dois diferentes.


Linha de base supervisionada
Marcamos os dados e tentamos treinar a Floresta Aleatória apenas nos fatores do primeiro parágrafo - indicadores categóricos e contínuos de preço, filmagem etc. Diferenças e relações desses fatores, bem como fatores adicionais construídos com base no tempo de colocação e atualização, informações sobre o vendedor etc., foram utilizados como preditores. Nos dados de teste, esse classificador foi mais preciso do que o algoritmo conservador de agrupamento em 5 a 8%, e sua completude excedeu o resultado anterior em 30 a 35%.
Encorajados por esse resultado, passamos a dois outros fatores - a descrição do texto e as figuras. Quase não conseguimos trabalhar com o último: os descarregamos bastante tarde. Eles tentaram usar hashes para filtrar fotografias externas comuns, hashes perceptivos para lidar com marcas d'água e saídas de altas camadas de redes convolucionais (ResNet-18) como fatores adicionais, no entanto, para nossa surpresa, eles não obtiveram um forte aumento de precisão.
Em nossa opinião, é necessário abordar ainda mais a análise de imagens nessa área, prestar muita atenção ao pré-processamento de imagens, tentar outras arquiteturas e funções especiais de perda. Para dados de texto lematizados e vetorizados, foi aplicado o algoritmo de vetorização Tf-Idf e a representação vetorizada foi utilizada como características principais. Métricas diferentes sobre esses vetores deram um aumento mais impressionante na qualidade das previsões. O melhor resultado como fator foi a probabilidade prevista pela regressão logística treinada separadamente sobre esses vetores.
Modelo final
O modelo final, que agregou todos os sinais e resultados de outros, foi o CatBoost. Este é um produto Yandex treinado com uma função de perda especial - uma medida F modificada. A tecnologia CatBoost se estabeleceu como uma das melhores na tarefa de classificação e é facilmente integrada à infraestrutura. A qualidade do algoritmo na amostra de teste é de 98% de precisão e 93% de completude.
Consideramos esse um bom resultado, e se é o mesmo do ponto de vista comercial - os especialistas do departamento de marketing decidirão :)