46 votes

Extraction/reconnaissance d'entités avec des outils gratuits tout en alimentant l'index Lucene

J'étudie actuellement les possibilités d'extraction de noms de personnes, de lieux, de mots techniques et de catégories à partir de textes (beaucoup d'articles du web) qui seront ensuite introduits dans un index Lucene/ElasticSearch. Les informations supplémentaires sont ensuite ajoutées en tant que métadonnées et devraient augmenter la précision de la recherche.

Par exemple, lorsque quelqu'un demande "wicket", il devrait pouvoir décider s'il s'agit du sport de cricket ou du projet Apache. J'ai essayé de mettre cela en œuvre par moi-même avec un succès mineur jusqu'à présent. J'ai trouvé de nombreux outils, mais je ne suis pas sûr qu'ils soient adaptés à cette tâche, qu'ils s'intègrent bien à Lucene ou que la précision de l'extraction des entités soit suffisante.

Mes questions :

  • Quelqu'un a-t-il de l'expérience avec certains des outils listés ci-dessus et leur précision/rappel ? Ou s'il existe des données de formation requises + disponibles.
  • Existe-t-il des articles ou des tutoriels qui me permettent de commencer à extraire des entités (NER) pour chaque outil ?
  • Comment peuvent-ils être intégrés à Lucene ?

Voici quelques questions relatives à ce sujet :

18voto

John Lehmann Points 1659

Le problème que vous rencontrez dans l'exemple "wicket" s'appelle désambiguïsation des entités et non l'extraction/reconnaissance d'entités (NER). La NER peut être utile, mais uniquement lorsque les catégories sont suffisamment spécifiques. La plupart des systèmes de NER n'ont pas une granularité suffisante pour faire la distinction entre un sport et un projet de logiciel (ces deux types d'entités n'entrent pas dans les catégories typiquement reconnues : personne, organisation, lieu).

Pour la désambiguïsation, vous avez besoin d'une base de connaissances par rapport à 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 tags/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 comme REST, et je ne sais pas s'ils fournissent directement un support Lucene, mais j'espère que ma réponse a été bénéfique pour le problème que vous essayez de résoudre.

3voto

Abul Fayes Points 1

Vous pouvez utiliser OpenNLP pour extraire les noms de personnes, de lieux, d'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 d'un de ces modèles, voir : http://opennlp.apache.org/documentation/1.5.3/manual/opennlp.html#tools.namefind

0voto

mike Points 21

Rosoka est un produit commercial qui fournit un calcul de la "saillance", qui mesure l'importance du terme ou de l'entité dans le document. La saillance 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 se fait au choix en XML ou JSON, ce qui rend son utilisation très facile avec Lucene. Il est écrit en Java. Il existe une version Amazon Cloud disponible à l'adresse 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 disponibles dans la version complète de Rosoka. Oui, les deux versions effectuent une désambiguïsation des entités et des termes sur la base de l'usage linguistique.

La désambiguïsation, qu'elle soit humaine ou logicielle, exige qu'il y ait 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 second présentant la plus grande ambiguïté potentielle. Par exemple, le fait de taper le mot clé "wicket" dans une recherche Google peut faire référence au cricket, au logiciel Apache ou au personnage Ewok de Star Wars (c'est-à-dire une entité). La phrase "Le guichet est gardé par le batteur" comporte des indices contextuels dans la phrase qui permettent de l'interpréter comme un objet. "Wicket Wystri Warrick était un scout Ewok mâle" devrait permettre d'interpréter "Wicket" comme le prénom de l'entité personne "Wicket Wystri Warrick". "Welcome to Apache Wicket" possède les indices contextuels que "Wicket" fait partie d'un nom de lieu, etc.

0voto

Abhro Points 1

Dernièrement, j'ai bricolé avec stanford crf ner. Ils ont publié un certain nombre de versions http://nlp.stanford.edu/software/CRF-NER.shtml

La bonne nouvelle 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 NER. 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 trouveriez utile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X