python nlp nltk named-entity-recognition

python - Reconocimiento de entidad NLTK con datos personalizados



nlp named-entity-recognition (4)

Estoy tratando de extraer entidades nombradas de mi texto usando NLTK. Encuentro que NLTK NER no es muy preciso para mi propósito y también quiero agregar más etiquetas propias. He estado tratando de encontrar la forma de entrenar mi NER, pero no consigo encontrar los recursos adecuados. Tengo un par de preguntas con respecto a NLTK-

  1. ¿Puedo usar mis propios datos para entrenar un identificador de entidades con nombre en NLTK?
  2. Si puedo entrenar usando mis propios datos, ¿es el archivo named_entity.py el que se va a modificar?
  3. ¿El formato del archivo de entrada debe estar en IOB, por ejemplo? Eric NNP B-PERSON?
  4. ¿Hay algún recurso, aparte del libro de cocina nltk y nlp con python, que pueda usar?

Realmente agradecería ayuda en este sentido


Hay algunas funciones en el módulo nltk.chunk.named_entity que entrena un etiquetador NER. Sin embargo, se escribieron específicamente para el corpus de ACE y no se limpiaron por completo, por lo que uno tendrá que escribir sus propios procedimientos de capacitación con aquellos como referencia.

También hay dos guías relativamente recientes ( 1 2 ) en línea que detallan el proceso de uso de NLTK para entrenar el corpus GMB.

Sin embargo, como se menciona en las respuestas anteriores, ahora que hay muchas herramientas disponibles, no se debe recurrir a NLTK si se desea un proceso de capacitación simplificado. Los kits de herramientas como CoreNLP y spaCy hacen un trabajo mucho mejor. Como usar NLTK no es muy diferente a escribir su propio código de entrenamiento desde cero, no tiene mucho valor hacerlo. Se puede considerar que NLTK y OpenNLP pertenecen de alguna manera a una era pasada antes de la explosión del progreso reciente en PNL.


Puede usar fácilmente el Stanford NER junto con nltk. El script python es como

from nltk.tag.stanford import NERTagger import os java_path = "/Java/jdk1.8.0_45/bin/java.exe" os.environ[''JAVAHOME''] = java_path st = NERTagger(''../ner-model.ser.gz'',''../stanford-ner.jar'') tagging = st.tag(text.split())

Para entrenar sus propios datos y crear un modelo, puede consultar la primera pregunta sobre Stanford NER FAQ.

El enlace es http://nlp.stanford.edu/software/crf-faq.shtml


También tuve este problema, pero logré resolverlo. Puede usar sus propios datos de entrenamiento. Documenté los principales requisitos / pasos para esto en mi repositorio github .

Utilicé NLTK-trainer , así que básicamente tiene que obtener los datos de entrenamiento en el formato correcto (token NNP B-tag) y ejecutar el script de entrenamiento. Verifique mi repositorio para más información.


¿Estás comprometido con el uso de NLTK / Python? Me encontré con los mismos problemas que usted, y obtuve resultados mucho mejores utilizando el reconocedor de entidades con nombre de Stanford: http://nlp.stanford.edu/software/CRF-NER.shtml . El proceso para entrenar al clasificador utilizando sus propios datos está muy bien documentado en las preguntas frecuentes.

Si realmente necesita usar NLTK, accedería a la lista de correo para obtener algunos consejos de otros usuarios: http://groups.google.com/group/nltk-users .

¡Espero que esto ayude!