web-dev-qa-db-fra.com

Extraction/reconnaissance d'entités avec des outils gratuits lors de l'alimentation de Lucene Index

J'étudie actuellement les options permettant d'extraire les noms de personnes, les emplacements, les mots techniques et les catégories à partir de textes (beaucoup d'articles du Web), qui seront ensuite intégrés dans un index Lucene/ElasticSearch. Les informations supplémentaires sont ensuite ajoutées en tant que métadonnées et devraient accroître la précision de la recherche. 

Par exemple. quand quelqu'un interroge le «guichet», il devrait pouvoir décider s'il veut parler du sport de cricket ou du projet Apache. J'ai essayé de le mettre en œuvre moi-même avec un succès mineur jusqu'à présent. Maintenant, j'ai trouvé beaucoup d'outils, mais je ne sais pas s'ils conviennent à cette tâche et lesquels s'intègrent bien avec Lucene ou si la précision de l'extraction d'entité est suffisante.

Mes questions:

  • Quelqu'un at-il une expérience avec certains des outils énumérés ci-dessus et de sa précision/rappel? Ou si des données de formation sont requises + disponibles.
  • Existe-t-il des articles ou des tutoriels où je peux commencer à utiliser l'extraction d'entité (NER) pour chaque outil?
  • Comment peuvent-ils être intégrés à Lucene?

Voici quelques questions liées à ce sujet:

43
Karussell

Le problème que vous rencontrez dans l'exemple 'wicket' est appelé entity homonymie, et non une entité extraction/reconnaissance (NER). Le TNS peut être utile, mais seulement lorsque les catégories sont suffisamment spécifiques. La plupart des systèmes NER n'ont pas assez de granularité pour distinguer un projet de logiciel d'un logiciel (les deux types tomberaient en dehors des types généralement reconnus: personne, organisation, lieu).

Pour la désambiguïsation, vous avez besoin d’une base de connaissances sur laquelle les entités sont désambiguïsées. DBpedia est un choix typique en raison de sa large couverture. Voir ma réponse pour Comment utiliser DBPedia pour extraire les balises/mots-clés du contenu? où je donne plus d'explications et mentionne plusieurs outils de désambiguïsation, notamment:

Ces outils utilisent souvent une API indépendante du langage, telle que REST, et je ne sais pas s'ils fournissent directement une assistance à Lucene, mais j'espère que ma réponse a été bénéfique pour le problème que vous essayez de résoudre.

16
John Lehmann

Vous pouvez utiliser OpenNLP pour extraire les noms des personnes, des lieux et des organisations sans formation. Vous utilisez simplement des modèles préexistants qui peuvent être téléchargés ici: http://opennlp.sourceforge.net/models-1.5/

Pour un exemple d'utilisation de l'un de ces modèles, voir: http://opennlp.Apache.org/documentation/1.5.3/manual/opennlp.html#tools.namefind

2
Abul Fayes

Rosoka est un produit commercial qui fournit un calcul de "saillance" qui mesure l'importance du terme ou de l'entité pour le document. La visibilité est basée sur l'usage linguistique et non sur la fréquence. En utilisant les valeurs de saillance, vous pouvez déterminer le sujet principal du document dans son ensemble. La sortie est dans votre choix de XML ou JSON, ce qui le rend très facile à utiliser avec Lucene . Il est écrit en Java. Une version d'Amazon Cloud est disponible sur https://aws.Amazon.com/marketplace/pp/B00E6FGJZ0 . Le coût pour l'essayer est de 0,99 $/heure. La version Rosoka Cloud ne dispose pas de toutes les fonctionnalités de l'API Java, contrairement à la version complète de Rosoka . Oui, les deux versions effectuent la désambiguïsation des entités et des termes en fonction de l’usage linguistique.

La désambiguïsation, qu’elle soit humaine ou logicielle, nécessite qu’il existe suffisamment d’informations contextuelles pour pouvoir déterminer la différence. Le contexte peut être contenu dans le document, dans une contrainte de corpus ou dans le contexte des utilisateurs. Le premier étant plus spécifique et le dernier présentant la plus grande ambiguïté potentielle. C'est à dire. en tapant le mot clé "wicket" dans une recherche Google, pourrait faire référence au cricket, au logiciel Apache ou au personnage Star Wars Ewok (c'est-à-dire une entité). Le général La phrase "Le guichet est gardé par le batteur" a des indices contextuels dans la phrase pour l'interpréter comme un objet. "Wicket Wystri Warrick était un éclaireur Ewok" devrait interpréter "Wicket" en tant que prénom de l'entité-personne "Wicket Wystri Warrick". "Welcome to Apache Wicket" a les indices contextuels que "Wicket" fait partie d'un nom de lieu, etc. 

0
mike

Dernièrement, je me suis occupé de Stanford Crf Ner. Ils ont publié pas mal de versions http://nlp.stanford.edu/software/CRF-NER.shtml

La bonne chose est que vous pouvez former votre propre classificateur. Vous devriez suivre le lien qui contient les directives sur la façon de former votre propre TNS. http://nlp.stanford.edu/software/crf-faq.shtml#a Malheureusement, dans mon cas, les entités nommées ne sont pas extraites efficacement du document. La plupart des entités ne sont pas détectées. 

Juste au cas où vous le trouverez utile. 

0
Abhro