Pesquise texto, pesquise local, pesquise imagens, brinque com Alibaba Cloud Elasticsearch em 1 hora

Autores: Zhu Jie, Xi Yue, Huang Yu

A integração da IA ​​e da pesquisa tornou-se a tendência de desenvolvimento da próxima geração de motores de pesquisa.Sob a onda de inovação tecnológica, você quer aproveitar novas oportunidades no campo de pesquisa e aumentar o poder dos produtos de IA e a competitividade técnica?

Você que deseja aprender a tecnologia de mecanismos de pesquisa enfrenta essa confusão:

  • Iniciantes na prática da construção, falta de orientação e confusão, presos no início
  • Não sei o suficiente sobre pesquisa básica, como construir um aplicativo de pesquisa de nível superior
  • É difícil aprender mecanismos de pesquisa sozinho e não há oportunidade de praticá-los no trabalho
  • Recuperação vetorial, busca multimodal, busca híbrida, só ouvi falar mas nunca usei, não sei por onde começar

Participe do campo de treinamento do Elasticsearch, desde pesquisa de texto completo até pesquisa vetorial, crie cenários de negócios de alta frequência e aplicativos avançados de pesquisa vetorial. Leve você para expandir seus horizontes técnicos e promover a prática de pesquisa do Elasticsearch.

Aprenda imediatamente a  pesquisar texto, pesquisar localização, pesquisar imagens e jogar Elasticsearch-Alibaba Cloud Developer Community-Alibaba Cloud

Conheça benefícios exclusivos

  • Ambiente de aprendizagem básico: novos usuários podem experimentar a versão Elasticsearch do serviço de pesquisa e análise do Alibaba Cloud por um mês gratuitamente
  • Faça login e obtenha periféricos: conclua as tarefas de perfuração designadas para obter periféricos da comunidade Elastic
  • Graduação para ganhar presentes: Conclua as tarefas de aprendizagem de participação no acampamento e ganhe presentes personalizados da comunidade de desenvolvedores do Alibaba Cloud

Combate de cena passo a passo

  • Pesquisa básica do Elasticsearch

       Incluindo [pesquisa de texto completo] para aplicativos de alta frequência em cenários de negócios e pode expandir o aprendizado [pesquisa multilíngue] e [consulta de localização geográfica] ao mesmo tempo

  • Pesquisa de imagens baseada em texto com base na recuperação de vetores do Elasticsearch

      Realize a recuperação de comparação de similaridade intermodal de imagens e textos e construa um protótipo de serviço de pesquisa baseado na recuperação de vetores para pesquisar imagens por texto

【Pesquisa por Texto】Visualização do Curso Experimental

1. O princípio de realização da pesquisa de imagens por texto

Diferente da pesquisa tradicional por palavra-chave de texto, a pesquisa semântica de texto moderna, a pesquisa de imagens semelhantes e a pesquisa intermodal de imagens de pesquisa de texto são geralmente implementadas pela pesquisa por similaridade vetorial. O princípio básico é mapear texto e imagens para um espaço vetorial de alta latitude por meio de um modelo de aprendizado profundo e, em seguida, encontrar o texto ou imagem mais relevante medindo a similaridade dos vetores.

A seguir está uma explicação detalhada dos conceitos básicos e detalhes técnicos de cada componente necessário para os aplicativos de pesquisa de imagem de texto e imagem de pesquisa de imagem em cinco aspectos:

  • Modelo de incorporação: um modelo de aprendizado de máquina que converte os dados a serem pesquisados ​​em um vetor
  • API de raciocínio: API para invocar modelos no Elastic para raciocínio
  • Gerar incorporação de imagem: chame o modelo de incorporação para converter a imagem em um vetor
  • Pesquisa de vetor: pesquisa de similaridade por meio de pesquisa de vizinho mais próximo de vetor
  • Lógica do aplicativo: o programa front-end se comunica com o mecanismo de busca vetorial de back-end Elasticsearch

modelo incorporado

Para aplicar a pesquisa de similaridade a dados de linguagem natural ou imagem, você precisa usar modelos de aprendizado de máquina para converter os dados em representações numéricas, também conhecidas como incorporações vetoriais (incorporação). Neste exemplo:

  • Os modelos de “transformadores” da PNL convertem a linguagem natural em vetores.
  • O modelo OpenAI CLIP (Contrastive Language-Image Pre-Training) vetoriza imagens.

Os modelos NLPTransformer são modelos de aprendizado de máquina treinados para processar dados de linguagem natural, como tradução de idiomas, classificação de texto ou reconhecimento de entidade nomeada. Eles são treinados em grandes conjuntos de dados de texto anotado para aprender os padrões e estruturas da linguagem humana.

Os aplicativos de similaridade de imagens encontram imagens correspondentes com base em descrições textuais em linguagem natural. Para implementar esse tipo de pesquisa por similaridade, você precisa de um modelo treinado em texto e imagens e que possa traduzir consultas de texto em vetores.

CLIP é um modelo de linguagem em larga escala desenvolvido pela OpenAI que pode processar texto e imagens. Dado um pequeno pedaço de texto como entrada, o modelo é treinado para prever a representação textual de uma imagem. Isto envolve
um processo de aprendizagem que associa as representações visuais e textuais das imagens antes que previsões precisas possam ser feitas.

Outro aspecto importante do CLIP é que ele é um modelo “zero-shot”, permitindo-lhe realizar tarefas para as quais não foi especificamente treinado. Por exemplo, ele pode traduzir idiomas que nunca viu durante o treinamento ou classificar imagens em categorias que nunca viu antes. Isto torna o CLIP um modelo muito flexível e geral.

API de raciocínio

Depois que o modelo NLP for carregado no Elasticsearch, você poderá processar as consultas reais do usuário. Primeiro, você precisa converter o texto da consulta em um vetor usando a API Elasticsearch_infer. A API fornece uma maneira integrada de usar modelos de PNL nativamente no Elastic sem a necessidade de consultar serviços externos, o que simplifica significativamente a implementação.

POST _ml/trained_models/sentence-transformers__clip-vit-b-32-multilingual-v1/deployment/_infer
{
  "docs": [
    {
      "text_field": "A mountain covered in snow"
    }
  ]
}

Gerar incorporações de imagens

Os embeddings de imagens mencionados acima são cruciais para a eficácia da pesquisa por similaridade de imagens. Eles devem ser armazenados em um índice separado contendo o vetor da imagem, chamado your-image-index no código acima.
O índice consiste em um documento para cada imagem junto com um campo de contexto e um vetor denso de imagens. Um vetor de imagem representa uma imagem em um espaço de baixa dimensão. Imagens semelhantes são mapeadas para pontos próximos neste espaço. A imagem original pode ter vários MB, dependendo da resolução.

Os detalhes exatos de como esses vetores são gerados podem variar. Em geral, o processo envolve extrair características de imagens e depois usar funções matemáticas para mapeá-las em um espaço de baixa dimensão. A função normalmente é treinada em grandes conjuntos de dados gráficos para aprender a melhor maneira de representar recursos em um espaço de baixa dimensão. A geração de vetores é uma tarefa única.

Neste projeto utilizaremos o modelo CLIP. Dependendo de quão bem o tipo de imagens que você deseja classificar está representado nos dados disponíveis publicamente usados ​​para treinar o modelo CLIP, pode ser necessário treinar um modelo de incorporação personalizado para um caso de uso especializado para obter o desempenho desejado.

A geração de incorporação no Elastic precisa acontecer quando os dados são gravados, as etapas são as seguintes:

  • Carregue o modelo CLIP.
  • Para cada imagem:
  • Carregue a imagem.
  • Avalie a imagem usando o modelo.
  • Salve o vetor resultante em um documento.
  • Salve o documento no Elasticsearch.

O documento processado tem esta aparência. A parte principal é o campo image_embedding que armazena a representação vetorial densa:

{
    "_index":"my-image-embeddings",
    "_id":"_g9ACIUBMEjlQge4tztV",
    "_score":6.703597,
    "_source":{
        "image_id":"IMG_4032",
        "image_name":"IMG_4032.jpeg",
        "image_embedding":[
            -0.3415695130825043,
            0.1906963288784027,
            .....
            -0.10289803147315979,
            -0.15871885418891907
         ],
        "relative_path":"phone/IMG_4032.jpeg"
    }
}

Pesquisa de similaridade vetorial

Depois que a consulta e os documentos são vetorizados usando um modelo de incorporação, documentos semelhantes são os vizinhos mais próximos da consulta no espaço vetorial.
Um algoritmo popular para atingir esse objetivo é o k-Nearest Neighbours (kNN), que encontra os k vetores mais próximos de um vetor de consulta . No entanto, para grandes conjuntos de dados com os quais você normalmente lida em aplicativos de pesquisa de imagens, o kNN é computacionalmente caro e pode levar a tempos de execução excessivamente longos. Como solução, a busca aproximada do vizinho mais próximo (ANN) sacrifica a precisão perfeita para uma execução eficiente em espaços vetoriais de grande escala e alta dimensão.

No Elastic, a API _search oferece suporte a pesquisas exatas e aproximadas do vizinho mais próximo. Use o código abaixo para pesquisa kNN. Ele assume que os vetores de todas as imagens em seu índice de imagens estão no campo image_embedding.

# Run kNN search against<query-embedding> obtained above
POST <your-image-index>/_search
{
    "fields":[...],
    "knn":{
        "field":"image_embedding",
        "k":5,
        "num_candidates":10,
        "query_vector":<query-embedding>
    }
}

lógica de aplicação

Com base nesses componentes básicos, você pode finalmente juntar todas as peças para implementar a pesquisa interativa por similaridade de imagens.
Vamos começar conceitualmente e entender o que precisa acontecer quando você deseja recuperar imagens correspondentes de forma interativa .

Para consultas de texto, a entrada pode ser tão simples quanto uma única palavra como “rosas” ou uma descrição mais ampla como “uma montanha coberta de neve”. Ou você pode fornecer uma foto e pedir fotos semelhantes às suas.

Embora você use esquemas diferentes para consultar, ambos são executados usando as mesmas etapas na pesquisa vetorial subjacente, ou seja, usando consultas kNN em documentos representados por vetores densos. Descrevemos nas seções anteriores os mecanismos que permitem ao Elasticsearch realizar pesquisas vetoriais muito rápidas e escaláveis ​​em grandes conjuntos de dados de imagens.

Então, como implementar a lógica acima? No fluxo abaixo, você pode ver como as informações fluem: As consultas emitidas pelos usuários, como texto ou imagens, são vetorizadas por modelos incorporados - dependendo do tipo de entrada: Os modelos NLP são usados ​​para descrições textuais, enquanto os modelos CLIP são usados ​​para
imagens . Ambos convertem a entrada em sua representação vetorial e armazenam o resultado como um tipo de vetor denso ([número, número,
número...]) no Elasticsearch.


A representação vetorial é então usada em uma pesquisa kNN para encontrar vetores (imagens) semelhantes, que são retornados como resultados.

Inferência: vetorização de consulta do usuário

A aplicação em segundo plano envia solicitações para a API de inferência no Elasticsearch. Para entrada de texto, algo assim:

POST _ml/trained_models/sentence-transformers__clip-vit-b-32-multilingual-v1/deployment/_infer
{
  "docs": [
    {
      "text_field": "Amountaincoveredinsnow"
    }
  ]
}

Para imagens, você pode usar o seguinte código simplificado para processar uma única imagem usando o modelo CLIP

model = SentenceTransformer('clip-ViT-B-32')
image = Image.open(file_path)
embedding = model.encode(image)

Você obterá uma longa matriz de 512 valores Float32 como este:

{
    "predicted_value": [
        -0.26385045051574707,
        0.14752596616744995,
        0.4033305048942566,
        0.22902603447437286,
        -0.15598160028457642,
        ...
    ]
}

Pesquisa: Encontre imagens semelhantes

A pesquisa funciona da mesma forma para ambos os tipos de entrada. Envie a consulta com a definição de pesquisa kNN para o índice com o vetor de imagem my-image-embeddings. Coloque o vetor denso da consulta anterior ("query_vector": [...]) e realize a busca

GET my-image-embeddings/_search
{
    "knn":{
        "field":"image_embedding",
        "k":5,
        "num_candidates":10,
        "query_vector":[
            -0.19898493587970734,
            0.1074572503566742,
            -0.05087625980377197,
            ...
            0.08200495690107346,
            -0.07852292060852051
         ]
    },
    "fields":["image_id","image_name","relative_path"],
    "_source":false
}

A resposta do Elasticsearch fornecerá a melhor imagem correspondente armazenada no Elasticsearch com base em nossa consulta de pesquisa kNN.

O fluxo abaixo resume as etapas pelas quais um aplicativo interativo passa ao processar uma consulta do usuário:

  1. Carregue o aplicativo interativo, seu front end.
  2. Os usuários selecionam as imagens nas quais estão interessados.
  3. Seu aplicativo vetoriza a imagem aplicando o modelo CLIP e armazena o vetor resultante como um tipo de vetor denso.
  4. A aplicação inicia uma consulta kNN no Elasticsearch, que pega um vetor e retorna seus vizinhos mais próximos.
  5. Seu aplicativo processa a resposta e renderiza uma (ou mais) imagens correspondentes.

2. Detalhes da experiência do curso

Neste experimento, o Alibaba Cloud Elasticsearch é usado como um mecanismo de consulta vetorial que suporta pesquisa vetorial do vizinho mais próximo, combinado com a implantação de um modelo de código aberto em uma instância do Elasticsearch, os recursos semânticos do texto da consulta são vetorizados e o texto e as imagens são mapeados para o mesmo espaço vetorial para realizar a imagem e o texto. A recuperação de comparação de similaridade intermodal baseada no protótipo de serviço de pesquisa baseado em recuperação vetorial foi construída e a demonstração do aplicativo da web front-end foi realizada usando o aplicativo Alibaba Cloud Serverless motor SAE.

Observação: este experimento foi criado em conjunto pela Alibaba Cloud e pela Elastic. O código original do experimento vem do projeto flask-elastic-nlp. Clique para visualizar o endereço do projeto no Github .

2.1 Receba recursos de produtos experimentais

Os recursos experimentais e a configuração utilizados neste cenário experimental são descritos a seguir:

  • Descrição da especificação de recursos: Este exemplo segue o princípio mínimo e utiliza os recursos mínimos que atendem aos requisitos da cena.
  • Descrição da avaliação gratuita: os clientes iniciantes podem experimentar o mecanismo de aplicativo sem servidor SAE gratuitamente, e o CLB de balanceamento de carga tradicional pode usar recursos de avaliação gratuita.
  • Instruções de pagamento: este experimento recomenda o uso de recursos pré-pagos do Alibaba Cloud Elasticsearch 4C8G.
  • O padrão de faturamento começa em 3,7 yuan/hora (o preço varia ligeiramente em diferentes regiões); se o usuário não tiver qualificação para receber a avaliação gratuita do SAE, é recomendado usar recursos pré-pagos com o SAE2C4G especificação, e o padrão de faturamento é 0,0074074 yuan/min para uma única instância.

Para descrições específicas de itens de configuração e etapas de coleta de recursos, consulte  Pesquisar texto, pesquisar locais, pesquisar imagens, brincar com Elasticsearch-Alibaba Cloud Developer Community-Alibaba Cloud

2.2 Etapas experimentais

2.2.1 Criar e configurar a seção Elasticsearch

1. Entre no console, encontre a região onde o Elasticsearch está localizado e encontre a instância que precisa usar ES para o experimento na página da lista de instâncias:

2. Clique no ID da instância ou em “Gerenciamento” para entrar na página de detalhes da instância, onde você pode visualizar informações como VPC, endereço de rede privada e porta de rede privada onde a instância ES está localizada;

 3. Insira a configuração de segurança e confirme se a lista de permissões de acesso à rede privada VPC inclui todos os segmentos de rede da VPC onde a instância ES está localizada:

O segmento VPC pode ser visualizado na página da lista de VPC: Alibaba Cloud Login - Bem-vindo ao Alibaba Cloud, uma plataforma de serviços de computação em nuvem segura e estável

4. Entre no controle visual e modifique a lista de permissões de acesso à rede pública do Kibana para o IP local na página de modificação de configuração:

5. Clique na entrada da rede pública para entrar no Kibana e faça login após inserir o nome de usuário e a senha corretos. O nome de usuário padrão é: elastic; a senha é a senha personalizada inserida quando a instância foi criada.

6. Vá em "Gerenciamento" na barra de menu esquerda e digite " Ferramentas de Desenvolvimento "

7. Importe o conjunto de dados e o modelo para a instância experimental ES por meio de recuperação de instantâneo:

1) Crie um repositório de snapshots e especifique o bucket Alibaba Cloud OSS de leitura pública como o repositório de origem

 código :

PUT _snapshot/my_backup/
{
  "type": "oss",
  "settings": {
    "endpoint": "http://oss-rg-china-mainland.aliyuncs.com",
    "bucket": "es-image-search",
    "base_path": "snapshot/",
    "readonly": true,
    "access_key_id": "xxxx",
    "secret_access_key":"xxxx",
    "region": "oss-rg-china-mainland"
  }
}

Nota: Para obter informações específicas dos campos "access_key_id" e "secret_access_key", insira o grupo de pin de aprendizagem do curso (número do grupo: 28810034388) e obtenha-o no anúncio do grupo.

2) Restaure o instantâneo do OSS de leitura pública para a instância experimental atual:

código :

POST /_snapshot/my_backup/snapshot_1/_restore
{
  "indices": "image-embeddings",
  "feature_states": [
    "machine_learning"
  ],
  "ignore_unavailable": true,
  "include_global_state": false
}

3) Confirme se os dados foram sincronizados:

Na barra de menu esquerda "Gerenciamento", entre no módulo "Gerenciamento de índice" de "Gerenciamento de pilha" e confirme se os tamanhos de "embeddings de imagem" e ".ml-inference-native-000001" são consistentes com a figura a seguir :

8. Em "Analytics" na barra de menu esquerda, insira "Modelo de sincronização" em "Aprendizado de máquina", insira "Modelo treinado em gerenciamento de modelo" e implante

 Dicas: Se a rede a seguir retornar um erro de tempo limite, ele poderá ser ignorado, feche a janela de erro e atualize, e o status do modelo poderá ser atualizado para "iniciado" normalmente.

9. Teste o modelo, insira frases ou frases curtas, o modelo pode converter dados de texto em dados vetoriais:

O modelo suporta conversão de texto entre chinês e inglês.Depois de convertê-lo com sucesso em um vetor, significa que a implantação do modelo foi bem-sucedida.

2.2.2 Criar e configurar a seção SAE

Esta etapa apresenta apenas os principais itens de configuração e o restante dos itens de configuração pode ser deixado como padrão.

1. Faça login no console SAE .

2. (Opcional) Na barra de navegação esquerda, clique em Namespace (Ambiente) , selecione a região Norte da China 2 (Pequim) na barra de menu superior e clique em Criar Namespace na página Namespace . No painel Criar Namespace , Configure relacionado informações e clique em OK .

item de configuração Configuração do tutorial
nome do espaço para nome Personalizado, como entrar na demonstração.
ID do namespace Personalizado, como entrar na demonstração.
descrever Personalização, como testes de entrada.

Observação: se você pular esta etapa e selecionar o namespace padrão ao criar o aplicativo (etapa 4), depois que o aplicativo for criado com êxito, será necessário alternar a VPC e alterá-la para uma VPC consistente com a configuração da instância do Elasticsearch.

3. Na barra de navegação esquerda, selecione Gerenciamento de aplicativos > Lista de aplicativos e clique em Criar aplicativo na página Lista de aplicativos .

4. Na página Criar Aplicativo, configure as informações relacionadas.
        a. No assistente de configuração de informações básicas do aplicativo, configure as informações relevantes e clique em Avançar: Aplicar configuração de implantação.

item de configuração Configuração do tutorial
Nome da Aplicação Personalizado, como entrar na demonstração.
Configuração de VPC Escolha Configuração Personalizada .
Espaços para nome
  • Padrão: nenhuma criação manual é necessária. Quando uma aplicação é criada no namespace padrão pela primeira vez, o sistema irá gerar automaticamente uma VPC (inconsistente com a VPC configurada na instância do Elasticsearch). Portanto, se você escolher o método padrão, será necessário alternar o VPC na página de detalhes do namespace posteriormente .
  • (Recomendado) Personalizado: precisa ser criado manualmente. Selecione o namespace criado e selecione a VPC que seja consistente com a configuração da instância do Elasticsearch.
Para obter mais informações, consulte Gerenciando Namespaces .
vSwitch Selecione um switch virtual que corresponda à configuração da instância do Elasticsearch.
grupo de segurança Selecione o grupo de segurança vinculado à VPC que seja consistente com a configuração da instância do Elasticsearch. Para obter mais informações, consulte Criando grupos de segurança .
Número de instâncias de aplicativos 1
VCPU 2núcleo
Memória 4GiB

2. No assistente de configuração de implantação de aplicativo, configure as informações relevantes e clique em Próximo : Confirmar especificações .

item de configuração Configuração do tutorial
linguagem de pilha de tecnologia Escolha Python.
Método de implantação de aplicativo Escolha Espelho.
Configurar espelhamento Na área Configurar imagem, clique na guia Imagem de demonstração e selecione a imagem de demonstração fornecida pela SAE com a versão nlp. O endereço completo do espelho é o seguinte: Registry-vpc.cn-beijing.aliyuncs.com/sae-serverless-demo/python-demo:nlp
Configurações de variáveis ​​de ambiente

Expanda a área de configuração da variável de ambiente, selecione o tipo como personalizado e adicione 3 pares de pares de valores-chave no seguinte formato:

  • ES_HOST:<testHost>
  • ES_USER:<testUser>
  • ES_PWD:<testeSenha>

As notas são as seguintes:

  • ES_HOST Você pode obter o endereço de rede privada da instância ES na página de informações básicas da instância do console Alibaba Cloud Elasticsearch
  • Observe que o formato é: http://es-cn-vxxxxx.elasticsearch.aliyuncs.com:9200
  • ES_USER e ES_PWD são o nome da conta e senha preenchidos ao abrir o Elasticsearch

4. A página irá para o assistente de criação e configuração e você poderá clicar na página de detalhes do aplicativo para entrar na página de informações básicas.

2.2.3 Vincular balanceamento de carga CLB para aplicação SAE

SAE suporta SLB vinculado, que é um CLB de balanceamento de carga tradicional (Classic Load Balancer), que pertence a um dos tipos de balanceamento de carga suportados pelo Alibaba Cloud Load Balancing SLB (Server Load Balancer)

1) Na área de configurações de acesso ao aplicativo da página de informações básicas do aplicativo, clique em Adicionar acesso SLB de rede pública.

2. Na caixa de diálogo Adicionar SLB de acesso à rede pública , na lista suspensa Selecione o SLB , selecione reutilizar o recurso CLB de avaliação gratuita criado (prioridade) ou crie um novo recurso SLB (se você não tiver as qualificações para CLB, você precisa pagar a mais) e clique na guia Protocolo HTTP , insira 80 para a porta HTTP e 5001 para a porta do contêiner e clique em OK .

Nota: Se você reutilizar o SLB criado, será necessário garantir que nem a porta HTTP nem a porta do contêiner estejam ocupadas. Para obter mais informações, consulte CLB pré-pago .

3. Após adicionar, n pode ver o endereço IP e a porta do SLB da rede pública na barra de endereços de acesso à rede pública .

4. Na barra de endereços do navegador, digite o endereço IP do SLB obtido na etapa anterior: port e pressione Enter para acessar a rede pública. Na interface a seguir, podemos inserir texto na caixa de pesquisa para pesquisar imagens ou clicar no botão " Pesquisar imagens semelhantes " na coluna de resultados de imagens para pesquisar imagens semelhantes. O conteúdo da caixa vermelha na figura abaixo mostra o princípio de implementação da busca por imagens semelhantes.

Artigo original: Pesquisando imagens por texto com base no Elasticsearch Vector Retrieval-Alibaba Cloud Developer Community

Acho que você gosta

Origin blog.csdn.net/UbuntuTouch/article/details/132289544
Recomendado
Clasificación