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?

22
demandé sur Mark Amery 2016-10-27 18:14:32

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:

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 les Token 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é.)

48
répondu Mark Amery 2018-04-18 21:38:47

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'
9
répondu Nuhil Mehdy 2018-01-08 03:17:42

à 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é.

3
répondu rebeccabilbro 2017-12-07 17:50:31

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é".

0
répondu Silveri 2018-08-28 12:08:51