我正在尝试了解和学习SyntaxNet。我试图弄清楚是否有任何方法可以使用SyntaxNet进行语料库的名称实体识别。任何示例代码或有用的链接将不胜感激。
最佳答案
虽然Syntaxnet没有明确提供任何命名实体识别功能,但Parsey McParseface会进行语音标记的一部分并将输出作为Co-NLL表生成。
任何专有名词都被标记为NNP,我发现像这样的简单正则表达式标识符:<NNP>+
,即一个或多个专有名词放在一起,可以很好地产生文档中的命名实体。它当然是基本的和基于规则的,但是仍然有效。
为了将Co-NLL数据从demo.sh脚本(位于“/opt/tensorflow/models/syntaxnet/syntaxnet”中)传送到输出文件,请注释掉将其传送到conll2ascii.py的代码部分。该脚本如下所示:
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
您还将注意到,在上述文件中,输出参数已更改为sample-param。现在,我们将对此进行设置。转到context.pbtxt文件(位于“/opt/tensorflow/models/syntaxnet/syntaxnet/models/parsey_mcparseface”中),并创建一个输入参数以指向您的输出文件。它看起来应该像这样:
input {
name: 'sample-param'
record_format: 'conll-sentence'
Part {
file_pattern: "directory/prepoutput.txt"
}
}
保存并关闭文件,然后返回“/opt/tensorflow/models/syntaxnet”,然后按照syntaxnet教程中的说明运行syntaxnet/demo.sh。完成后,转到指定的输出文件夹,您应该有一个co-nll格式的表。然后,您可以运行一个简单的迭代程序,遍历每个条目并标识pos标签,并基于此可以尝试我建议的实体识别格式的变体。
希望这对您有所帮助!