spaCy 的词性标签和依赖标签是什么意思?
What do spaCy's part-of-speech and dependency tags mean?
spaCy 用词性标记 Document
中的每个 Token
(以两种不同的格式,一种存储在 pos
和 pos_
Token
和另一个存储在 tag
和 tag_
属性中的属性)以及对其 .head
标记的句法依赖性(存储在 dep
和 dep_
属性)。
其中一些标签是不言自明的,即使对于像我这样没有语言学背景的人也是如此:
>>> 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 maps all language-specific part-of-speech tags to a small, fixed set of word type tags following the Universal Dependencies scheme. The universal tags don’t code for any morphological features and only cover the word type. They’re available as the Token.pos
and Token.pos_
attributes.
至于 tag
属性,文档说:
The English part-of-speech tagger uses the OntoNotes 5 version of the Penn Treebank tag set. We also map the tags to the simpler Universal Dependencies v2 POS tag set.
和
The German part-of-speech tagger uses the TIGER Treebank annotation scheme. We also map the tags to the simpler Universal Dependencies v2 POS tag set.
因此,您可以选择是使用跨语言一致的粗粒度标记集 (.pos
),还是使用特定于特定语言的细粒度标记集 (.tag
)特定的树库,因此是特定的语言。
.pos_
标签列表
文档列出了以下用于 pos
和 pos_
属性的粗粒度标记:
ADJ
:形容词,例如大、老、绿、难懂、第一
ADP
: 附加词,例如在、到、期间
ADV
:副词,例如非常,明天,下,那里,那里
AUX
:辅助,例如is, has (done), will (do), should (do)
CONJ
:连词,例如和,或者,但是
CCONJ
:并列连词,例如和,或者,但是
DET
:限定符,例如一、一、那个
INTJ
:感叹词,例如嘘,哎哟,太棒了,你好
NOUN
:名词,例如女孩、猫、树、空气、美女
NUM
:数字,例如1, 2017, 一, 七十七, IV, MMXIV
PART
:粒子,例如的,不是,
PRON
:代词,例如我,你,他,她,我自己,他们自己,某人
PROPN
:专有名词,例如玛丽、约翰、伦敦、北约、HBO
PUNCT
:标点符号,例如., (, ), ?
SCONJ
:从属连词,例如如果,同时,那个
SYM
:符号,例如$, %, §, ©, +, −, ×, ÷, =, :),
VERB
:动词,例如运行, 运行s, 运行宁,吃,吃,吃
X
:其他,例如sfpksdpsxmsa
SPACE
:space,例如
请注意,当文档说这个列表遵循通用依赖方案时,他们有点撒谎;上面列出的两个标签不属于该方案。
其中之一是 CONJ
,它曾经存在于通用 POS 标签方案中,但自 spaCy 首次编写以来已分为 CCONJ
和 SCONJ
。根据文档中 tag->pos 的映射,spaCy 的当前模型似乎并没有实际使用 CONJ
,但出于某种原因它仍然存在于 spaCy 的代码和文档中——可能是向后兼容旧模型.
第二个是 SPACE
,它不是 Universal POS Tags 方案的一部分(据我所知从来没有)并且被 spaCy 用于除单个正常 ASCII 之外的任何间距 spaces(没有自己的令牌):
>>> document = en_nlp("This\nsentence\thas some weird spaces in\n\n\n\n\t\t it.")
>>> for token in document:
... print('%r (%s)' % (str(token), token.pos_))
...
'This' (DET)
'\n' (SPACE)
'sentence' (NOUN)
'\t' (SPACE)
'has' (VERB)
' ' (SPACE)
'some' (DET)
'weird' (ADJ)
'spaces' (NOUN)
'in' (ADP)
'\n\n\n\n\t\t ' (SPACE)
'it' (PRON)
'.' (PUNCT)
我将从这个答案中省略 .tag_
标签的完整列表(更细粒度的标签),因为它们数量众多,现在有据可查,英语和德语不同,可能更多可能会在版本之间发生变化。相反,请查看文档中的列表(例如 https://spacy.io/api/annotation#pos-en 用于英语),其中列出了每个可能的标签、它映射到的 .pos_
值以及其含义的描述。
依赖性令牌
现在有 三种 spaCy 用于依赖性标记的不同方案:one for English, one for German, and one for everything else。再一次,值列表非常庞大,我不会在这里完整地重现它。每个依赖项旁边都有一个简短的定义,但不幸的是,其中许多 - 如 "appositional modifier" 或 "clausal complement" - 是艺术术语,对于像我这样的日常程序员来说相当陌生。如果您不是语言学家,则只需研究这些艺术术语的含义即可理解它们。
不过,我至少可以为使用英文文本的人提供该研究的起点。如果您想在真实句子中查看一些 示例 的 CLEAR 依存关系(由英语模型使用),请查看 Jinho D. Choi 2012 年的作品:他的 Optimization of Natural Language Processing Components for Robustness and Scalability 或他的 CLEAR 样式指南
Constituent to Dependency Conversion(这似乎只是前一篇论文的一个小节)。两者都列出了 2012 年存在的所有 CLEAR 依存关系标签以及定义和例句。 (不幸的是,自 2012 年以来,CLEAR 依赖标签集发生了一些变化,因此 Choi 的作品中没有列出或举例说明一些现代标签——但它仍然是一个有用的资源,尽管有点过时了。)
目前,SpaCy 中的依存分析和标记似乎只在单词级别实现,而不是在短语(名词短语除外)或从句级别实现。这意味着 SpaCy 可用于识别名词(NN、NNS)、形容词(JJ、JJR、JJS)和动词(VB、VBD、VBG 等) .),但不是形容词短语 (ADJP)、状语短语 (ADVP) 或疑问句 (SBARQ、SQ)。
例如,当您使用 SpaCy 解析句子 "Which way is the bus going?" 时,我们得到 the following tree.
相比之下,如果您使用 Stanford 解析器,您会得到 a much more deeply structured syntax tree.
关于获取缩写形式的详细含义的快速提示。您可以使用 explain
方法,如下所示:
spacy.explain('pobj')
这会给你这样的输出:
'object of preposition'
官方文档现在在 https://spacy.io/api/annotation (and the list of other attributes for tokens can be found at https://spacy.io/api/token).
提供了所有这些注释的更多详细信息
如文档所示,它们的词性 (POS) 和依存关系标签针对不同语言具有通用和特定变体,explain()
函数是获得更好描述的非常有用的快捷方式没有文档的标签含义,例如
spacy.explain("VBD")
这给出 "verb, past tense".
直接链接(如果您不想通过无休止的 spacy 文档来获取完整的表格):
for .pos_(词性,英语):https://universaldependencies.org/docs/en/pos/
for .dep_(依赖关系,英文):https://universaldependencies.org/docs/en/dep/
在最近将 Spacy 更新到 v3 之后。上面的链接不起作用。您可以访问这些链接以获取完整列表
https://v2.spacy.io/api/annotation
通用 POS 标签
英文 POS 标签
spaCy 用词性标记 Document
中的每个 Token
(以两种不同的格式,一种存储在 pos
和 pos_
Token
和另一个存储在 tag
和 tag_
属性中的属性)以及对其 .head
标记的句法依赖性(存储在 dep
和 dep_
属性)。
其中一些标签是不言自明的,即使对于像我这样没有语言学背景的人也是如此:
>>> 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 maps all language-specific part-of-speech tags to a small, fixed set of word type tags following the Universal Dependencies scheme. The universal tags don’t code for any morphological features and only cover the word type. They’re available as the
Token.pos
andToken.pos_
attributes.
至于 tag
属性,文档说:
The English part-of-speech tagger uses the OntoNotes 5 version of the Penn Treebank tag set. We also map the tags to the simpler Universal Dependencies v2 POS tag set.
和
The German part-of-speech tagger uses the TIGER Treebank annotation scheme. We also map the tags to the simpler Universal Dependencies v2 POS tag set.
因此,您可以选择是使用跨语言一致的粗粒度标记集 (.pos
),还是使用特定于特定语言的细粒度标记集 (.tag
)特定的树库,因此是特定的语言。
.pos_
标签列表
文档列出了以下用于 pos
和 pos_
属性的粗粒度标记:
ADJ
:形容词,例如大、老、绿、难懂、第一ADP
: 附加词,例如在、到、期间ADV
:副词,例如非常,明天,下,那里,那里AUX
:辅助,例如is, has (done), will (do), should (do)CONJ
:连词,例如和,或者,但是CCONJ
:并列连词,例如和,或者,但是DET
:限定符,例如一、一、那个INTJ
:感叹词,例如嘘,哎哟,太棒了,你好NOUN
:名词,例如女孩、猫、树、空气、美女NUM
:数字,例如1, 2017, 一, 七十七, IV, MMXIVPART
:粒子,例如的,不是,PRON
:代词,例如我,你,他,她,我自己,他们自己,某人PROPN
:专有名词,例如玛丽、约翰、伦敦、北约、HBOPUNCT
:标点符号,例如., (, ), ?SCONJ
:从属连词,例如如果,同时,那个SYM
:符号,例如$, %, §, ©, +, −, ×, ÷, =, :),VERB
:动词,例如运行, 运行s, 运行宁,吃,吃,吃X
:其他,例如sfpksdpsxmsaSPACE
:space,例如
请注意,当文档说这个列表遵循通用依赖方案时,他们有点撒谎;上面列出的两个标签不属于该方案。
其中之一是 CONJ
,它曾经存在于通用 POS 标签方案中,但自 spaCy 首次编写以来已分为 CCONJ
和 SCONJ
。根据文档中 tag->pos 的映射,spaCy 的当前模型似乎并没有实际使用 CONJ
,但出于某种原因它仍然存在于 spaCy 的代码和文档中——可能是向后兼容旧模型.
第二个是 SPACE
,它不是 Universal POS Tags 方案的一部分(据我所知从来没有)并且被 spaCy 用于除单个正常 ASCII 之外的任何间距 spaces(没有自己的令牌):
>>> document = en_nlp("This\nsentence\thas some weird spaces in\n\n\n\n\t\t it.")
>>> for token in document:
... print('%r (%s)' % (str(token), token.pos_))
...
'This' (DET)
'\n' (SPACE)
'sentence' (NOUN)
'\t' (SPACE)
'has' (VERB)
' ' (SPACE)
'some' (DET)
'weird' (ADJ)
'spaces' (NOUN)
'in' (ADP)
'\n\n\n\n\t\t ' (SPACE)
'it' (PRON)
'.' (PUNCT)
我将从这个答案中省略 .tag_
标签的完整列表(更细粒度的标签),因为它们数量众多,现在有据可查,英语和德语不同,可能更多可能会在版本之间发生变化。相反,请查看文档中的列表(例如 https://spacy.io/api/annotation#pos-en 用于英语),其中列出了每个可能的标签、它映射到的 .pos_
值以及其含义的描述。
依赖性令牌
现在有 三种 spaCy 用于依赖性标记的不同方案:one for English, one for German, and one for everything else。再一次,值列表非常庞大,我不会在这里完整地重现它。每个依赖项旁边都有一个简短的定义,但不幸的是,其中许多 - 如 "appositional modifier" 或 "clausal complement" - 是艺术术语,对于像我这样的日常程序员来说相当陌生。如果您不是语言学家,则只需研究这些艺术术语的含义即可理解它们。
不过,我至少可以为使用英文文本的人提供该研究的起点。如果您想在真实句子中查看一些 示例 的 CLEAR 依存关系(由英语模型使用),请查看 Jinho D. Choi 2012 年的作品:他的 Optimization of Natural Language Processing Components for Robustness and Scalability 或他的 CLEAR 样式指南 Constituent to Dependency Conversion(这似乎只是前一篇论文的一个小节)。两者都列出了 2012 年存在的所有 CLEAR 依存关系标签以及定义和例句。 (不幸的是,自 2012 年以来,CLEAR 依赖标签集发生了一些变化,因此 Choi 的作品中没有列出或举例说明一些现代标签——但它仍然是一个有用的资源,尽管有点过时了。)
目前,SpaCy 中的依存分析和标记似乎只在单词级别实现,而不是在短语(名词短语除外)或从句级别实现。这意味着 SpaCy 可用于识别名词(NN、NNS)、形容词(JJ、JJR、JJS)和动词(VB、VBD、VBG 等) .),但不是形容词短语 (ADJP)、状语短语 (ADVP) 或疑问句 (SBARQ、SQ)。
例如,当您使用 SpaCy 解析句子 "Which way is the bus going?" 时,我们得到 the following tree.
相比之下,如果您使用 Stanford 解析器,您会得到 a much more deeply structured syntax tree.
关于获取缩写形式的详细含义的快速提示。您可以使用 explain
方法,如下所示:
spacy.explain('pobj')
这会给你这样的输出:
'object of preposition'
官方文档现在在 https://spacy.io/api/annotation (and the list of other attributes for tokens can be found at https://spacy.io/api/token).
提供了所有这些注释的更多详细信息如文档所示,它们的词性 (POS) 和依存关系标签针对不同语言具有通用和特定变体,explain()
函数是获得更好描述的非常有用的快捷方式没有文档的标签含义,例如
spacy.explain("VBD")
这给出 "verb, past tense".
直接链接(如果您不想通过无休止的 spacy 文档来获取完整的表格):
for .pos_(词性,英语):https://universaldependencies.org/docs/en/pos/
for .dep_(依赖关系,英文):https://universaldependencies.org/docs/en/dep/
在最近将 Spacy 更新到 v3 之后。上面的链接不起作用。您可以访问这些链接以获取完整列表 https://v2.spacy.io/api/annotation
通用 POS 标签
英文 POS 标签