spaCy使用词性标注Token
中Document
的每个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'
和{{1}中属性)。
其中一些标签是不言自明的,即使是像我这样没有语言背景的人:
tag_
其他......不是:
pos_
更糟糕的是,official docs甚至不包含大多数这些属性的可能标记列表,也不包含其中任何属性的含义。他们有时会提到他们使用的标记化标准,但这些声明目前还不完全准确,而且标准很难追踪。
dep_
,{{1}}和{{1}}属性的可能值是什么,它们是什么意思?
答案 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常量EOL
,NO_TAG
和SPACE
来扩展此架构,不属于通用POS标签集。其中:
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)
直接链接(如果您不想通过无休止的冗长文档获取完整表格):
对于 .pos_(词性,英语):https://universaldependencies.org/docs/en/pos/
对于 .dep_(依赖关系,英语):https://universaldependencies.org/docs/en/dep/
答案 4 :(得分:1)
官方文档现在在https://spacy.io/api/annotation上提供了所有这些注释的更多详细信息(令牌的其他属性列表可以在https://spacy.io/api/token上找到)。
如文档所示,它们的词性(POS)和依赖项标签具有针对不同语言的通用和特定变体,并且explain()
函数是非常有用的快捷方式,可以更好地描述标签的没有文档的意思,例如
spacy.explain("VBD")
给出“动词,过去式”。
答案 5 :(得分:-1)