Como criar pesquisa semântica para um determinado domínio

19

Há um problema que estamos tentando resolver, onde queremos fazer uma pesquisa semântica em nosso conjunto de dados, ou seja, temos dados específicos do domínio (exemplo: sentenças falando sobre automóveis)

Nossos dados são apenas um monte de frases e o que queremos é dar uma frase e recuperar as frases que são:

  1. Semelhante a essa frase
  2. Tem uma parte de uma frase semelhante à frase
  3. Uma frase que tem significados contextualmente semelhantes


Deixe-me tentar dar um exemplo: suponha que eu pesquise a frase "Experiência de compra", devo obter as frases como:

  • Eu nunca pensei que a compra de um carro levasse menos de 30 minutos para assinar e comprar.
  • Encontrei um carro que gostei e o processo de compra foi
    direto e fácil

  • Eu absolutamente odiava ir às compras de carro, mas hoje estou feliz por ter feito


Quero enfatizar o fato de que estamos buscando similaridade contextual e não apenas uma busca por palavras de força bruta.

Se a frase usa palavras diferentes, também deve ser capaz de encontrá-la.

Coisas que já tentamos:

  1. Pesquisa semântica aberta O problema que enfrentamos aqui está gerando ontologia a partir dos dados que temos ou, nesse sentido, pesquisando ontologia disponível em diferentes domínios de nosso interesse.

  2. Elastic Search (BM25 + Vectors (tf-idf)), tentamos isso em algumas frases, mas a precisão não era tão boa. A precisão também era ruim. Tentamos com um conjunto de dados com curadoria de seres humanos, que conseguiu obter apenas 10% das frases.

  3. Tentamos diferentes combinações, como a mencionada nos transformadores de frases, e também examinamos o exemplo e tentamos avaliar com base em nosso conjunto de curadoria humana e que também tinha precisão muito baixa.

  4. Tentamos o ELMO . Isso foi melhor, mas ainda menor precisão do que esperávamos, e existe uma carga cognitiva para decidir o valor do cosseno abaixo do qual não devemos considerar as sentenças. O mesmo se aplica ao ponto 3.

Qualquer ajuda será apreciada. Muito obrigado pela ajuda antecipadamente

Jickson
fonte
Pergunta bem escrita - você pode adicionar mais 5 exemplos de termos de pesquisa? São sempre frases de uma a três palavras ou os termos de pesquisa podem ser mais longos? Você está no caminho certo
Adnan S
Olá Adnan, o termo de pesquisa será sempre frases de uma a três palavras. Ex: experiência de compra, conforto de condução, sistema de informação e lazer, interiores, quilometragem, desempenho, conforto dos assentos, comportamento do pessoal.
Jickson 17/02
Este artigo pode ser interessante para o seu caso: elastic.co/blog/... (dica: word2vec alavancagem)
Val
@ Val Isso é realmente interessante que eu estava indo para mencionar o mesmo artigo que você mencionou e depois vi o seu comentário. Acho que esse método o aproximará do que você deseja.
nima 19/02
você pode querer analisar a semelhança de cosseno. Como explicado abaixo, envolve converter as seqüências de caracteres em vetores que podem ser representados no espaço 2D. O ângulo do cosseno desses 2 vetores é calculado. Este ângulo representa a "semelhança" entre as 2 strings. Aqui está um bom artigo sobre isso medium.com/swlh/playing-with-word-vectors-308ab2faa519
sagar1025

Respostas:

5

Eu sugiro que você assista à palestra de Trey Grainger sobre como criar um sistema de pesquisa semântica => https://www.youtube.com/watch?v=4fMZnunTRF8 . Ele fala sobre a anatomia de um sistema de busca semântica e de cada uma das peças usadas para se encaixar para fornecer uma solução final.

Um ótimo exemplo da semelhança contextual é o mecanismo de pesquisa do Bing: insira a descrição da imagem aqui

A consulta original tinha os termos {refrigerante enlatado} e os resultados da pesquisa do bing podem se referir a {refrigerante diet diet}, {refrigerantes}, {pop de temperatura ambiente fechada} ou {bebidas carbonatadas}. Como o bing fez isso ?:

Bem, palavras com significados semelhantes obtêm vetores semelhantes e, em seguida, esses vetores podem ser projetados em um gráfico bidimensional para serem facilmente visualizados. Esses vetores são treinados garantindo que palavras com significados semelhantes estejam fisicamente próximas uma da outra. Você pode treinar seu próprio modelo baseado em vetor treinando o modelo GloVeinsira a descrição da imagem aqui

Quanto mais próximas as distâncias dos vetores, melhor. Agora você pode procurar consultas de vizinhos mais próximos com base na distância de seus vetores. Por exemplo, para a consulta {como impedir que animais destruam meu jardim}, o vizinho mais próximo fornece os seguintes resultados:

insira a descrição da imagem aqui

Você pode aprender mais sobre isso aqui. No seu caso, você pode encontrar um limite para a distância máxima que um vetor de uma frase pode ter da consulta de pesquisa original, para que ela seja considerada uma frase contextualmente semelhante.

A semelhança contextual também pode ser feita reduzindo a dimensão do vocabulário usando algo como LSI (Latent Semantic Indexing). Para fazer isso em Python, eu sugiro que você verifique a biblioteca de genismo para python: https://radimrehurek.com/gensim/about.html .

Hardit Singh
fonte
1

Você pode estar interessado em pesquisar no Weaviate para ajudá-lo a resolver esse problema. É um gráfico inteligente baseado na vetorização de objetos de dados .

Se você possui um idioma específico do domínio (por exemplo, abreviações), pode estender o Weaviate com conceitos personalizados .

Você pode resolver seu problema com os recursos de pesquisa semântica (ou seja, Explore{}) ou os recursos de classificação automática.

Função Explorar

Como todos os objetos de dados são vetorizados, você pode fazer uma pesquisa semântica como a seguinte (este exemplo vem dos documentos , você pode testá-lo aqui usando o GraphQL):

{
  Get{
    Things{
      Publication(
        explore: {
          concepts: ["fashion"],
          certainty: 0.7,
          moveAwayFrom: {
            concepts: ["finance"],
            force: 0.45
          },
          moveTo: {
            concepts: ["haute couture"],
            force: 0.85
          }
        }
      ){
        name
      }
    }
  }
}

Se você estruturar seu esquema gráfico com base, por exemplo, no nome da classe "Sentença", uma consulta semelhante poderá ser algo como isto:

{
  Get{
    Things{
      Sentence(
        # Explore (i.e., semantically) for "Buying Experience"
        explore: {
          concepts: ["Buying Experience"]
        }
        # Result must include the word "car" 
        where: {
          operator: Like
          path: ["content"]
          valueString: "*car*"
        }
      ){
        content
      }
    }
  }
}

Nota:
Você também pode explorar o gráfico semanticamente como um todo.

Classificação automática

Uma alternativa pode estar trabalhando com os recursos de classificação contextual ou KNN .

No seu caso, você pode usar a classe Sentença e relacioná-los com uma classe chamada Experiência, que teria a propriedade: buying(é claro que existem muitas outras configurações e estratégias que você pode escolher).

PS:
Este vídeo fornece um pouco mais de contexto, se você quiser.

Bob van Luijt
fonte
0

Até onde eu sei, não acho que exista um modelo teórico para a construção de um mecanismo de pesquisa semântico. No entanto, acredito que um mecanismo de pesquisa semântica deve ser projetado para atender aos requisitos específicos em questão. Dito isto, qualquer mecanismo de pesquisa semântica capaz de entender com êxito a intenção do usuário, bem como o contexto do termo de pesquisa, precisa trabalhar com o processamento de linguagem natural (PNL) e o aprendizado de máquina como os blocos de construção.

Embora os mecanismos de pesquisa funcionem de maneira diferente das ferramentas de pesquisa, você pode consultar as ferramentas de pesquisa corporativa para ter uma idéia sobre um modelo de pesquisa semântica que funcione. As plataformas da nova era, como o 3RDi Search, trabalham com os princípios da pesquisa semântica e provaram ser a solução ideal para os dados não estruturados com os quais as empresas precisam lidar. O Google provavelmente está trabalhando em um modelo para introduzir semântica avançada no mecanismo de pesquisa.

Solo987
fonte