Imagine ter uma coleção de dados de centenas de milhares a milhões de imagens sem nenhum metadado descrevendo o conteúdo de cada imagem. Como podemos construir um sistema que seja capaz de encontrar um subconjunto dessas imagens que melhor responda à consulta de pesquisa de um usuário?
O que precisaremos basicamente é de um mecanismo de busca que seja capaz de classificar os resultados das imagens de acordo com o quão bem eles correspondem à consulta de pesquisa, que pode ser expressa em uma linguagem natural ou por outra imagem de consulta.
A forma como resolveremos o problema neste post é treinando um modelo neural profundo que aprende uma representação de comprimento fixo (ou incorporação) de qualquer imagem e texto de entrada e faz com que essas representações fiquem próximas no espaço euclidiano se os pares texto- imagem ou imagem-imagem são “semelhantes”.
Não consegui encontrar um conjunto de dados de classificação de resultados de pesquisa que fosse grande o suficiente, mas consegui este conjunto de dados: http://jmcauley.ucsd.edu/data/amazon/ que vincula imagens de itens de comércio eletrônico aos seus título e descrição. Usaremos esses metadados como fonte de supervisão para aprender representações significativas de texto-imagem unidas. Os experimentos limitaram-se a itens de moda (roupas, calçados e joias) e a 500 mil imagens para gerenciar os cálculos e custos de armazenamento.
O conjunto de dados que temos vincula cada imagem a uma descrição escrita em linguagem natural. Portanto, definimos uma tarefa na qual queremos aprender uma representação unida e de comprimento fixo para imagens e texto, de modo que cada representação de imagem esteja próxima da representação de sua descrição.
O modelo recebe 3 entradas: a imagem (que é a âncora), o título + descrição da imagem (o exemplo positivo) e a terceira entrada é algum texto amostrado aleatoriamente (o exemplo negativo).
Então definimos dois submodelos:
O submodelo de imagem produz a incorporação para a âncora **E_a ** e o submodelo de texto gera a incorporação para o título positivo + descrição E_p e a incorporação para o texto negativo E_n .
Em seguida, treinamos otimizando a seguinte perda tripla:
L = max( d(E_a, E_p)-d(E_a, E_n)+alfa, 0)
Onde d é a distância euclidiana e alfa é um hiperparâmetro igual a 0,4 neste experimento.
Basicamente o que esta perda permite fazer é tornar **d(E_a, E_p) pequeno e tornar d(E_a, E_n) **grande, de modo que cada incorporação de imagem fique próxima da incorporação de sua descrição e longe da incorporação de texto aleatório.
Depois de aprendermos o modelo de incorporação de imagem e o modelo de incorporação de texto, podemos visualizá-los projetando-os em duas dimensões usando tsne (https://scikit-learn.org/stable/modules/generated/sklearn.manifold.TSNE.html).
As imagens de teste e sua descrição de texto correspondente estão vinculadas por linhas verdes
Podemos perceber pelo gráfico que geralmente, no espaço de incorporação, as imagens e suas correspondentes descrições estão próximas. Qual é o que esperaríamos dada a perda de treinamento utilizada.
Aqui usamos alguns exemplos de consultas de texto para procurar as melhores correspondências em um conjunto de 70.000 imagens. Calculamos a incorporação de texto para a consulta e depois a incorporação de cada imagem na coleção. Finalmente selecionamos as 9 imagens principais que estão mais próximas da consulta no espaço de incorporação.
Esses exemplos mostram que os modelos de incorporação são capazes de aprender representações úteis de imagens e incorporações de simples composições de palavras.
Aqui usaremos uma imagem como consulta e depois buscaremos no banco de dados de 70.000 imagens os exemplos mais semelhantes a ela. A classificação é determinada pela proximidade de cada par de imagens no espaço de incorporação usando a distância euclidiana.
Os resultados ilustram que os embeddings gerados são representações de imagens de alto nível que capturam as características mais importantes dos objetos representados sem serem excessivamente influenciadas pela orientação, iluminação ou pequenos detalhes locais, sem serem explicitamente treinados para fazê-lo.
Neste projeto trabalhamos nos blocos de aprendizado de máquina que nos permitem construir um mecanismo de busca baseado em palavras-chave e imagens aplicado a uma coleção de imagens. A ideia básica é aprender uma função de incorporação significativa e unida para texto e imagem e, em seguida, usar a distância entre os itens no espaço de incorporação para classificar os resultados da pesquisa.
Referências: