使用 Syntaxnet 的命名实体识别
Named Entity Recognition with Syntaxnet
我正在努力理解和学习 SyntaxNet。我想弄清楚是否有任何方法可以使用 SyntaxNet 进行语料库的名称实体识别。任何示例代码或有用的链接将不胜感激。
不,我从未遇到过 use/require 解析命名实体识别 (NER) 的任何工具或方法。
尽管 NER 可能会从与解析树相关的功能中受益匪浅,但这是一种迂回的方式,因为与 NER 的一般实现相比,解析速度非常慢。这也是为什么在 NER 系统中甚至不使用词性标签作为特征的原因。
希望对您有所帮助。
我用过GATE,可以识别命名实体识别,不需要解析NER。尽管 SyntaxNet 中的词性标注器可以识别名词、名词修饰符等(这是用于指定名称实体不同角色的更强大的工具),但我不确定它在识别 NER 方面的执行速度有多快。
虽然 Syntaxnet 没有明确提供任何命名实体识别功能,但 Parsey McParseface 进行词性标记并将输出生成为 Co-NLL table。
任何专有名词都被标记为 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
[[ "" == "--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"
}
}
保存并关闭文件,return 到“/opt/tensorflow/models/syntaxnet”和 运行 syntaxnet/demo.sh,如 syntaxnet 教程中所述。完成后转到指定的输出文件夹,您应该有一个 co-nll 格式的 table。然后,您可以 运行 一个简单的迭代程序遍历每个条目并识别 pos 标签,并在此基础上尝试我建议的实体识别格式的变体。
希望对您有所帮助!
我正在努力理解和学习 SyntaxNet。我想弄清楚是否有任何方法可以使用 SyntaxNet 进行语料库的名称实体识别。任何示例代码或有用的链接将不胜感激。
不,我从未遇到过 use/require 解析命名实体识别 (NER) 的任何工具或方法。
尽管 NER 可能会从与解析树相关的功能中受益匪浅,但这是一种迂回的方式,因为与 NER 的一般实现相比,解析速度非常慢。这也是为什么在 NER 系统中甚至不使用词性标签作为特征的原因。
希望对您有所帮助。
我用过GATE,可以识别命名实体识别,不需要解析NER。尽管 SyntaxNet 中的词性标注器可以识别名词、名词修饰符等(这是用于指定名称实体不同角色的更强大的工具),但我不确定它在识别 NER 方面的执行速度有多快。
虽然 Syntaxnet 没有明确提供任何命名实体识别功能,但 Parsey McParseface 进行词性标记并将输出生成为 Co-NLL table。
任何专有名词都被标记为 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
[[ "" == "--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"
}
}
保存并关闭文件,return 到“/opt/tensorflow/models/syntaxnet”和 运行 syntaxnet/demo.sh,如 syntaxnet 教程中所述。完成后转到指定的输出文件夹,您应该有一个 co-nll 格式的 table。然后,您可以 运行 一个简单的迭代程序遍历每个条目并识别 pos 标签,并在此基础上尝试我建议的实体识别格式的变体。
希望对您有所帮助!