SceneGraphparser ( sng_parser ) es un kit de herramientas de Python para analizar oraciones (en lenguaje natural) en gráficos de escena (como representación simbólica) basado en el análisis de dependencia. Este proyecto está inspirado en el analizador de gráficos de la escena de Stanford.
A diferencia de la versión de Stanford, este analizador está escrito puramente por Python. Tiene una interfaz de usuario fácil de usar y un diseño fácil de configurar. Analiza las oraciones en gráficos donde los nodos son sustantivos (con modificadores como determinantes o adjetivos) y los bordes son relaciones entre los sustantivos. Consulte la sección Ejemplo para más detalles.
Lo más destacado: este proyecto todavía se está desarrollando. Todas las API están sujetas a cualquier cambio.
Nota : Como puede notar, el análisis se realiza mediante un conjunto de reglas escritas por humanos sobre el árbol de análisis. Por lo tanto, necesitamos ayuda de todos sobre la recopilación de casos de falla/esquina del programa actual. Cualquier tipo de informes o ayuda debe ser más que bienvenido.
Este repositorio fue desarrollado para:
Incruscaciones unificadas visual-semántica: visión y lenguaje de puente con representaciones de significado estructurado
Hao Wu, Jiayuan Mao, Yufeng Zhang, Yuning Jiang, Lei Li, Weiwei Sun y Wei-Ying Ma
En Conferencia sobre Visión por Computadora y Reconocimiento de Patrones (CVPR) 2019 (presentación oral)
Considere citar nuestro artículo si se siente confortable :). La diferencia entre este repositorio y el analizador de gráficos de la escena de Stanford original se puede encontrar en el #7.
El paquete se puede instalar usando PIP. Como actualmente solo admite Spacy como backend, el paquete en inglés debe descargarse después de la instalación.
pip install SceneGraphParser
python -m spacy download en # to use the parser for English La forma más fácil de usar esta herramienta es llamando a la función parse . En diseño, sng_parser admite diferentes backends. Actualmente, solo apoyamos el backend de Spacy.
pip install spacy
> >> import sng_parser
> >> graph = sng_parser . parse ( 'A woman is playing the piano in the room.' ) > >> from pprint import pprint
> >> pprint ( graph ) {'entities': [{'head': 'woman',
'lemma_head': 'woman',
'lemma_span': 'a woman',
'modifiers': [{'dep': 'det', 'lemma_span': 'a', 'span': 'A'}],
'span': 'A woman'},
{'head': 'piano',
'lemma_head': 'piano',
'lemma_span': 'the piano',
'modifiers': [{'dep': 'det',
'lemma_span': 'the',
'span': 'the'}],
'span': 'the piano'},
{'head': 'room',
'lemma_head': 'room',
'lemma_span': 'the room',
'modifiers': [{'dep': 'det',
'lemma_span': 'the',
'span': 'the'}],
'span': 'the room'}],
'relations': [{'object': 1, 'relation': 'playing', 'subject': 0},
{'object': 2, 'relation': 'in', 'subject': 0}]}
> >> sng_parser . tprint ( graph ) # we provide a tabular visualization of the graph. Entities:
+--------+-----------+-------------+
| Head | Span | Modifiers |
|--------+-----------+-------------|
| woman | a woman | a |
| piano | the piano | the |
| room | the room | the |
+--------+-----------+-------------+
Relations:
+-----------+------------+----------+
| Subject | Relation | Object |
|-----------+------------+----------|
| woman | playing | piano |
| woman | in | room |
+-----------+------------+----------+
Alternativamente, puede configurar su propio analizador:
> >> import sng_parser
> >> parser = sng_parser . Parser ( 'spacy' , model = 'en' ) # the positional argument specifies the backend, and the keyward arguments are for the backend initialization.
> >> graph = parser . parse ( 'A woman is playing the piano in the room.' ) Utilizamos el dict Pitonic Pure y list para representar un gráfico. Aunque esta flexibilidad puede traer algunos problemas no deseados, preferimos esta representación porque:
Los gráficos de escena generados coinciden con la siguiente especificación:
{
'entities' : [ # a list of entities
{
'span' : "the full span of a noun phrase" ,
'lemma_span' : "the lemmatized version of the span" ,
'head' : "the head noun" ,
'lemma_head' : "the lemmatized version of the head noun" ,
'modifiers' : [
{
'dep' : "the dependency type" ,
'span' : "the span of the modifier" ,
'lemma_span' : "the lemmatized version of the span"
},
# other modifiers...
]
},
# other entities...
],
'relations' : [ # a list of relations
# the subject and object fields are sometimes called "head" and "tail" in relation extraction papers.
{
'subject' : "the entity id of the subject" ,
'object' : "the entity id of the object" ,
'relation' : "the relation"
}
# other relations...
]
}