web-dev-qa-db-fra.com

Comment créer une recherche sémantique pour un domaine donné

Il y a un problème que nous essayons de résoudre où nous voulons faire une recherche sémantique sur notre ensemble de données, c'est-à-dire que nous avons des données spécifiques au domaine (exemple: phrases parlant d'automobiles)

Nos données ne sont qu'un tas de phrases et ce que nous voulons, c'est donner une phrase et récupérer les phrases qui sont:

  1. Similaire à cette phrase
  2. Contient une partie de phrase similaire à la phrase
  3. Une phrase qui a des significations contextuellement similaires


Laissez-moi essayer de vous donner un exemple en supposant que je recherche l'expression "Expérience d'achat", je devrais obtenir les phrases telles que:

  • Je n'ai jamais pensé que l'achat d'une voiture pouvait prendre moins de 30 minutes pour signer et acheter.
  • J'ai trouvé une voiture que j'aimais et le processus d'achat était
    simple et simple

  • Je détestais absolument faire du shopping automobile, mais aujourd'hui je suis content de l'avoir fait


Je veux mettre l'accent sur le fait que nous recherchons une similarité contextuelle et pas seulement une recherche de mots par force brute.

Si la phrase utilise des mots différents, elle devrait également pouvoir la trouver.

Choses que nous avons déjà essayées:

  1. Recherche sémantique ouverte le problème auquel nous sommes confrontés ici est de générer une ontologie à partir des données dont nous disposons, ou pour cela de rechercher une ontologie disponible dans différents domaines de notre intérêt.

  2. Elastic Search (BM25 + Vectors (tf-idf)), nous avons essayé ceci où il donnait quelques phrases mais la précision n'était pas terrible. La précision était également mauvaise. Nous avons essayé contre un ensemble de données organisé par l'homme, il n'a pu obtenir que 10% des phrases environ.

  3. Nous avons essayé différents intégrations comme celle mentionnée une fois dans phrase-transformers et avons également parcouru exemple et avons essayé d'évaluer par rapport à notre ensemble organisé par l'homme et qui avait également une très faible précision.

  4. Nous avons essayé ELMO . C'était une précision meilleure mais toujours inférieure à ce à quoi nous nous attendions et il y a une charge cognitive pour décider de la valeur du cosinus en dessous de laquelle nous ne devrions pas considérer les phrases. Cela s'applique même au point 3.

Toute aide serait appréciée. Merci beaucoup pour l'aide à l'avance

20
Jickson

Vous pourriez être intéressé par Weaviate pour vous aider à résoudre ce problème. C'est un graphique intelligent basé sur vectorisation des objets de données .

Si vous avez un langage spécifique au domaine (par exemple, des abréviations), vous pouvez étendre Weaviate avec concepts personnalisés .

Vous pourrez peut-être résoudre votre problème avec les fonctionnalités de recherche sémantique (c.-à-d. Explore{}) ou les fonctionnalités de classification automatique.

Explorer la fonction

Comme tous les objets de données sont vectorisés, vous pouvez effectuer une recherche sémantique comme celle-ci (cet exemple vient de la documentation , vous pouvez l'essayer ici en utilisant GraphQL):

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

Si vous structurez votre schéma graphique basé sur -par exemple- le nom de classe "Phrase", une requête similaire pourrait ressembler à ceci:

{
  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
      }
    }
  }
}

Remarque:
Vous pouvez également explorer le graphique sémantiquement dans son ensemble.

Classification automatique

Une alternative pourrait être de travailler avec les fonctionnalités de classification contextual ou KNN .

Dans votre cas, vous pouvez utiliser la classe Sentence et les associer à une classe appelée Experience, qui aurait la propriété: buying (il existe bien sûr de nombreuses autres configurations et stratégies parmi lesquelles vous pouvez choisir).

PS:
Cette vidéo donne un peu plus de contexte si vous le souhaitez.

1
Bob van Luijt

Pour autant que je sache, je ne pense pas qu’il existe un modèle théorique pour créer un moteur de recherche sémantique. Cependant, je pense qu'un moteur de recherche sémantique devrait être conçu pour répondre aux exigences spécifiques du moment. Cela dit, tout moteur de recherche sémantique capable de comprendre avec succès l'intention de l'utilisateur ainsi que le contexte du terme de recherche doit travailler avec le traitement du langage naturel (PNL) et l'apprentissage automatique comme éléments de base.

Même si les moteurs de recherche fonctionnent différemment des outils de recherche, vous pouvez vous référer aux outils de recherche d'entreprise pour avoir une idée d'un modèle de recherche sémantique qui fonctionne. Les plates-formes new age comme 3RDi Search fonctionnent sur les principes de la recherche sémantique et se sont révélées être la solution idéale pour les données non structurées que les entreprises doivent gérer. Google travaille très probablement sur un modèle pour introduire une sémantique avancée dans les moteurs de recherche.

0
Solo987