Que signifient les étiquettes "partie de la parole" et "dépendance" de spaCy?
spaCy marque chacun des Token
dans un Document
avec une partie de la parole (dans deux formats différents, un stocké dans les pos
et pos_
propriétés du Token
et l'autre stocké dans les tag
et tag_
propriétés) et une dépendance syntaxique à son token .head
(stocké dans le dep
et dep_
) " propriétés).
Certaines de ces balises sont explicites, même pour quelqu'un comme moi, sans une linguistique de fond:
>>> 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'
autres... ne sont pas:
>>> document[1].tag_
'VBD'
>>> document[2].pos_
'DET'
>>> document[3].dep_
'dobj'
pire, les documents officiels ne contiennent même pas une liste des étiquettes possibles pour la plupart de ces propriétés, ni la signification de l'un d'eux. Ils mentionnent parfois la norme de tokenisation qu'ils utilisent, mais ces allégations ne sont pas tout à fait exactes pour le moment et en plus de cela, les normes sont difficiles à retrouver.
Quelles sont les valeurs possibles des propriétés tag_
, pos_
, et dep_
, et que signifient-elles?
4 réponses
une Partie des jetons de la parole
La spaCy docs actuellement:
La part-of-speech tagger utilise le OntoNotes la version 5 de la Penn Treebank tag set. Nous mappons également les étiquettes à la plus simple Google Universal POS Tag set.
plus précisément, la propriété .tag_
expose les étiquettes des banques D'arbres, et la propriété pos_
expose les étiquettes basées sur le Google Universal POS Tags (bien que spaCy étende la liste).
spacy's docs semblent recommander que les utilisateurs qui veulent simplement utiliser ses résultats, plutôt que de former leurs propres modèles, devrait ignorer l'attribut tag_
et utiliser seulement le pos_
un, déclarant que les attributs tag_
...
sont principalement conçus pour être de bonnes caractéristiques pour les modèles suivants, en particulier la syntaxique analyseur. Ils sont dépendants de la langue et des banques d'arbres.
C'est-à-dire, si spaCy libère un modèle amélioré formé sur un nouveau treebank , l'attribut tag_
peut avoir des valeurs différentes de ce qu'il avait auparavant. Cela rend clairement cela inutile pour les utilisateurs qui veulent une API cohérente à travers les mises à jour de version. Cependant, puisque les étiquettes actuelles sont une variante de Penn Treebank, ils sont susceptibles de se croiser principalement avec l'ensemble décrit dans n'importe quelle documentation D'étiquette de point de vente de Penn Treebank, comme ceci: http://web.mit.edu/6.863/www/PennTreebankTags.html
les étiquettes plus utiles pos_
sont
étiquette à grain grossier, moins détaillée, qui représente la classe de mots du jeton
basé sur le jeu D'étiquettes Google Universal POS. Pour l'anglais, une liste des étiquettes dans le jeu D'étiquettes universel POS peut être trouvé ici, complet avec des liens à leurs définitions: http://universaldependencies.org/en/pos/index.html
La liste est la suivante:
-
ADJ
: adjectif -
ADP
: adposition -
ADV
: annonce -
AUX
: verbe auxiliaire -
CONJ
: coordination -
DET
: déterminant -
INTJ
: interjection -
NOUN
: nom -
NUM
: numéro -
PART
: particule -
PRON
: pronom -
PROPN
: nom propre 15191200920" -
PUNCT
: ponctuation -
SCONJ
: conjonction de subordination -
SYM
: symbole -
VERB
: verbe -
X
: autres
Cependant, nous pouvons voir de spacy's parties de la parole module qu'il étend ce schéma avec trois constantes POS supplémentaires, EOL
, NO_TAG
et SPACE
, qui ne font pas partie de L'universel POS Tag set. Dont:
- à Partir de recherche dans le code source , je ne pense pas que
EOL
utilisé à toutes, même si je ne suis pas sûr -
NO_TAG
est un code d'erreur. Si vous essayez d'analyser une phrase avec un modèle que vous n'avez pas installé, tous lesToken
se voient attribuer cette POS. Par exemple, je n'ai pas le modèle allemand de spaCy installé, et je le vois sur mon local si j'essaie de l'utiliser:>>> 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
est utilisé pour toute l'espacement d'ailleurs unique normale espaces ASCII (qui n'obtiennent pas leur propre jeton):>>> 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)
jetons de dépendance
comme indiqué dans le docs, le schéma d'étiquettes de dépendances est basé sur le projet ClearNLP; les significations des étiquettes (à partir de la version 3.2.0 de ClearNLP, publiée en 2015, qui reste la dernière version et semble être ce que spaCy utilise) peut être trouvé à https://github.com/clir/clearnlp-guidelines/blob/master/md/specifications/dependency_labels.md . Ce document liste ces jetons:
-
ACL
: Clausal modificateur de nom -
ACOMP
: adjectif complement -
ADVCL
: modificateur de clause Adverbial -
ADVMOD
: Adverbe modificateur -
AGENT
: Agent -
AMOD
: adjectif modificateur -
APPOS
: modificateur Appositionnel -
ATTR
: attribut -
AUX
: auxiliaire -
AUXPASS
: auxiliaire (passif) -
CASE
: Cas du marqueur -
CC
: coordination -
CCOMP
: complément Clausal -
COMPOUND
: modificateur composé -
CONJ
: la Conjonction -
CSUBJ
: Clausal sujet -
CSUBJPASS
: Clausal sujet (passive) -
DATIVE
: Datif -
DEP
: personnes dépendantes non classées -
DET
: Déterminant -
DOBJ
: Objet Direct -
EXPL
: explicatif -
INTJ
: Interjection -
MARK
: marqueur -
META
: le modificateur Meta -
NEG
: modificateur de négation -
NOUNMOD
: modificateur du nominal -
NPMOD
: Syntagme comme modificateur adverbial -
NSUBJ
: sujet Nominal -
NSUBJPASS
: sujet Nominal (passif) -
NUMMOD
: numéro modificateur -
OPRD
: objet prédicat -
PARATAXIS
: Parataxis -
PCOMP
: complément de préposition -
POBJ
: objet de la préposition -
POSS
: Modificateur de Possession -
PRECONJ
: conjonction pré-corrélative -
PREDET
: Pré-déterminant -
PREP
: modificateur prépositionnel -
PRT
: Particule -
PUNCT
: Ponctuation -
QUANTMOD
: modificateur de quantifier15191200920" -
RELCL
: modificateur de clause Relative -
ROOT
: la Racine -
XCOMP
: Ouvert clausal complément
la documentation clearnlp liée contient également de brèves descriptions de ce que chacun des termes ci-dessus signifie.
en plus de la documentation ci-dessus, si vous souhaitez voir quelques exemples de ces dépendances en phrases réelles, vous pouvez être intéressé par les travaux de 2012 de Jinho D. Choi: soit son Optimisation du Traitement du Langage Naturel des Composants pour la Robustesse et l'Évolutivité ou son lignes Directrices pour le Style CLAIR Constituante à la Conversion de dépendance (qui semble être juste une sous-section de l'ancien document). Les deux énumèrent toutes les étiquettes de dépendance claires qui existaient en 2012 ainsi que des définitions et des phrases d'exemple. (Malheureusement, l'ensemble des étiquettes de dépendance claires a un peu changé depuis 2012, de sorte que certains des labels modernes ne sont pas énumérés ou illustrés dans le travail de Choi - mais il reste une ressource utile malgré être légèrement dépassé.)
juste un petit conseil sur la signification du détail des formes courtes. Vous pouvez utiliser explain
méthode comme suit:
spacy.explain('pobj')
qui vous donnera la sortie comme:
'object of preposition'
à l'heure actuelle, l'analyse de dépendance et le balisage dans SpaCy semblent être mis en œuvre uniquement au niveau des mots, et non au niveau de la phrase (autre que la phrase substantive) ou de la clause. Cela signifie que SpaCy peut être utilisé pour identifier des choses comme les noms (NN, NNS), les adjectifs (JJ, JJR, JJS), et les verbes (VB, VBD, VBG, etc.), mais pas d'adjectif phrases (ADJP), phrases adverbiales (ADVP), ou des questions (SBARQ, SQ).
pour illustration, quand vous utilisez SpaCy pour analyser la phrase " quel chemin est le bus part?", on obtient l'arbre suivant.
par contre, si vous utilisez L'analyseur Stanford, vous obtenez un arbre de syntaxe beaucoup plus structuré.
la documentation officielle fournit maintenant beaucoup plus de détails pour toutes ces annotations à https://spacy.io/api/annotation (et la liste des autres attributs pour les tokens se trouve à ) https://spacy.io/api/token ).
comme le montre la documentation, leurs étiquettes de parties de parole (POS) et de dépendances ont des variations à la fois universelles et spécifiques pour différentes langues et la fonction explain()
est très utile raccourci pour obtenir une meilleure description de la signification d'une étiquette sans la documentation, par exemple
spacy.explain("VBD")
qui donne "verbe, au passé".