php - Algoritmos para reconocimiento de entidad nombrada.
python extract (6)
Me gustaría usar el reconocimiento de entidad nombrada (NER) para encontrar etiquetas adecuadas para los textos en una base de datos.
Sé que hay un artículo de Wikipedia sobre esto y muchas otras páginas que describen NER, preferiría que me cuente algo sobre este tema:
- ¿Qué experiencias hiciste con los diferentes algoritmos?
- ¿Qué algoritmo recomendarías?
- ¿Qué algoritmo es el más fácil de implementar (PHP / Python)?
- ¿Cómo funcionan los algoritmos? ¿Es necesaria la formación manual?
Ejemplo:
"El año pasado, estaba en Londres, donde vi a Barack Obama". => Tags: Londres, Barack Obama
Espero que puedas ayudarme. ¡Muchas gracias por adelantado!
Depende de si quieres:
Para aprender sobre NER : un excelente lugar para comenzar es con http://www.nltk.org/ y el book asociado.
Para implementar la mejor solución : aquí tendrá que buscar el estado de la técnica. Echa un vistazo a las publicaciones en TREC . Una reunión más especializada es Biocreative (un buen ejemplo de NER aplicada a un campo estrecho).
Para implementar la solución más sencilla : en este caso, básicamente solo desea hacer un etiquetado simple y extraer las palabras etiquetadas como sustantivos. Puede usar un etiquetador de nltk, o simplemente buscar cada palabra en PyWordnet y etiquetarla con el sentido de palabras más común.
La mayoría de los algoritmos requieren algún tipo de entrenamiento, y se desempeñan mejor cuando están capacitados en contenido que representa lo que se le pedirá etiquetar.
Hay algunas herramientas y APIs por ahí.
Hay una herramienta construida sobre DBPedia llamada DBPedia Spotlight ( https://github.com/dbpedia-spotlight/dbpedia-spotlight/wiki ). Puede utilizar su interfaz REST o descargar e instalar su propio servidor. Lo mejor es que asigna entidades a su presencia de DBPedia, lo que significa que puede extraer datos vinculados interesantes.
AlchemyAPI (www.alchemyapi.com) tiene una API que también lo hará a través de REST, y utiliza un modelo de freemium.
Creo que la mayoría de las técnicas se basan en un poco de PNL para encontrar entidades, luego usan una base de datos subyacente como Wikipedia, DBPedia, Freebase, etc. para hacer la desambiguación y la relevancia (por ejemplo, tratar de decidir si un artículo que menciona a Apple es sobre la fruta). o la compañía ... elegiríamos la compañía si el artículo incluye otras entidades vinculadas a Apple (la compañía).
Para comenzar, visite http://www.nltk.org/ si planea trabajar con python, aunque, por lo que sé, el código no es "fuerza industrial", pero lo ayudará a comenzar.
Consulte la sección 7.5 en http://nltk.googlecode.com/svn/trunk/doc/book/ch07.html pero para comprender los algoritmos es probable que tenga que leer mucho del libro.
También puedes ver esto en http://nlp.stanford.edu/software/CRF-NER.shtml . Se hace con java,
NER no es un tema fácil y probablemente nadie te dirá "este es el mejor algoritmo", la mayoría de ellos tienen sus pros / contras.
Mi 0.05 de un dólar.
Aclamaciones,
Realmente no sé nada sobre NER, pero a juzgar por ese ejemplo, podrías hacer un algoritmo que buscara mayúsculas en las palabras o algo así. Para eso recomendaría regex como la solución más fácil de implementar si está pensando en cosas pequeñas.
Otra opción es comparar los textos con una base de datos, que podría hacer coincidir una cadena previamente identificada como Etiquetas de interés.
mis 5 centavos
Si lo desea, puede probar el último sistema Fast Link Linking de Yahoo Research. El documento también tiene referencias actualizadas a los nuevos enfoques de NER utilizando incrustaciones basadas en redes neuronales:
https://research.yahoo.com/publications/8810/lightweight-multilingual-entity-extraction-and-linking
Uno puede usar redes neuronales artificiales para realizar el reconocimiento de la entidad nombrada.
Aquí hay una implementación de una red LSTM + CRF bidireccional en TensorFlow (python) para realizar el reconocimiento de la entidad nombrada: https://github.com/Franck-Dernoncourt/NeuroNER (funciona en Linux / Mac / Windows).
Proporciona resultados de vanguardia (o cerca de ella) en varios conjuntos de datos de reconocimiento de entidades nombradas. Como menciona Ale, cada algoritmo de reconocimiento de entidad nombrada tiene sus propios inconvenientes y desventajas.
Arquitectura ANN:
Como se ve en TensorBoard: