Cargue el modelo NER personalizado Stanford CoreNLP

He creado mi propio modelo NER con el software “Stanford-NER” de Stanford y siguiendo estas instrucciones.

Soy consciente de que CoreNLP carga tres modelos NER de la caja en el siguiente orden:

  1. edu/stanford/nlp/models/ner/english.all.3class.distsim.crf.ser.gz
  2. edu/stanford/nlp/models/ner/english.muc.7class.distsim.crf.ser.gz
  3. edu/stanford/nlp/models/ner/english.conll.4class.distsim.crf.ser.gz

Ahora quiero incluir mi modelo NER en la lista de arriba y tener el texto etiquetado por mi modelo NER primero.

He encontrado dos preguntas previas de StackOverflow con respecto a este tema y son “Stanford OpenIE utilizando el modelo NER personalizado” y “¿Por qué el anotador NER de Stanford CoreNLP carga 3 modelos de forma predeterminada?”

Ambas publicaciones tienen buenas respuestas. El mensaje general de las respuestas es que debe editar el código dentro de un archivo.

Stanford OpenIE utilizando un modelo NER personalizado

A partir de este post, se dice que edite corenlpserver.sh pero no puedo encontrar este archivo dentro del software descargado Stanford CoreNLP. ¿Alguien puede indicarme la ubicación de este archivo?

¿El anotador NER de Stanford CoreNLP carga 3 modelos por defecto?

Esta publicación dice que puedo usar el argumento de -ner.model para llamar específicamente a qué modelos NER cargar. java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer -port 9000 -timeout 15000 -ner.model *modlefilepathhere* este argumento al comando del servidor inicial ( java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer -port 9000 -timeout 15000 -ner.model *modlefilepathhere* ). Esto no funcionó ya que el servidor todavía cargaba los tres modelos.

También indica que tiene que cambiar algún código Java, aunque no indica específicamente dónde realizar el cambio.

¿Necesito modificar o agregar este código props.put("ner.model", "model_path1,model_path2"); a un archivo de clase específica en el software CoreNLP?

PREGUNTA: De mi investigación, parece que necesito agregar / modificar algún código para llamar a mi modelo NER único. Estas “ediciones” se describen arriba y esta información se ha extraído de otras preguntas de StackOverflow. ¿Qué archivos necesito específicamente para editar? ¿Dónde se encuentran exactamente estos archivos (es decir, edu / Stanford / nlp / … etc)?

EDITAR: Mi sistema se está ejecutando en un servidor local y estoy usando la API pycorenlp para abrir una canalización a mi servidor local y realizar solicitudes en su contra. Las dos líneas críticas del código de python / pycorenlp son:

  1. nlp = StanfordCoreNLP('http://localhost:9000')
  2. output = nlp.annotate(evalList[line], properties={'annotators': 'ner, openie','outputFormat': 'json', 'openie.triple.strict':'True', 'openie.max_entailments_per_clause':'1'})

NO creo que esto afecte mi capacidad para llamar a mi modelo NER único, pero quería presentar todos los datos de situación que pueda para obtener la mejor respuesta posible.

Si desea personalizar la canalización que utiliza el servidor, cree un archivo llamado server.properties (o puede llamarlo como desee).

Luego agregue esta opción cuando inicie el servidor -serverProperties server.properties con el comando java.

En ese archivo .properties debe incluir ner.model = /path/to/custom_model.ser.gz

En general, puede personalizar la canalización que el servidor utilizará en ese archivo .properties. Por ejemplo, también puede establecer la lista de anotadores en ella con los annotators = tokenize,ssplit,pos,lemma,ner,parse línea annotators = tokenize,ssplit,pos,lemma,ner,parse etc.

ACTUALIZACIÓN para abordar los comentarios:

  1. En su comando java no necesita el -ner.model /path/to/custom_model.ser.gz

  2. Un archivo .properties puede tener una cantidad ilimitada de configuraciones de propiedades, una configuración por línea (las líneas en blanco se ignoran, al igual que las líneas #d out)

  3. Cuando ejecuta un comando de Java, este busca de forma predeterminada los archivos en el directorio donde está ejecutando el comando. Entonces, si su comando incluye -serverProperties server.properties , asumirá que el archivo server.properties está en el mismo directorio desde el que se ejecuta el comando. Si proporciona una ruta absoluta en -serverProperties /path/to/server.properties lugar -serverProperties /path/to/server.properties , puede ejecutar el comando desde cualquier lugar.

  4. Así que para que quede claro, puede iniciar el servidor con este comando (ejecutar en la carpeta con todos los archivos jar):

java -Xmx8g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer -port 9000 -timeout 15000 -serverProperties server.properties

y server.properties debería ser un archivo como este:

 ner.model = /path/to/custom_model.ser.gz 

server.properties podría verse así:

 annotators = tokenize,ssplit,pos,lemma,ner,depparse ner.model = /path/to/custom_model.ser.gz parse.maxlen = 100 

solo como ejemplo … debe poner todas las configuraciones en server.properties

  1. Hice algunos comentarios sobre el acceso al servidor StanfordCoreNLP desde Python en una respuesta anterior:

no se puede usar pycorenlp para python3.5 a través de la terminal

Parece que estás usando la biblioteca pycorenlp que realmente no conozco. Otras 2 opciones son algunos códigos que muestro en esa respuesta o el paquete de stanza que hacemos. Detalles en esa respuesta arriba.