使用Syntaxnet命名实体识别

时间:2016-06-29 20:55:54

标签: nlp tensorflow syntaxnet

我正在努力理解和学习SyntaxNet。我试图弄清楚是否有任何方法可以使用SyntaxNet进行语料库的名称实体识别。任何示例代码或有用的链接将不胜感激。

3 个答案:

答案 0 :(得分:4)

虽然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 / demo.sh。完成后转到指定的输出文件夹,您应该有一个co-nll格式的表。然后,您可以运行一个简单的迭代程序,遍历每个条目并识别pos标签,并基于此可以尝试我建议的实体识别格式的变体。

希望这有帮助!

答案 1 :(得分:1)

不,我从未遇到任何使用/要求解析命名实体识别(NER)的工具或方法。

虽然NER可能会从与解析树相关的功能中获益,但它的迂回方式是这样做的,因为与NER的一般实现相比,解析非常慢。这也是甚至部分语音标签不用作NER系统中的功能的原因。

希望这有帮助。

答案 2 :(得分:1)

我使用GATE能够识别命名实体识别,并且不需要解析NER。尽管SyntaxNet中的词性标注器可以识别名词,名词修饰符等(这是用于指定名称实体的不同角色的更强大的工具),但我不确定它在识别NER方面的执行速度有多快。