【问题标题】:What is CoNLL data format?什么是 CoNLL 数据格式?
【发布时间】:2022-02-24 00:49:57
【问题描述】:
我是文本挖掘的新手。我正在使用一个开源 jar (Mate Parser),它在依赖解析后以 CoNLL 2009 格式为我提供输出。我想将依赖解析结果用于信息提取。但我能够理解一些输出但无法理解 CoNLL 数据格式。任何人都可以帮助我了解 CoNLL 数据格式吗?任何类型的指针都将不胜感激。
【问题讨论】:
标签:
nlp
text-parsing
text-mining
information-extraction
【解决方案1】:
有许多不同的CoNLL 格式,因为 CoNLL 每年都是不同的共享任务。 CoNLL 2009 的格式描述为here。每行代表一个带有一系列制表符分隔字段的单词。 _s 表示空值。 Mate-Parser's manual 说它使用了 CoNLL 2009 的前 12 列:
ID FORM LEMMA PLEMMA POS PPOS FEAT PFEAT HEAD PHEAD DEPREL PDEPREL
其中一些列的定义来自早期的共享任务(2006 年和 2007 年使用的CoNLL-X format):
-
ID(句子中的索引,从 1 开始)
-
FORM(单词形式本身)
-
LEMMA(词的引理或词干)
-
POS(部分发言)
-
FEAT(由|分隔的形态特征列表)
-
HEAD(语法父级索引,ROOT 为 0)
-
DEPREL(HEAD和这个词的句法关系)
以P 开头的这些列的变体(例如PPOS 但不是POS)表明该值是自动预测的,而不是黄金标准值。
更新:现在还有一个 CoNLL-U 数据格式,它扩展了 CoNLL-X 格式。
【解决方案2】:
作为@dmcc 答案的更新:
- CoNLL 是 NLP 中 TSV 格式的常规名称(TSV - 制表符分隔值,即以
<TAB> 作为分隔符的 CSV)
- 它源自自然语言学习会议(因此得名)上组织的一系列共享任务
- 并非所有这些任务都使用“CoNLL”格式,有些任务使用 JSON 或 XML 格式
- 有一些独立于 CoNLL 开发的“CoNLL”格式,最著名的是 CoNLL-U
- CoNLL 格式在列的选择和顺序上有所不同
在 CoNLL 格式中,
- 每个单词(标记)都用一行表示。
- 每个句子都用空行隔开
- 每一列代表一个注释
- 句子中的每个单词都有相同的列数(在某些格式中:语料库中的每个单词都有相同的列数)
- 注解是关于特定单词的字符串值
- 跨越多个单词的注释有时会使用特殊符号,例如圆括号(表示短语的开头和结尾)或 IOBES 注释(例如,B-NP:NP 开头,I-NP:在中间of NP, E-NP: end of NP, S-NP: NP 在当前单词开始和结束, O: 没有NP注释)
- 某些 CoNLL 格式具有一列或多列数字标识符作为第一列,这些列之后的下一列(如果没有 ID,则为第一列)通常包含 WORD
- 句子中第一个单词的ID为1。如果没有提供ID列,则ID为句子中前面单词的个数加1。
- 在依存句法中,单词之间存在语法关系,依存物被标记为 HEAD(= 父单词的 ID)和 EDGE/DEP[endency](= 语法关系),都在单独的列中
- 如果依赖语法中的单词没有父级(即,它是语法根),则将其 HEAD 设置为 0
在使用声称支持(某些)“CoNLL 格式”的工具或库时要小心。不同的 CoNLL 格式具有不同的列顺序,开发人员可能没有意识到这一点。因此,如果它们从另一种(或未指定的)CoNLL 格式获取数据,它们可能无法按预期工作。
对于不同的 CoNLL 格式之间的转换,您可以考虑使用 CoNLL-RDF (https://github.com/acoli-repo/conll-rdf) 或 CoNLL-Transform (https://github.com/acoli-repo/conll-transform)(免责声明:由我的实验室开发。)