1

目标是在另一个数据集上训练BERT SRL 。根据配置,需要conll-formatted-ontonotes-5.0

本机,我的数据采用 CoNLL 格式,我将其转换为 OntoNotes v.5.0 的 GitHub 版的conll-formatted-ontonotes-5.0 格式。读取数据工作和训练似乎工作,除了精度保持在 0。我怀疑 SRL 参数的编码(BOI 或短语?)或列结构(CoNLL 格式的其他 OntoNotes 版本在这里不同)与预期不同输入。或者,如果角色标签在代码中是硬连线的,则可能会出现错误。我在使用长格式( )时遵循了参考数据,但您经常在其他数据中ARGM-TMP看到短格式( )。AM-TMP

问题是这里需要哪种数据集和格式。我猜它是 OntoNotes 5.0 的 CoNLL/Skel 格式之一,带有恢复的 WORD 列,但是

  • CoNLL 版本似乎没有随OntoNotes 的 LDC 版本一起提供

  • 它似乎不是OntoNotes 创建者提供的GitHub 上OntoNotes v.5.0 的“conll-formatted-ontonotes-5.0”版本的格式。

  • 作为 PropBank 的一部分,至少还有一个其他 CoNLL/Skel 版本的 OntoNotes 5.0数据。这与另一个不同之处在于省略了 3 列和谓词的编码。(对于我的部分数据,这是本机格式。)

  • SrlReader文档提到了 BIO ( IOBES ) 编码。这确实已在 PropBank 数据的其他 CoNLL 版本中使用,但上述 OntoNotes 语料库中未使用。其他此类格式例如是 CoNLL-2008 和 CoNLL-2009 格式以及不同的变体。

在我开始对 SrlReader 进行逆向工程之前,是否有人手头有数据片段以便我可以相应地准备我的数据?

conll-formatted-ontonotes-5.0我的数据版本(来自 EWT 语料库的样本):

google/ewt/answers/00/20070404104007AAY1Chs_ans.xml 0   0   where   WRB (TOP(S(SBARQ(WHADVP*)   -   -   -   -   *   (ARGM-LOC*) *   *   -
google/ewt/answers/00/20070404104007AAY1Chs_ans.xml 0   1   can MD  (SQ*    -   -   -   -   *   (ARGM-MOD*) *   *   -
google/ewt/answers/00/20070404104007AAY1Chs_ans.xml 0   2   I   PRP (NP*)   -   -   -   -   *   (ARG0*) *   *   -
google/ewt/answers/00/20070404104007AAY1Chs_ans.xml 0   3   get VB  (VP*    get 01  -   -   *   (V*)    *   *   -
google/ewt/answers/00/20070404104007AAY1Chs_ans.xml 0   4   morcillas   NNS (NP*)   -   -   -   -   *   (ARG1*) *   *   -
4

1 回答 1

0

“本机”格式是 CoNLL-2012 版本下的一种,请参阅 cemantix.org/conll/2012/data.html 如何创建它。

然而,读取它的 Ontonotes 类在解析“本机”CoNLL-2012 数据时可能会遇到困难,因为 CoNLL-2012 预处理脚本会导致无效的解析树。用NLTK解析自然会导致ValueError比如

ValueError: Tree.read(): expected ')' but got 'end-of-string'
            at index 1427.
                "...LT#.#.) ))"

在数据层面没有直接的方法来解决这个问题,因为被解析的字符串是一个中间表示,而不是原始数据。如果要处理 CoNLL-2012 数据,则必须捕获 ValueError,参见。https://github.com/allenai/allennlp/issues/5410

于 2021-09-15T16:27:04.047 回答