Saltar al contenido

¿Qué significan las etiquetas de dependencia y parte del discurso de spaCy?

Nuestros mejores desarrolladores han agotado sus depósitos de café, buscando todo el tiempo por la respuesta, hasta que Nicolás halló el resultado en GitHub así que ahora la compartimos aquí.

Solución:

tl; dr respuesta

Simplemente expanda las listas en:

  • https://spacy.io/api/annotation#pos-tagging (etiquetas POS) y
  • https://spacy.io/api/annotation#dependency-parsing (etiquetas de dependencia)

Respuesta más larga

Los documentos han mejorado mucho desde que hice esta pregunta por primera vez, y spaCy ahora documenta esto mucho mejor.

Etiquetas de parte del discurso

los pos y tag attributes están tabulados en https://spacy.io/api/annotation#pos-tagging, y se describe el origen de esas listas de valores. En el momento de esta edición (enero de 2020), los documentos dicen que el pos attribute que:

spaCy asigna todas las etiquetas de parte del discurso específicas del idioma a un conjunto pequeño y fijo de etiquetas de tipo de palabra siguiendo el esquema de dependencias universales. Las etiquetas universales no codifican ninguna característica morfológica y solo cubren el tipo de palabra. Están disponibles como el Token.pos y Token.pos_ attributes.

En cuanto a tag attributelos documentos dicen:

El etiquetador de parte del discurso en inglés utiliza la versión OntoNotes 5 del conjunto de etiquetas Penn Treebank. También asignamos las etiquetas al conjunto de etiquetas POS de Universal Dependencies v2 más simple.

y

El etiquetador de parte del discurso alemán utiliza el esquema de anotación TIGER Treebank. También asignamos las etiquetas al conjunto de etiquetas POS de Universal Dependencies v2 más simple.

Por lo tanto, tiene la opción de usar un conjunto de etiquetas de grano grueso que sea consistente en todos los idiomas (.pos), o un conjunto de etiquetas de grano fino (.tag) que es específico de un treebank en particular y, por lo tanto, de un idioma en particular.

.pos_ lista de etiquetas

Los documentos enumeran las siguientes etiquetas de grano grueso utilizadas para el pos y pos_ attributes:

  • ADJ: adjetivo, por ejemplo, grande, viejo, verde, incomprensible, primero
  • ADP: adposición, por ejemplo, en, a, durante
  • ADV: adverbio, por ejemplo, muy, mañana, abajo, donde, allí
  • AUX: auxiliar, por ejemplo, es, tiene (hecho), hará (hará), debería (hacer)
  • CONJ: conjunción, por ejemplo, y, o, pero
  • CCONJ: conjunción coordinante, por ejemplo, y, o, pero
  • DET: determinante, p. ej. a, an, the
  • INTJ: interjección, p. ej., psst, ay, bravo, hola
  • NOUN: sustantivo, por ejemplo, niña, gato, árbol, aire, belleza
  • NUM: numeral, ej. 1, 2017, uno, setenta y siete, IV, MMXIV
  • PART: partícula, p. ej., ‘s, not,
  • PRON: pronombre, por ejemplo, yo, tú, él, ella, yo mismo, ellos mismos, alguien
  • PROPN: nombre propio, por ejemplo, Mary, John, London, NATO, HBO
  • PUNCT: puntuación, p. ej., (, ), ?
  • SCONJ: conjunción subordinante, por ejemplo, si, mientras, que
  • SYM: símbolo, por ejemplo, $, %, §, ©, +, −, ×, ÷, =, :),
  • VERB: verbo, p. ej. correr, correr, correr, comer, ate, comer
  • X: otro, por ejemplo, sfpksdpsxmsa
  • SPACE: espacio, por ejemplo

Tenga en cuenta que los documentos mienten un poco cuando dicen que esta lista sigue el Esquema de Dependencias Universales; hay dos etiquetas enumeradas arriba que no forman parte de ese esquema.

uno de esos es CONJque solía existir en el esquema Universal POS Tags pero se ha dividido en CCONJ y SCONJ desde que se escribió spaCy por primera vez. Según las asignaciones de tag->pos en los documentos, parecería que los modelos actuales de spaCy en realidad no usan CONJpero todavía existe en el código y los documentos de spaCy por alguna razón, tal vez compatibilidad con modelos anteriores.

el segundo es SPACEque no forma parte del esquema Universal POS Tags (y nunca lo ha sido, que yo sepa) y spaCy lo utiliza para cualquier espacio además de los espacios ASCII normales únicos (que no obtienen su propio token):

>>> document = en_nlp("Thisnsentencethas      some weird spaces innnnntt   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)
'nnnntt   ' (SPACE)
'it' (PRON)
'.' (PUNCT)

Omitiré la lista completa de .tag_ etiquetas (las de grano más fino) de esta respuesta, ya que ahora son numerosas, están bien documentadas, son diferentes para inglés y alemán, y probablemente es más probable que cambien entre versiones. En su lugar, mire la lista en los documentos (por ejemplo, https://spacy.io/api/annotation#pos-en para inglés) que enumera todas las etiquetas posibles, el .pos_ valor al que se asigna y una descripción de lo que significa.

fichas de dependencia

Están ahora Tres diferentes esquemas que usa spaCy para el etiquetado de dependencia: uno para inglés, uno para alemán y otro para todo lo demás. Una vez más, la lista de valores es enorme y no la reproduciré aquí en su totalidad. Cada dependencia tiene una breve definición junto a ella, pero desafortunadamente, muchas de ellas, como “modificador aposicional” o “complemento de cláusula”, son términos de arte que son bastante extraños para un programador cotidiano como yo. Si no eres lingüista, simplemente tendrás que investigar los significados de esos términos artísticos para darles sentido.

Sin embargo, al menos puedo proporcionar un punto de partida para esa investigación para las personas que trabajan con texto en inglés. Si quieres ver algunos ejemplos de las dependencias CLEAR (utilizadas por el modelo inglés) en oraciones reales, consulte el trabajo de 2012 de Jinho D. Choi: o su Optimización de componentes de procesamiento de lenguaje natural para robustez y escalabilidad o su Directrices para la conversión de dependencia del componente de estilo CLEAR (que parece ser solo una subsección del documento anterior). Ambos enumeran todas las etiquetas de dependencia CLEAR que existían en 2012 junto con definiciones y oraciones de ejemplo. (Desafortunadamente, el conjunto de etiquetas de dependencia CLEAR ha cambiado un poco desde 2012, por lo que algunas de las etiquetas modernas no se enumeran ni ejemplifican en el trabajo de Choi, pero sigue siendo un recurso útil a pesar de estar un poco desactualizado).

Solo un consejo rápido sobre cómo obtener el significado detallado de las formas cortas. Puedes usar explain método como el siguiente:

spacy.explain('pobj')

que le dará salida como:

'object of preposition'

La documentación oficial ahora proporciona muchos más detalles para todas esas anotaciones en https://spacy.io/api/annotation (y la lista de otras attributes para tokens se pueden encontrar en https://spacy.io/api/token).

Como muestra la documentación, sus partes del discurso (POS) y etiquetas de dependencia tienen variaciones universales y específicas para diferentes idiomas y el explain() La función es un atajo muy útil para obtener una mejor descripción del significado de una etiqueta sin la documentación, por ejemplo

spacy.explain("VBD")

que da “verbo, tiempo pasado”.

Aquí puedes ver las comentarios y valoraciones de los lectores

Si para ti ha resultado provechoso este post, sería de mucha ayuda si lo compartieras con otros programadores así contrubuyes a difundir esta información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *