Spacy的词性和从属关系标签意味着什么? [英] What do spaCy's part-of-speech and dependency tags mean?
问题描述
用词性(以两种不同的格式,一种存储在Token
的pos
和pos_
属性中,另一种存储在tag
和tag_
属性中)及其.head
标记(存储在dep
和dep_
属性中)对Token
中的每个Token
进行空格标记。
其中一些标签不言而喻,甚至对像我这样没有语言学背景的人也是如此:
>>> import spacy
>>> en_nlp = spacy.load('en')
>>> document = en_nlp("I shot a man in Reno just to watch him die.")
>>> document[1]
shot
>>> document[1].pos_
'VERB'
其他人...不是:
>>> document[1].tag_
'VBD'
>>> document[2].pos_
'DET'
>>> document[3].dep_
'dobj'
更糟糕的是,official docs甚至没有包含这些属性中大多数可能的标记的列表,也没有任何这些属性的含义。他们有时会提到他们使用的标记化标准,但这些说法目前并不完全准确,最重要的是,这些标准很难追踪到。
tag_
、pos_
和dep_
属性的可能值是什么,它们的含义是什么?
推荐答案
tl;灾难恢复应答
只需在以下位置展开列表:
- https://spacy.io/api/annotation#pos-tagging(POS标签)和
- https://spacy.io/api/annotation#dependency-parsing(依赖标签)
较长的答案
自从我第一次问这个问题以来,文档有了很大改进,Spacy现在更好地记录了这一点。
词性标记
pos
和tag
属性在https://spacy.io/api/annotation#pos-tagging中列出,并说明了这些值列表的来源。在此(2020年1月)编辑时,文档称pos
属性为:
spacy将所有特定于语言的词性标记映射到Universal Dependencies scheme后面的一组固定的单词类型标记。通用标签不对任何形态特征进行编码,仅覆盖单词类型。它们作为
Token.pos
和Token.pos_
属性提供。
对于tag
属性,文档说:
英语词性标记器使用宾夕法尼亚Treebank标记集的OntoNotes 5版本。我们还将标记映射到更简单的通用依赖关系v2 POS标记集。
和
德语词性标记器使用TIGER Treebank注释方案。我们还将标记映射到更简单的通用依赖关系v2 POS标记集。
因此,您可以选择使用跨语言一致的粗粒度标记集(.pos
),或特定于特定树库的细粒度标记集(.tag
),从而特定于特定语言。
.pos_
标签列表
文档列出了用于pos
和pos_
属性的以下粗粒度标签:
ADJ
:形容词,如大、老、绿、看不懂、第一ADP
:形容词,如in、to、期间ADV
:副词,例如Very、Tomorrow、down、where、hereAUX
:助词,如is、has(Do)、will(Do)、will(Do)CONJ
:连词,如and、or、ButCCONJ
:并列连词,如and、or、ButDET
:限定词,如a、an、theINTJ
:感叹词,如:psst,哎呀,布拉沃,你好NOUN
:名词,例如女孩、猫、树、空气、美女NUM
:数字,如1、2017、1、77、IV、MMXIVPART
:助词,例如‘s,not,PRON
:代词,例如:I、You、He、She、Myself、Self、某人PROPN
:专有名词,例如Mary、John、London、NATO、HBOPUNCT
:标点符号,如,(,),?SCONJ
:从属连词,例如if、While、ThatSYM
:符号,如$、%、§、©、+、−、×、?、=、:)、😝VERB
:动词,例如run、runs、running、eat、ate、eatX
:其他,例如sfpksdpsxmsaSPACE
:空格,如
请注意,当文档说此列表遵循通用依赖关系方案时,他们有点撒谎;上面列出的两个标记不是该方案的一部分。
其中之一是CONJ
,它过去存在于通用POS标签方案中,但自Spacy首次编写以来已被拆分为CCONJ
和SCONJ
。根据文档中tag->pos的映射,似乎Spacy当前的模型实际上并没有使用CONJ
,但由于某种原因,它仍然存在于Spacy的代码和文档中--可能向后兼容旧模型。
第二个是SPACE
,它不是通用POS标签方案的一部分(据我所知,从来没有),Spacy使用它作为除单个普通ASCII空格之外的任何空格(它们没有自己的令牌):
>>> document = en_nlp("This
sentence has some weird spaces in
it.")
>>> for token in document:
... print('%r (%s)' % (str(token), token.pos_))
...
'This' (DET)
'
' (SPACE)
'sentence' (NOUN)
' ' (SPACE)
'has' (VERB)
' ' (SPACE)
'some' (DET)
'weird' (ADJ)
'spaces' (NOUN)
'in' (ADP)
'
' (SPACE)
'it' (PRON)
'.' (PUNCT)
我将从这个答案中省略.tag_
标记的完整列表(更细粒度的标记),因为它们很多,现在有很好的文档记录,英语和德语不同,而且可能更有可能在不同的版本之间发生变化。相反,请查看文档中的列表(例如https://spacy.io/api/annotation#pos-en对于英语),其中列出了每个可能的标记、它映射到的.pos_
值以及它的含义的描述。
依赖项令牌
现在有三种Spacy用于依赖项标记的方案:one for English、one for German和one for everything else。再说一次,价值观清单很大,我不会在这里完整地重复它。每个依赖项旁边都有一个简短的定义,但不幸的是,它们中的许多术语--如"同位修饰语"或"从句补语"--对于像我这样的日常程序员来说是相当陌生的。如果你不是语言学家,你只需研究这些艺术术语的含义就能理解它们。
不过,我至少可以为使用英文文本的人提供一个研究的起点。如果你想在真实的句子中看到一些明显的依赖关系的例子,请查阅一下崔进浩2012年的工作:他的Optimization of Natural Language Processing Components for Robustness and Scalability或他的指南中关于清晰的风格 依赖项转换的构成(这似乎只是前一篇文章的一个小节)。它们都列出了2012年存在的所有明确的依赖标签,以及定义和例句。(不幸的是,自2012年以来,这组清晰的依赖关系标签发生了一些变化,因此一些现代标签没有在Choi的工作中列出或举例说明-尽管有点过时,但它仍然是一个有用的资源。)这篇关于Spacy的词性和从属关系标签意味着什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!