将OntoNotes 5.0转换为UD格式的当前最佳实践是什么?
我没有找到任何关于这个问题的文档或问题,如果已经问过了,抱歉。
我使用了this中EWT转换的描述作为基本指导。
有多个预处理器:
edu.stanford.nlp.trees.treebank.OntoNotesUDUpdater
它似乎过滤了许多错误的句子(大约17k)。
- 此外,我还在
edu.stanford.nlp.trees.Treebanks
中找到了一个用于纠正宾州树库的常见工具。
在OntoNotesUDUpdater
之后调用这个函数有意义吗?
- 还有其他的东西吗?
之后,我应用了:
edu.stanford.nlp.trees.ud.UniversalDependenciesConverter
edu.stanford.nlp.trees.ud.UniversalDependenciesFeatureAnnotator
然后填充以下字段:FORM, LEMMA, UPOSTAG, FEATS, HEAD, DEPREL。我没有找到一个工具可以将原始句子文本添加到最终CoNLLu文件中,以及有关标记间距的信息。对于这些有什么建议吗?我找到了scripts,它们被用来将SpaceAfter
添加到EWT中,但似乎不能应用于OntoNotes。
后处理:
- 有
UniversalEnhancer
,可以用于任何语言。我可以在这个工具中使用预训练的fasttext嵌入吗?
还是我需要一些特殊的嵌入?
- 还有其他的东西吗?
脚本示例:
#!/usr/bin/env bash
convert (){
local fname="$1"
local part=${fname#onto.}
for f in $(<$fname) ; do
rm -f onto_fixed temp_tree temp_ud
if [ -n "$MK_CRCT" ]; then
java -cp "$CORENLP_HOME/*" -mx5g edu.stanford.nlp.trees.treebank.OntoNotesUDUpdater \
$f > onto_fixed 2>> "$OUT_DIR"/fixer.log
f=onto_fixed
fi
java -cp "$CORENLP_HOME/*" -mx5g edu.stanford.nlp.trees.Treebanks \
-correct -pennPrint $f \
> temp_tree 2>> "$OUT_DIR"/correct.log
java -cp "$CORENLP_HOME/*" -mx5g edu.stanford.nlp.trees.ud.UniversalDependenciesConverter \
-outputRepresentation enhanced++ -treeFile temp_tree \
> temp_ud 2>> "$OUT_DIR"/convert-1.log
java -cp "$CORENLP_HOME/*" -mx5g edu.stanford.nlp.trees.ud.UniversalDependenciesFeatureAnnotator \
temp_ud temp_tree \
>> "$OUT_DIR"/$part.conllu 2>> "$OUT_DIR"/convert-2.log
done
# see https://github.com/stanfordnlp/CoreNLP/issues/1132
java -cp "$CORENLP_HOME/*" -mx5g edu.stanford.nlp.trees.ud.UniversalEnhancer \
-conlluFile "$OUT_DIR"/$part.conllu \
-relativePronouns "that|which|who|whom|whose|where|That|Which|Who|Whom|Whose|Where" \
> "$OUT_DIR"/$part.conllu.enhanced 2> "$OUT_DIR"/enhance.log
rm "$OUT_DIR"/$part.conllu && mv "$OUT_DIR"/$part.conllu.enhanced "$OUT_DIR"/$part.conllu
}
[ -z "$ONTO_DIR" ] && ONTO_DIR="/path/to/onto"
[ -z "$CORENLP_HOME" ] && CORENLP_HOME="/path/to/corenlp"
OUT_DIR="$1"
if [ -z "$OUT_DIR" ]; then
echo "Pass out_dir as first argument"
exit 3
fi
mkdir -p "$OUT_DIR"
#creaet abs path
OUT_DIR=$(cd "$1"; pwd)
rm -f "$OUT_DIR"/*.conllu
MK_CRCT="$2"
echo "Convert to $OUT_DIR with MK_CRCT=$MK_CRCT"
pushd "$ONTO_DIR"/data/files/data/english/annotations
find . -name *.parse > onto
java -cp "$CORENLP_HOME/*" -mx5g edu.stanford.nlp.parser.tools.OntoNotesFilePreparation onto
convert onto.train
convert onto.dev
convert onto.test
popd
3条答案
按热度按时间niwlg2el1#
PTB纠错器仅适用于PTB,不适用于OntoNotes。您可以始终尝试对这两行进行差异化处理,以查看是否存在任何差异,如果有,是否是有益的差异。在某些情况下,纠正的错误可能是普遍的,而在其他情况下,它们非常具体地针对了被标记错误的PTB树。我不认为有一种方法可以包含任何有用的元数据,如句子编号、原始文本等。我不认为能够以确保正确的方式提取SpaceAfter,因为在文本被分词并转换为树时,空间信息丢失了,但您可能可以用一些通用的启发式方法得到大部分结果。当然,没有这些,原始文本注解也不会正确。如果您不提供任何嵌入,它应该可以正常工作。它也应该与您提供的任何嵌入一起正常工作。需要注意的一件事是,UD EWT数据集中的词形还原已经有很多更新。考虑到这一点,您可能希望在假设它们正确之前,回顾一下这个过程产生的一些词形还原。理想情况下,词形还原器应该包括一些这些词形还原修复,但到目前为止还没有发生这种情况
eblbsuwk2#
感谢您的回复!我看到了UD EWT中的这些巨大变化。我想这可能是通过一些bash和手动检查完成的。我们可以尝试复制这些更正,但考虑到Ontonotes的大小,这可能会有点困难。
理想情况下,词形还原器应该包含一些这些词形修复
那将太棒了!
pw136qt23#
我随后更新了词形还原器,以纳入EWT中的许多修复,尽管它仍然不是100%相同。