java nlp text-mining opennlp named-entity-recognition

java - ¿Cómo crear un buen modelo de entrenamiento NER en OpenNLP?



text-mining named-entity-recognition (1)

Acabo de empezar con OpenNLP. Necesito crear un modelo de entrenamiento simple para reconocer entidades de nombre.

Leer el documento aquí https://opennlp.apache.org/docs/1.8.0/apidocs/opennlp-tools/opennlp/tools/namefind Veo este texto simple para entrenar el modelo:

<START:person> Pierre Vinken <END> , 61 years old , will join the board as a nonexecutive director Nov. 29 . Mr . <START:person> Vinken <END> is chairman of Elsevier N.V. , the Dutch publishing group . <START:person> Rudolph Agnew <END> , 55 years old and former chairman of Consolidated Gold Fields PLC , was named a director of this British industrial conglomerate .

Las preguntas son dos:

  • ¿Por qué debería tener que poner los nombres de las personas en un contexto de texto (frase)? ¿Por qué no escribir el nombre de una persona para cada línea? me gusta:

    <START:person> Robert <END> <START:person> Maria <END> <START:person> John <END>

  • ¿Cómo también puedo agregar información adicional a ese nombre? Por ejemplo, me gustaría guardar la información Hombre / Mujer para cada nombre.

(Sé que hay sistemas que intentan entenderlo leyendo la última letra, como la "a" para Mujeres, etc. pero me gustaría agregarla yo mismo)

Gracias.


La respuesta a su primera pregunta es que el algoritmo funciona en el contexto circundante (tokens) dentro de una oración; No es solo un simple mecanismo de búsqueda. OpenNLP utiliza la máxima entropía, que es una forma de regresión logística multinomial para construir su modelo. La razón de esto es reducir la "ambigüedad del sentido de las palabras" y encontrar entidades en contexto. Por ejemplo, si mi nombre es abril, puedo confundirme fácilmente con el mes de abril, y si mi nombre es mayo, entonces me confundiría con el mes de mayo y con el verbo mayo. Para la segunda parte de la primera pregunta, puede hacer una lista de nombres conocidos y usar esos nombres en un programa que analice sus oraciones y las anote automáticamente para ayudarlo a crear un conjunto de entrenamiento, sin embargo, haga una lista de nombres. solo sin contexto no entrenará al modelo lo suficiente o en absoluto. De hecho, hay un complemento de OpenNLP llamado "complemento de modelbuilder" diseñado para esto: le asigna un archivo de nombres y utiliza los nombres y algunos de sus datos (oraciones) para entrenar a un modelo. Si busca nombres particulares de entidades generalmente no ambiguas, puede que sea mejor usar una lista y algo como expresiones regulares para descubrir nombres en lugar de NER.

En cuanto a la segunda pregunta, hay algunas opciones, pero en general, no creo que la NER sea una gran herramienta para delinear algo como el género, sin embargo, con suficientes oraciones de entrenamiento puede obtener resultados decentes. Dado que NER usa un modelo basado en tokens circundantes en su conjunto de entrenamiento de oraciones para establecer la existencia de una entidad nombrada, no puede hacer mucho en términos de identificación de género. Puede que sea mejor que encuentre todos los nombres de personas, luego haga referencia a un índice de nombres que sepa que son hombres o mujeres para obtener una coincidencia. Además, algunos nombres, como Pat, son a la vez masculinos y femeninos, y en la mayoría de los datos textuales no habrá indicios de que no sean humanos ni mecánicos. Dicho esto, podría crear un modelo masculino y femenino por separado, o podría crear diferentes tipos de entidades dentro del mismo modelo. Podría usar una anotación como esta (utilizando diferentes nombres de tipo de entidad de male.person y female.person). Nunca he intentado esto, pero podría hacerlo bien, tendrías que probarlo en tus datos.

<START:male.person> Pierre Vinken <END> , 61 years old , will join the board as a nonexecutive director Nov. 29 . Mrs . <START:female.person> Maria <END> is chairman of Elsevier N.V. , the Dutch publishing group

NER = Reconocimiento de entidad nombrada

HTH