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

时间:2016-10-27 15:14:32

标签: python nlp spacy

spaCy使用词性标注TokenDocument的每个pos标签(两种不同格式,一种存储在pos_Token属性中tagtag_存储在.headdep属性中的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' 和{{1}中属性)。

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

tag_

其他......不是:

pos_

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

dep_,{{1}}和{{1}}属性的可能值是什么,它们是什么意思?

6 个答案:

答案 0 :(得分:63)

词性标记

spaCy文档目前声称:

  

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

更准确地说,.tag_属性公开了Treebank标记,pos_属性公开了基于Google Universal POS Tags的标记(尽管spaCy扩展了列表)。

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

  

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

也就是说,如果spaCy发布了针对新treebank训练的改进模型,则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

列表如下:

      
  • ADJ:形容词
  •   
  • ADP:adposition
  •   
  • ADV:副词
  •   
  • AUX:辅助动词
  •   
  • CONJ:协调会议
  •   
  • DET:determininer
  •   
  • INTJ:感叹词
  •   
  • NOUN:名词
  •   
  • NUM:数字
  •   
  • PART:particle
  •   
  • PRON:代词
  •   
  • PROPN:专有名词
  •   
  • PUNCT:标点符号
  •   
  • SCONJ:从属连接
  •   
  • SYM:symbol
  •   
  • VERB:动词
  •   
  • X:其他

但是,我们可以从spaCy的parts of speech模块中看到,它使用另外三个POS常量EOLNO_TAGSPACE来扩展此架构,不属于通用POS标签集。其中:

  • 来自searching the source code,我认为EOL根本不会被使用,但我不确定
  • NO_TAG是错误代码。如果您尝试使用未安装的模型解析句子,则会为所有Token分配此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
    
  • 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)
    

依赖性令牌

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

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

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

除了上述文档之外,如果您希望在真实句子中看到这些依赖项的一些示例,您可能会对2012年Jinho D. Choi的工作感兴趣:要么他的Optimization of Natural Language Processing Components for Robustness and Scalability或他的Guidelines for the CLEAR Style Constituent to Dependency Conversion(这似乎只是前一篇论文的一个小节)。两者都列出了2012年存在的所有CLEAR依赖标签以及定义和例句。 (不幸的是,CLEAR依赖标签的集合自2012年以来发生了一些变化,因此一些现代标签在Choi的工作中没有列出或示例 - 但它仍然是一个有用的资源,尽管有点过时。)

答案 1 :(得分:13)

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

spacy.explain('pobj')

将为您提供如下输出:

'object of preposition'

答案 2 :(得分:3)

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

为了说明,当您使用SpaCy解析句子“公交车往哪条路?”时,我们得到the following tree.

相比之下,如果您使用Stanford解析器,则会得到a much more deeply structured syntax tree.

答案 3 :(得分:3)

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

答案 4 :(得分:1)

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

如文档所示,它们的词性(POS)和依赖项标签具有针对不同语言的通用和特定变体,并且explain()函数是非常有用的快捷方式,可以更好地描述标签的没有文档的意思,例如

spacy.explain("VBD")

给出“动词,过去式”。

答案 5 :(得分:-1)

在最近将 Spacy 更新到 v3 之后。以上链接无效。您可以访问这些链接以获取完整列表 https://v2.spacy.io/api/annotation

通用 POS 标签 enter image description here

英文 POS 标签 enter image description here