CoreNLP 问题:将OntoNotes转换为UD的最佳实践

lawou6xi  于 2个月前  发布在  其他
关注(0)|答案(3)|浏览(43)

将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
niwlg2el

niwlg2el1#

PTB纠错器仅适用于PTB,不适用于OntoNotes。您可以始终尝试对这两行进行差异化处理,以查看是否存在任何差异,如果有,是否是有益的差异。在某些情况下,纠正的错误可能是普遍的,而在其他情况下,它们非常具体地针对了被标记错误的PTB树。我不认为有一种方法可以包含任何有用的元数据,如句子编号、原始文本等。我不认为能够以确保正确的方式提取SpaceAfter,因为在文本被分词并转换为树时,空间信息丢失了,但您可能可以用一些通用的启发式方法得到大部分结果。当然,没有这些,原始文本注解也不会正确。如果您不提供任何嵌入,它应该可以正常工作。它也应该与您提供的任何嵌入一起正常工作。需要注意的一件事是,UD EWT数据集中的词形还原已经有很多更新。考虑到这一点,您可能希望在假设它们正确之前,回顾一下这个过程产生的一些词形还原。理想情况下,词形还原器应该包括一些这些词形还原修复,但到目前为止还没有发生这种情况

eblbsuwk

eblbsuwk2#

感谢您的回复!我看到了UD EWT中的这些巨大变化。我想这可能是通过一些bash和手动检查完成的。我们可以尝试复制这些更正,但考虑到Ontonotes的大小,这可能会有点困难。
理想情况下,词形还原器应该包含一些这些词形修复
那将太棒了!

pw136qt2

pw136qt23#

我随后更新了词形还原器,以纳入EWT中的许多修复,尽管它仍然不是100%相同。

相关问题