Comment construire une recherche sémantique pour un domaine donné

19

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. Semblable à cette phrase
  2. A une partie de phrase similaire à la phrase
  3. Une phrase qui a des significations contextuellement similaires


Permettez-moi d'essayer de vous donner un exemple, supposons que je recherche l'expression "Buying Experience", je devrais obtenir les phrases comme:

  • 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 facile

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


Je veux insister sur le fait que nous recherchons une similitude 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.

Des choses que nous avons déjà essayées:

  1. Recherche sémantique ouverte Le problème auquel nous avons été confrontés ici est de générer une ontologie à partir des données dont nous disposons, ou pour cela de rechercher l'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 seulement.

  3. Nous avons essayé différentes intégrations comme celles déjà mentionnées dans les transformateurs de phrases et avons également examiné l' exemple et essayé d'évaluer par rapport à notre ensemble organisé par les humains 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 que nous attendions et il y a une charge cognitive pour décider de la valeur de 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

Jickson
la source
Question bien écrite - pouvez-vous ajouter 5 autres exemples de termes de recherche? S'agit-il toujours d'un à trois mots ou les termes de recherche peuvent-ils être plus longs? Vous êtes sur la bonne voie
Adnan S
Salut Adnan, le terme de recherche sera toujours composé de un à trois mots. Ex: expérience d'achat, confort de conduite, système d'infodivertissement, intérieurs, kilométrage, performances, confort d'assise, comportement du personnel.
Jickson
Cet article pourrait être intéressant pour votre cas: elastic.co/blog/… (indice: tirer parti de word2vec)
Val
@Val Il est intéressant de noter que j'allais mentionner le même article que vous avez mentionné et que j'ai ensuite vu votre commentaire. Je pense que cette méthode vous rapprochera de ce que vous voulez.
nima
vous voudrez peut-être examiner la similitude des cosinus. Comme expliqué ci-dessous, cela implique de convertir les chaînes en vecteurs qui peuvent être représentés dans l'espace 2D. L'angle cosinus de ces 2 vecteurs est calculé. Cet angle représente la "similitude" entre les 2 cordes. Voici un bel article à ce sujet medium.com/swlh/playing-with-word-vectors-308ab2faa519
sagar1025

Réponses:

5

Je vous suggère fortement de regarder la conférence de Trey Grainger sur la façon de construire un système de recherche sémantique => https://www.youtube.com/watch?v=4fMZnunTRF8 . Il parle de l'anatomie d'un système de recherche sémantique et de chacune des pièces utilisées pour s'emboîter afin de fournir une solution finale.

Un bon exemple de la similitude contextuelle est le moteur de recherche de Bing: entrez la description de l'image ici

La requête d'origine avait les termes {soda en conserve} et les résultats de recherche de bing peuvent faire référence à {soda en conserve}, {boissons gazeuses}, {pop à température ambiante non ouverte} ou {boissons gazeuses}. Comment a fait bing?:

Eh bien, les mots qui ont des significations similaires obtiennent des vecteurs similaires, puis ces vecteurs peuvent être projetés sur un graphique à deux dimensions pour être facilement visualisés. Ces vecteurs sont entraînés en s'assurant que les mots ayant des significations similaires sont physiquement proches les uns des autres. Vous pouvez former votre propre modèle vectoriel en entraînant le modèle GloVeentrez la description de l'image ici

Plus les distances des vecteurs sont rapprochées, mieux c'est. Vous pouvez maintenant rechercher des requêtes de voisins les plus proches en fonction de la distance de leurs vecteurs. Par exemple, pour la requête {comment empêcher les animaux de détruire mon jardin}, le voisin le plus proche donne ces résultats:

entrez la description de l'image ici

Vous pouvez en savoir plus ici. Pour votre cas, vous pouvez trouver un seuil pour la distance maximale qu'un vecteur d'une phrase peut être à partir de la requête de recherche d'origine pour qu'il soit considéré comme une phrase contextuellement similaire.

La similitude contextuelle peut également être possible en réduisant la dimension du vocabulaire en utilisant quelque chose comme LSI (Latent Semantic Indexing). Pour ce faire en Python, je vous suggère fortement de consulter la bibliothèque de génisme pour python: https://radimrehurek.com/gensim/about.html .

Hardit Singh
la source
1

Vous pourriez être intéressé par la recherche de Weaviate pour vous aider à résoudre ce problème. Il s'agit d'un graphe intelligent basé sur la vectorisation d'objets de données .

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

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

Fonction d'exploration

Étant donné que tous les objets de données sont vectorisés, vous pouvez effectuer une recherche sémantique comme celle-ci (cet exemple provient des documents , vous pouvez l'essayer ici à l' aide de 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 en fonction, par exemple, du 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 contextuelle ou KNN .

Dans votre cas, vous pouvez utiliser la classe Phrase 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.

Bob van Luijt
la source
0

Pour autant que je sache, je ne pense pas qu'il existe de modèle théorique pour construire un moteur de recherche sémantique. Cependant, je crois qu'un moteur de recherche sémantique devrait être conçu pour répondre aux besoins 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 utiliser le traitement du langage naturel (NLP) 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 vous faire une idée d'un modèle de recherche sémantique qui fonctionne. Les nouvelles plateformes d'âge 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 auxquelles les entreprises doivent faire face. Google travaille très probablement sur un modèle pour introduire une sémantique avancée dans les moteurs de recherche.

Solo987
la source