web-dev-qa-db-fra.com

Recherche sémantique avec PNL et elasticsearch

J'expérimente avec elasticsearch en tant que serveur de recherche et ma tâche consiste à créer une fonctionnalité de recherche "sémantique". À partir d'une phrase courte comme "J'ai un tuyau d'éclatement", le système doit en déduire que l'utilisateur recherche un plombier et renvoyer tous les plombiers répertoriés dans elasticsearch. 

Cela peut-il être effectué directement dans un serveur de recherche tel que elasticsearch ou dois-je utiliser un outil de traitement du langage naturel (NLP) tel que, par exemple? Maui Indexer. Quelle est la terminologie exacte pour ma tâche actuelle, la classification de texte? Bien que le texte donné soit très court puisqu'il s'agit d'une phrase de recherche.

48
user1089363

Il peut y avoir plusieurs approches avec une complexité de mise en œuvre différente. 

Le plus simple est de créer liste de sujets (comme la plomberie), joindre un sac de mots (comme "tuyau"), d'identifier la demande de recherche à la majorité des mots-clés et d'effectuer une recherche uniquement dans un sujet spécifique (vous pouvez ajouter le champ topic à vos documents de recherche élastique et le définir comme obligatoire avec + lors de la recherche). 

Bien sûr, si vous avez beaucoup de documents, la création manuelle d'une liste de sujets et d'un sac de mots prend beaucoup de temps. Vous pouvez utiliser apprentissage automatique pour automatiser certaines tâches. Fondamentalement, il suffit de mesurer la distance entre les mots et/ou les documents pour découvrir automatiquement les sujets (par exemple, par clustering de données) et classifier interroger l’un de ces sujets. La combinaison de ces techniques peut également constituer un bon choix (par exemple, vous pouvez créer manuellement des rubriques et leur affecter des documents initiaux, mais utiliser la classification pour l’affectation de requête). Consultez l'article de Wikipedia sur analyse sémantique latente pour mieux comprendre l'idée. Faites également attention aux 2 articles liés sur la classification des données et la classification des documents . Et oui, Maui Indexer peut devenir un bon outil d’aide de cette façon. 

Enfin, vous pouvez essayer de créer un moteur qui "comprend" le sens de l'expression (et ne se limite pas à utiliser la fréquence des termes) et effectue une recherche dans les rubriques appropriées. Très probablement, il s'agira de traitement du langage naturel _ et bases de connaissances basées sur une ontologie. Mais en fait, ce domaine est toujours en recherche active et sans expérience préalable, il vous sera très difficile de mettre en œuvre quelque chose comme ceci. 

62
ffriend

Vous voudrez peut-être explorer https://blog.conceptnet.io/2016/11/03/conceptnet-5-5-and-conceptnet-io/ .

Il combine semantic networks et distributional semantics.

Lorsque la plupart des développeurs ont besoin d’intégrations dans Word, le premier et probablement le seul endroit qu’ils recherchent est Word2vec, un algorithme de réseau neuronal de Google qui calcule les intégrations dans Word à partir de la sémantique de distribution. Autrement dit, il apprend à prédire les mots d'une phrase à partir des mots qui les entourent, et les imbrications sont la représentation des mots qui font les meilleures prédictions. Mais même après des téraoctets de texte, il existe des aspects de la signification de Word que vous ne pouvez pas apprendre à partir de la sémantique distributive.

Quelques résultats

Les systèmes d’incorporation ConceptNet Numberbatch Word, intégrés à ConceptNet 5.5, résolvent ces analogies SAT mieux que n’importe quel système précédent. 56,4% des questions sont correctes. Le système précédent le mieux comparable, le SuperSim de Turney (2013), a obtenu 54,8%. Et nous nous rapprochons de plus en plus de la performance «au niveau humain» sur les analogies SAT - alors que des humains particulièrement intelligents peuvent bien entendu avoir beaucoup plus de questions, le candidat moyen au collège obtient 57,0%.

3
SemanticBeeng

La recherche sémantique est fondamentalement une recherche avec un sens. Elasticsearch utilise la sérialisation JSON par défaut. Pour appliquer une recherche ayant une signification à JSON, vous devez l'étendre pour prendre en charge les relations Edge via JSON-LD. Vous pouvez ensuite appliquer votre analyse sémantique sur le schéma JSON-LD à Word pour éliminer les ambiguïtés des contextes d'entité de plombier et de canal en rafale en tant que relations sujet, prédicat et objet. Elasticsearch a un support de recherche sémantique très faible, mais vous pouvez le contourner en utilisant une recherche à facettes et un sac de mots. Vous pouvez indexer un schéma de dictionnaire de synonymes pour les termes de plomberie, puis effectuer une correspondance sémantique sur les phrases de texte de vos phrases. 

0
kodizant