57

spaCy 用词性(以两种不同的格式,一个存储在 the 的and属性中,另一个存储在and属性中)和对其标记的句法依赖性(存储在and属性中)标记Tokena 中的每个 s )。Documentpospos_Tokentagtag_.headdepdep_

其中一些标签是不言自明的,即使对于像我这样没有语言学背景的人来说也是如此:

>>> 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'

更糟糕的是,官方文档甚至不包含大多数这些属性的可能标签列表,也不包含其中任何一个的含义。他们有时会提到他们使用的标记化标准,但这些说法目前并不完全准确,而且这些标准很难追踪。

tag_pos_和属性的可能值是dep_什么,它们的含义是什么?

4

6 回答 6

102

tl;博士回答

只需在以下位置展开列表:

更长的答案

自从我第一次问这个问题以来,文档有了很大的改进,而 spaCy 现在记录得更好。

词性标签

和属性列表在https://spacy.io/api/annotation#pos-taggingpos ,并描述了这些值列表的来源。在本次(2020 年 1 月)编辑时,文档称该属性为:tagpos

spaCy 将所有特定于语言的词性标签映射到遵循Universal Dependencies 方案的一小部分固定的单词类型标签。通用标签不针对任何形态特征进行编码,仅涵盖单词类型。它们可用作Token.posToken.pos_属性。

至于tag属性,文档说:

英语词性标注器使用OntoNotes 5版本的 Penn Treebank 标注集。我们还将标签映射到更简单的 Universal Dependencies v2 POS 标签集。

德语词性标注器使用TIGER Treebank注释方案。我们还将标签映射到更简单的 Universal Dependencies v2 POS 标签集。

因此,您可以选择使用跨语言一致的.pos粗粒度标记集(.tag

.pos_标签列表

pos文档列出了以下用于和pos_属性的粗粒度标签:

  • ADJ: 形容词,例如大的、老的、绿色的、难以理解的、第一个
  • ADP: 附加,例如,在,到,在
  • ADV: 副词,例如非常、明天、下来、哪里、那里
  • AUX: 辅助,例如 is,has (done),will (do),should (do)
  • CONJ: 连词,例如and,or,but
  • CCONJ: 并列连词,例如 and, or, but
  • DET: 限定词,例如 a, an, the
  • INTJ: 感叹词,例如 psst, ouch, bravo, hello
  • NOUN: 名词,例如女孩、猫、树、空气、美女
  • NUM: 数字,例如 1, 2017, 一, 七十七, IV, MMXIV
  • PART:粒子,例如's,not,
  • PRON: 代词,例如我、你、他、她、我自己、他们自己、某人
  • PROPN: 专有名词,例如 Mary, John, London, NATO, HBO
  • PUNCT: 标点符号,例如., (, ), ?
  • SCONJ: 从属连词,例如 if, while, that
  • SYM: 符号,例如 $、%、§、©、+、-、×、÷、=、:)、
  • VERB: 动词,如跑、跑、跑、吃、吃、吃
  • X: 其他,例如 sfpksdpsxmsa
  • SPACE: 空间,例如

请注意,当他们说这个列表遵循通用依赖方案时,文档有点撒谎;上面列出了两个不属于该方案的标签。

其中之一是,它曾经存在于 Universal POS Tags 方案中,但自从 spaCy 首次编写以来CONJ已被拆分。根据文档中 tag->pos 的映射,看起来 spaCy 的当前模型实际上并没有使用,但由于某种原因它仍然存在于 spaCy 的代码和文档中——也许是与旧模型的向后兼容性。CCONJSCONJCONJ

第二个是SPACE,它不是通用 POS 标签方案的一部分(据我所知,从来没有)并且被 spaCy 用于除了单个普通 ASCII 空格(没有自己的令牌)之外的任何间距:

>>> 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 使用三种不同的方案来进行依赖标记:一种用于 English一种用于 German一种用于其他所有内容。再一次,值列表是巨大的,我不会在这里完整地复制它。每个依赖项旁边都有一个简短的定义,但不幸的是,它们中的许多——比如“同位修饰符”或“从句补语”——对于像我这样的日常程序员来说是相当陌生的艺术术语。如果您不是语言学家,您只需研究这些艺术术语的含义即可理解它们。

不过,我至少可以为使用英文文本的人提供该研究的起点。如果您想查看真实句子中 CLEAR 依赖项(由英语模型使用)的一些示例,请查看 Jinho D. Choi 的 2012 年工作:他的优化自然语言处理组件以实现鲁棒性和可扩展性或他的指南用于 CLEAR 样式成分到依赖项的转换(这似乎只是前一篇论文的一个小节)。两者都列出了 2012 年存在的所有 CLEAR 依赖标签以及定义和例句。(不幸的是,自 2012 年以来,CLEAR 依赖标签集发生了一些变化,因此某些现代标签并未在 Choi 的作品中列出或举例说明 - 但尽管有些过时,但它仍然是一个有用的资源。)

于 2016-10-27T15:14:32.173 回答
40

只是关于获取简短形式的详细含义的快速提示。您可以使用explain如下方法:

spacy.explain('pobj')

这将为您提供如下输出:

'object of preposition'
于 2018-01-08T03:17:42.787 回答
9

官方文档现在在https://spacy.io/api/annotation提供了所有这些注释的更多详细信息(令牌的其他属性列表可以在https://spacy.io/api/token找到)。

如文档所示,它们的词性 (POS) 和依赖标签具有针对不同语言的通用和特定变体,该explain()功能是一个非常有用的快捷方式,可以在没有文档的情况下更好地描述标签的含义,例如

spacy.explain("VBD")

这给出了“动词,过去时”。

于 2018-08-28T12:08:51.213 回答
5

直接链接(如果您不想通过无休止的 spacy 文档来获取完整的表格):

于 2021-02-25T13:16:59.957 回答
4

Spacy 最近更新到 v3 之后。上面的链接不起作用。您可以访问这些链接以获取完整列表 https://v2.spacy.io/api/annotation

通用 POS 标签 在此处输入图像描述

英文POS标签 在此处输入图像描述

于 2021-07-13T15:58:33.367 回答
2

目前,SpaCy 中的依赖解析和标记似乎仅在单词级别实现,而不是在短语(名词短语除外)或从句级别实现。这意味着 SpaCy 可用于识别名词(NN、NNS)、形容词(JJ、JJR、JJS)和动词(VB、VBD、VBG 等),但不能用于识别形容词短语 (ADJP)、副词短语 ( ADVP)或问题(SBARQ、SQ)。

为了说明,当你使用 SpaCy 解析句子“Which way is the bus going?”时,我们得到以下树。

相比之下,如果你使用斯坦福解析器,你会得到一个结构更深的语法树。

于 2017-12-07T17:50:31.903 回答