stanford spanish recognition ner nlp stanford-nlp named-entity-recognition

nlp - ner - named entity recognition spanish



¿Es posible entrenar el sistema NER de Stanford para reconocer más tipos de entidades nombradas? (3)

Parece que quieres entrenar a tu modelo NER personalizado.

Aquí hay un tutorial detallado con el código completo:

https://dataturks.com/blog/stanford-core-nlp-ner-training-java-example.php?s=so

Formato de datos de entrenamiento

Los datos de entrenamiento se pasan como un archivo de texto donde cada línea es un par de etiqueta de palabra. Cada palabra en la línea debe estar etiquetada en un formato como "word / tLABEL", la palabra y el nombre de la etiqueta están separados por una pestaña ''/ t''. Para una oración de texto, debemos dividirla en palabras y agregar una línea por cada palabra en el archivo de capacitación. Para marcar el inicio de la siguiente línea, agregamos una línea vacía en el archivo de entrenamiento.

Aquí hay una muestra del archivo de entrenamiento de entrada:

hp Brand spectre ModelName x360 ModelName home Category theater Category system 0 horizon ModelName zero ModelName dawn ModelName ps4 0

Dependiendo de su dominio, puede crear dicho conjunto de datos de forma automática o manual. La creación manual de este conjunto de datos puede ser realmente dolorosa, herramientas como una herramienta de anotación NER pueden ayudar a que el proceso sea mucho más fácil.

Modelo de tren

public void trainAndWrite(String modelOutPath, String prop, String trainingFilepath) { Properties props = StringUtils.propFileToProperties(prop); props.setProperty("serializeTo", modelOutPath); //if input use that, else use from properties file. if (trainingFilepath != null) { props.setProperty("trainFile", trainingFilepath); } SeqClassifierFlags flags = new SeqClassifierFlags(props); CRFClassifier<CoreLabel> crf = new CRFClassifier<>(flags); crf.train(); crf.serializeClassifier(modelOutPath); }

Usa el modelo para generar tags:

public void doTagging(CRFClassifier model, String input) { input = input.trim(); System.out.println(input + "=>" + model.classifyToString(input)); }

Espero que esto ayude.

Estoy usando algunas bibliotecas de PNL ahora, (stanford y nltk) Stanford Vi la parte de demostración pero solo quiero preguntar si es posible usarla para identificar más tipos de entidades.

Por lo tanto, actualmente el sistema NER de Stanford (como muestra la demostración) puede reconocer a las entidades como persona (nombre), organización o ubicación. Pero las organizaciones reconocidas se limitan a universidades o algunas de las grandes organizaciones. Me pregunto si puedo usar su API para escribir programas para más tipos de entidades, como si mi entrada es "Apple" o "Square" puede reconocerla como una empresa.

¿Tengo que hacer mi propio conjunto de datos de entrenamiento?

Además, si alguna vez quiero extraer entidades y sus relaciones entre ellas, creo que debería usar el analizador de dependencia de Stanford. Quiero decir, extraiga primero las entidades nombradas y otras partes etiquetadas como "nombre" y encuentre las relaciones entre ellas.

Estoy en lo correcto.

Gracias.


Podrías entrenar fácilmente tu propio corpus de datos.

En las preguntas frecuentes de Stanford NER, la primera pregunta es cómo entrenar nuestro propio modelo para NER.

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

Así, por ejemplo, podrías dar datos de entrenamiento como

Producto OBJ
de O
Microsoft ORG

Del mismo modo, puede crear sus propios datos de entrenamiento y construir un modelo y luego utilizarlo para obtener el resultado deseado.


Sí, necesitas tu propio conjunto de entrenamiento. Los modelos de Stanford pre-entrenados solo reconocen la palabra "Stanford" como una entidad con nombre porque han sido entrenados en datos que tenían esa palabra (o palabras muy similares según el conjunto de características que usan, no sé qué es eso) marcado como una entidad nombrada.

Una vez que tenga más datos, debe colocarlos en el formato correcto que se describe en esta pregunta y en el tutorial de Stanford.