nlp - research - Reconocimiento de entidad con nombre con Syntaxnet
tensorflow github (3)
Estoy tratando de entender y aprender SyntaxNet. Estoy tratando de averiguar si hay alguna forma de usar SyntaxNet para el Reconocimiento de entidad de nombre de un corpus. Se agradecerá cualquier código de muestra o enlaces útiles.
No, nunca encontré ninguna herramienta o enfoque que use / requiera un análisis para el Reconocimiento de Entidad Nombrada (NER).
Aunque, NER puede beneficiarse marginalmente de las características relacionadas con el árbol de análisis sintáctico, es una forma indirecta de hacerlo, ya que el análisis es muy lento en comparación con las implementaciones generales de NER. Esta es también la razón por la que incluso las etiquetas de Partes de voz no se utilizan como características en un sistema NER.
Espero que esto ayude.
He usado GATE, que es capaz de identificar el Reconocimiento de Entidad Nombrada y no requiere analizar el NER. Aunque el etiquetador de voz de parte en SyntaxNet puede identificar sustantivo, modificador de nombre y otros (que es una herramienta más poderosa para especificar diferentes roles de entidades de nombre), no estoy seguro de qué tan rápido va a funcionar en términos de identificación de NER.
Mientras que Syntaxnet no ofrece explícitamente ninguna funcionalidad de Reconocimiento de entidad nombrada, Parsey McParseface hace parte del etiquetado de voz y produce el resultado como una tabla Co-NLL.
Cualquier nombre propio está etiquetado como NNP y he encontrado que un identificador simple de expresiones regulares como el siguiente: <NNP>+
es decir, uno o más sustantivos propios juntos, da un rendimiento bastante bueno de entidades con nombre dentro de un documento. Por supuesto, es rudimentario y basado en reglas, pero efectivo de todos modos.
Para canalizar los datos de Co-NLL a un archivo de salida del script demo.sh (ubicado en "/ opt / tensorflow / models / syntaxnet / syntaxnet") comente la sección del código que lo canaliza a conll2ascii.py para que el script se parece a eso:
PARSER_EVAL=bazel-bin/syntaxnet/parser_eval
MODEL_DIR=syntaxnet/models/parsey_mcparseface
[[ "$1" == "--conll" ]] && INPUT_FORMAT=stdin-conll || INPUT_FORMAT=stdin
$PARSER_EVAL /
--input=$INPUT_FORMAT /
--output=stdout-conll /
--hidden_layer_sizes=64 /
--arg_prefix=brain_tagger /
--graph_builder=structured /
--task_context=$MODEL_DIR/context.pbtxt /
--model_path=$MODEL_DIR/tagger-params /
--slim_model /
--batch_size=1024 /
--alsologtostderr /
| /
$PARSER_EVAL /
--input=stdin-conll /
--output=sample-param /
--hidden_layer_sizes=512,512 /
--arg_prefix=brain_parser /
--graph_builder=structured /
--task_context=$MODEL_DIR/context.pbtxt /
--model_path=$MODEL_DIR/parser-params /
--slim_model /
--batch_size=1024 /
--alsologtostderr
También notará que el parámetro de salida se modificó en el archivo anterior para sample-param. Ahora estableceremos esto. Dirígete al archivo context.pbtxt (ubicado en "/ opt / tensorflow / models / syntaxnet / syntaxnet / models / parsey_mcparseface") y crea un parámetro de entrada para apuntar a tu archivo de salida. Debería verse algo así:
input {
name: ''sample-param''
record_format: ''conll-sentence''
Part {
file_pattern: "directory/prepoutput.txt"
}
}
Guarde y cierre el archivo y regrese a "/ opt / tensorflow / models / syntaxnet" y ejecute syntaxnet / demo.sh como se indica en el tutorial de sintaxnet. Al finalizar, vaya a la carpeta de salida especificada y debe tener una tabla en formato co-nll. A continuación, puede ejecutar un programa iterativo simple que revisa cada entrada e identifica las etiquetas pos y, en base a esto, puede probar las variaciones de mi formato sugerido para el reconocimiento de entidades.
Espero que esto haya ayudado!