spaCy的词性和依赖标记是什么意思?

Mar*_*ery 32 python nlp spacy

spaCy 用一个词性标记每个Tokens中的每个s Document(以两种不同的格式,一种存储在posand和pos_属性中Token,另一种存储在tagtag_属性中)以及对其.head标记的语法依赖(存储在depdep_属性中) ).

其中一些标签是不言自明的,即使是像我这样没有语言学背景的人:

>>> 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'
Run Code Online (Sandbox Code Playgroud)

其他......不是:

>>> document[1].tag_
'VBD'
>>> document[2].pos_
'DET'
>>> document[3].dep_
'dobj'
Run Code Online (Sandbox Code Playgroud)

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

什么是可能的值tag_,pos_dep_性质,以及它们意味着什么?

Mar*_*ery 74

部分演讲代币

spaCy文档目前声称:

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

更确切地说,该.tag_属性公开了Treebank标签,并且该pos_属性公开了基于Google Universal POS标签的标签(尽管spaCy扩展了列表).

spaCy的文档似乎建议那些只想愚蠢地使用其结果而不是训练他们自己的模型的用户应该忽略该tag_属性并仅使用pos_一个属性,说明tag_属性......

主要是为后续模型设计好的功能,特别是语法分析器.它们依赖于语言和树库.

也就是说,如果spaCy发布了在新树库上训练的改进模型,则该tag_属性可能具有与之前相同的值.这显然使那些希望在版本升级之间获得一致API的用户无益.但是,由于当前标签是Penn Treebank的变体,因此它们很可能与任何Penn Treebank POS标签文档中描述的集合相交,如:http://web.mit.edu/6.863/www/PennTreebankTags. HTML

更有用的pos_标签

粗粒度,不太详细的标记,表示令牌的单词类

基于Google Universal POS标签集.对于英语,可以在此处找到通用POS标签集中的标签列表,其中包含指向其定义的链接:http://universaldependencies.org/en/pos/index.html

清单如下:

但是,我们可以从spaCy的词性模块中看到它扩展了这个模式,增加了三个额外的POS常量EOL,NO_TAG并且SPACE它们不是通用POS标记集的一部分.这些:

  • 搜索源代码开始,我认为根本不会EOL使用它,虽然我不确定
  • NO_TAG是一个错误代码.如果您尝试使用未安装的模型解析句子,则会为所有Tokens分配此POS.例如,我没有安装spaCy的德国模型,如果我尝试使用它,我会在本地看到这个:

    >>> import spacy
    >>> de_nlp = spacy.load('de')
    >>> document = de_nlp('Ich habe meine Lederhosen verloren')
    >>> document[0]
    Ich
    >>> document[0].pos_
    ''
    >>> document[0].pos
    0
    >>> document[0].pos == spacy.parts_of_speech.NO_TAG
    True
    >>> document[1].pos == spacy.parts_of_speech.NO_TAG
    True
    >>> document[2].pos == spacy.parts_of_speech.NO_TAG
    True
    
    Run Code Online (Sandbox Code Playgroud)
  • SPACE 除了单个普通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)
    
    Run Code Online (Sandbox Code Playgroud)

依赖令牌

如文档中所述,依赖标记方案基于ClearNLP项目; 标签的含义(截至2015年发布的ClearNLP版本3.2.0,仍然是最新版本,似乎是spaCy使用的版本)可以在https://github.com/clir/clearnlp-guidelines/找到blob/master/md/specifications/dependency_labels.md.该文档列出了这些令牌:

  • ACL:名词的克劳斯修饰语
  • ACOMP:形容词补语
  • ADVCL:状语从句修饰语
  • ADVMOD:状语修饰语
  • AGENT:代理人
  • AMOD:形容词修饰语
  • APPOS:Appositional修饰符
  • ATTR:属性
  • AUX:辅助
  • AUXPASS:辅助(被动)
  • CASE:案例标记
  • CC: 并列连词
  • CCOMP:克劳斯补充
  • COMPOUND:复合改性剂
  • CONJ:Conjunct
  • CSUBJ:克劳斯主题
  • CSUBJPASS:克劳斯主题(被动)
  • DATIVE:Dative
  • DEP:未分类的依赖
  • DET:确定者
  • DOBJ: 直接宾语
  • EXPL:脾气暴躁
  • INTJ:感叹词
  • MARK:标记
  • META:Meta修饰符
  • NEG:否定修饰符
  • NOUNMOD:名义修饰符
  • NPMOD:名词短语作为状语修饰语
  • NSUBJ:名义主题
  • NSUBJPASS:名义主题(被动)
  • NUMMOD:数字修饰符
  • OPRD:对象谓词
  • PARATAXIS:Parataxis
  • PCOMP:介词的补充
  • POBJ:介词对象
  • POSS:占有修正
  • PRECONJ:预先相关联合
  • PREDET:预先确定者
  • PREP:介词修饰语
  • PRT:粒子
  • PUNCT:标点符号
  • QUANTMOD:量词的修饰符
  • RELCL:相对子句修饰符
  • ROOT: 根
  • XCOMP:公开条款补语

链接的ClearNLP文档还包含上述每个术语含义的简要说明.

除了上述文档之外,如果您希望在真实句子中看到这些依赖关系的一些示例,您可能会对2012年Jinho D. Choi的工作感兴趣:要么他的自然语言处理组件的优化性能和可扩展性,要么他的清除风格成分到依赖性转换的指导原则(这似乎只是前一篇论文的一个小节).两者都列出了2012年存在的所有CLEAR依赖标签以及定义和例句.(不幸的是,CLEAR依赖标签的集合自2012年以来发生了一些变化,因此一些现代标签没有在Choi的工作中列出或示例 - 但它仍然是一个有用的资源,尽管有点过时.)

  • 理解依赖标签的另一个很好的参考是斯坦福依赖手册:https://nlp.stanford.edu/software/dependency_manual.pdf (3认同)
  • 标签的文档已移至单个模型“标签”部分,例如:https://spacy.io/models/en#en_core_web_trf-labels (2认同)
  • @VMAtm 谢谢!答案确实应该被编辑以显示这种变化,我想我正在疯狂地试图找到标签列表等。 (2认同)

Nuh*_*hdy 21

关于获得简短形式的细节含义的快速提示.您可以使用explain以下方法:

spacy.explain('pobj')
Run Code Online (Sandbox Code Playgroud)

这会给你输出像:

'object of preposition'
Run Code Online (Sandbox Code Playgroud)

  • 现在我的自我回答(再次)已经过时了,这可以说是页面上的最佳答案。如果其他人愿意的话,我会将其留给其他人来编译最新的标签和定义列表,但是即使标签列表发生变化,这个答案至少应该仍然有价值。 (2认同)

Ovi*_*rea 9

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


Sam*_*ual 9

最近将 Spacy 更新到 v3 后,上述链接不起作用。

您可以访问此链接以获取完整列表。

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

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


Sil*_*eri 5

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

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

spacy.explain("VBD")
Run Code Online (Sandbox Code Playgroud)

给出“动词,过去式”。