我目前正在尝试学习Tensorflow,并且已经达到了我需要创建一些语料库数据集的程度。我没有钱在LDC注册Gigaword英语语料库,因此我正在寻找创建自己的刮刀。我从在线获得了一些文章,但现在想要以类似于LDC Gigaword示例的方式格式化它们:https://catalog.ldc.upenn.edu/desc/addenda/LDC2012T21.jpg
我正在尝试使用Parsey Mcparseface模型对我的输入进行POS标记并帮助我输出多个xml文件。我目前已经接近我想要的输出,使用python修改conll2tree.py文件和demo.sh文件,以允许我从单个文件读取我的输入。使用的命令行显示在本文的底部。
我想弄清楚的是如何让模型处理目录中的所有文件。我当前的刮刀是用JavaScript编写的,并输出单独的.json文件,其中包含一个带有标题,正文,图像等的json对象。我使用句子边界检测用逗号分隔每个句子,但似乎我对parsey的输入需要作为每个句子在不同行上的输入。我将在我的python脚本中修改它,但我仍然不知道如何配置下面的参数,以便我可以让它只是迭代每个文件,读入内容,处理并继续下一个文件。有没有为输入参数设置通配符的方法?或者我需要在我的python脚本中通过命令行单独发送每个文件?我只是假设,如果有一种方式可以让parsey模型或者SyntexNet批量处理它们,它可能会更快。
我遇到的另一个问题是,是否有办法让Parsey Mcparseface输出格式,如上图所示的“标题”所示:
(。(NP。(NNP.INTERNATIONAL)。(NNP.HEADLINE)。(NNP.NEWS)))
如果没有,这个格式是什么叫,所以我可以更多地了解如何通过代码自己做这个?让我失望的部分是NP的前缀数(假设名词短语)。
我已经设法将POS标签提取为类似于通过句子标记显示的图像中的格式,但我假设随着我对Tensorflow的深入了解,它们的格式化将会很好也显示在标题和文本字段标签中,因为它显示了更多的单词之间的关系。
PARSER_EVAL=bazel-bin/syntaxnet/parser_eval
MODEL_DIR=syntaxnet/models/parsey_mcparseface
[[ "$1" == "--conll" ]] && INPUT_FORMAT=stdin-conll || INPUT_FORMAT=stdin
#--input=testin \
#--input=$INPUT_FORMAT \
$PARSER_EVAL \
--input=testin \
--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=testout \
--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 \
| \
bazel-bin/syntaxnet/danspos \
--task_context=$MODEL_DIR/context.pbtxt \
--alsologtostderr
我还在content.pbtxt文件中添加了以下条目:
input {
name: 'testin'
record_format: 'english-text'
Part {
file_pattern: './testinp.txt'
}
}
input {
name: 'testout'
record_format: 'conll-sentence'
Part {
file_pattern: './testoutput.txt'
}
}