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:
- Semblable à cette phrase
- A une partie de phrase similaire à la phrase
- 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 facileJe 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:
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.
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.
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.
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
Réponses:
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:
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 GloVe
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:
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 .
la source
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):
Si vous structurez votre schéma graphique en fonction, par exemple, du nom de classe "Phrase", une requête similaire pourrait ressembler à ceci:
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.
la source
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.
la source