Recherche sémantique avec PNL et elasticsearch

J'expérimente elasticsearch en tant que serveur de recherche et ma tâche est de construire une fonctionnalité de recherche "sémantique". À partir d'une courte phrase de texte comme "j'ai un tuyau en rafale", le système devrait déduire que l'utilisateur recherche un plombier et renvoyer tous les plombiers indexés dans elasticsearch.

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

45
demandé sur Ivaylo Slavov 2012-01-08 00:08:53

2 réponses

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 plomberie), joindre sac de mots (comme "pipe"), identifier la demande de recherche par la majorité des mots-clés et rechercher uniquement dans le sujet spécifié (vous pouvez ajouter le champ topic à vos documents de recherche elastic et le Définir comme obligatoire avec + pendant la recherche).

Bien sûr, si vous avez beaucoup de documents, création manuelle de la liste des sujets et sac de les mots sont très chers. Vous pouvez utiliser Machine learning pour automatiser certaines tâches. Fondamentalement, il suffit d'avoir une mesure de distance entre les mots et / ou les documents pour découvrir automatiquement les sujets (par exemple par Data clustering) et classer requête à l'un de ces sujets. Le mélange de ces techniques peut également être un bon choix (par exemple, vous pouvez créer manuellement des sujets et leur attribuer des documents initiaux, mais utiliser la classification pour l'attribution de requêtes). Jetez un oeil à Article de Wikipédia sur analyse sémantique latente pour mieux comprendre l'idée. Faites également attention aux 2 articles liés sur Data clustering et document classification . Et oui, Maui Indexeur peut devenir un bon outil d'aide de cette façon.

Enfin, vous pouvez essayer de construire un moteur qui "comprend" le sens de l'expression (pas seulement utilise la fréquence des Termes) et recherche les sujets appropriés. Très probablement, cela impliquera naturel traitement du langage et bases de connaissances basées sur l'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 ça.

61
répondu ffriend 2012-01-08 02:28:35

Vous pouvez 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 de mots, le premier et peut-être le seul endroit où ils regardent est word2vec, un algorithme de réseau neuronal de Google qui calcule les intégrations de mots à partir de la sémantique distributionnelle. Autrement dit, il apprend à prédire les mots dans une phrase à partir des autres mots qui les entourent, et les intégrations sont la représentation de des mots qui font les meilleures prédictions. Mais même après téraoctets de texte, il y a des aspects des significations des mots que vous n'apprendrez tout simplement pas de la sémantique distributionnelle seule.

Quelques résultats

Les intégrations de mots ConceptNet Numberbatch, intégrées à ConceptNet 5.5, résolvent ces analogies SAT mieux que n'importe quel système précédent. Il obtient 56,4% des questions correctes. Le meilleur système précédent comparable, Turney's SuperSim (2013), a obtenu 54,8%. Et nous nous rapprochons de plus en plus performance "au niveau humain" sur les analogies SAT-alors que les humains particulièrement intelligents peuvent bien sûr obtenir beaucoup plus de questions, le candidat moyen obtient 57.0%.

2
répondu SemanticBeeng 2016-11-21 18:52:56