the stanford open natural machine library learning language corenlp lucene nlp semantic-web mahout opennlp

lucene - open - stanford nlp models



Extracción/reconocimiento de entidades con herramientas gratuitas mientras se alimenta el índice Lucene (4)

Actualmente estoy investigando las opciones para extraer nombres de personas, ubicaciones, palabras técnicas y categorías del texto (muchos artículos de la web) que luego se incluirán en un índice Lucene / ElasticSearch. La información adicional se agrega como metadatos y debe aumentar la precisión de la búsqueda.

Por ejemplo, cuando alguien pregunta ''wicket'', debería poder decidir si quiere decir el deporte del cricket o el proyecto Apache. Traté de implementar esto por mi cuenta con un éxito menor hasta el momento. Ahora encontré muchas herramientas, pero no estoy seguro de si son adecuadas para esta tarea y cuál de ellas se integra bien con Lucene o si la precisión de la extracción de entidades es lo suficientemente alta.

Mis preguntas:

  • ¿Alguien tiene experiencia con algunas de las herramientas enumeradas anteriormente y su precisión / recuperación? O si hay datos de capacitación requeridos + disponibles.
  • ¿Hay artículos o tutoriales en los que puedo comenzar con la extracción de entidades (NER) para todas y cada una de las herramientas?
  • ¿Cómo pueden integrarse con Lucene?

Aquí hay algunas preguntas relacionadas con ese tema:


Últimamente he estado jugando con stanford crf ner. Han lanzado bastantes versiones http://nlp.stanford.edu/software/CRF-NER.shtml

Lo bueno es que puedes entrenar a tu propio clasificador. Debe seguir el enlace que contiene las pautas sobre cómo entrenar su NER. http://nlp.stanford.edu/software/crf-faq.shtml#a Desafortunadamente, en mi caso, las entidades nombradas no se extraen de manera eficiente del documento. La mayoría de las entidades pasan desapercibidas.

En caso de que lo encuentres útil.


El problema al que se enfrenta en el ejemplo de ''wicket'' se llama desambiguación de entidad , no extracción / reconocimiento de entidad (NER). NER puede ser útil, pero solo cuando las categorías son lo suficientemente específicas. La mayoría de los sistemas NER no tienen suficiente granularidad para distinguir entre un deporte y un proyecto de software (ambos tipos quedarían fuera de los tipos típicamente reconocidos: persona, organización, ubicación).

Para la desambiguación, necesitas una base de conocimiento contra qué entidades se están desambiguando. DBpedia es una opción típica debido a su amplia cobertura. Ver mi respuesta para ¿Cómo usar DBPedia para extraer etiquetas / palabras clave del contenido? donde ofrezco más explicaciones y menciono varias herramientas para la desambiguación, que incluyen:

Estas herramientas a menudo usan una API independiente del lenguaje como REST, y no sé si brindan directamente soporte Lucene, pero espero que mi respuesta haya sido beneficiosa para el problema que está tratando de resolver.



Rosoka es un producto comercial que proporciona un cálculo de "Saliencia" que mide la importancia del término o entidad en el documento. La saliencia se basa en el uso lingüístico y no en la frecuencia. Al usar los valores de relevancia, puede determinar el tema principal del documento como un todo. El resultado está en su elección de XML o JSON, lo que lo hace muy fácil de usar con Lucene. Está escrito en java. Hay una versión de Amazon Cloud disponible en https://aws.amazon.com/marketplace/pp/B00E6FGJZ0 . El costo de probarlo es de $ 0.99 / hora. La versión de Rosoka Cloud no tiene todas las características de la API de Java disponibles que Rosoka completa. Sí, ambas versiones realizan desambiguación de entidad y término en función del uso lingüístico.

La desambiguación, ya sea humana o por software, requiere que haya suficiente información contextual para poder determinar la diferencia. El contexto puede estar contenido dentro del documento, dentro de una restricción de corpus, o dentro del contexto de los usuarios. El primero es más específico, y el último tiene la mayor ambigüedad potencial. Es decir, escribiendo la palabra clave "wicket" en una búsqueda de Google, podría referirse al cricket, al software Apache o al personaje de Star Wars Ewok (es decir, una entidad). El general La frase "El wicket está protegido por el bateador" tiene pistas contextuales dentro de la oración para interpretarlo como un objeto. "Wicket Wystri Warrick era un explorador masculino de Ewok" debería ingresar a "Wicket" como el nombre de la entidad persona "Wicket Wystri Warrick". "Bienvenido a Apache Wicket" tiene las pistas contextuales de que "Wicket" es parte del nombre de un lugar, etc.