SzenengraphParser ( sng_parser ) ist ein Python -Toolkit zum Parsen von Sätzen (in der natürlichen Sprache) in Szenengrafiken (als symbolische Darstellung), die auf der Abhängigkeitsanalyse basieren. Dieses Projekt ist vom Stanford Szenen -Grafik -Parser inspiriert.
Anders als bei der Stanford -Version wird dieser Parser nur von Python geschrieben. Es verfügt über eine benutzerfreundliche Benutzeroberfläche und ein leicht zu konfiguriertes Design. Es analysiert Sätze in Graphen, in denen die Knoten Substantive sind (mit Modifikatoren wie Determinanten oder Adjektiven) und die Kanten Beziehungen zwischen Substantiven. Weitere Einzelheiten finden Sie im Beispiel für Einzelheiten.
Highlight: Dieses Projekt wird noch entwickelt. Alle APIs unterliegen jeder Änderung.
HINWEIS : Wie Sie vielleicht bemerken, erfolgt die Parsen durch eine Reihe von von Menschen geschriebenen Regeln für den Parsingbaum. Daher benötigen wir Hilfe von allen, um Fehler-/Eckfälle des aktuellen Programms zu sammeln. Jede Art von Berichten oder Hilfe sollte mehr als willkommen sein.
Dieses Repo wurde entwickelt für:
Einheitliche visuell-semantische Einbettungen: Überbrückung von Vision und Sprache mit strukturierten Bedeutung Darstellungen
Hao Wu, Jiayuan Mao, Yufeng Zhang, Yuning Jiang, Lei Li, Weiwei Sun und Weiging Ma
In der Konferenz über Computer Vision und Mustererkennung (CVPR) 2019 (Mundpräsentation)
Bitte überlegen Sie, ob Sie unsere Zeitung zitieren, wenn Sie sich bequem fühlen :). Der Unterschied zwischen diesem Repo und dem ursprünglichen Stanford Szenen -Diagramm -Parser finden Sie in #7.
Das Paket kann mit PIP installiert werden. Da es derzeit nur als Backend unterstützt wird, muss das Englischpaket nach der Installation heruntergeladen werden.
pip install SceneGraphParser
python -m spacy download en # to use the parser for English Der einfachste Weg, dieses Tool zu verwenden, besteht darin, die parse -Funktion aufzurufen. Im Design unterstützt sng_parser verschiedene Backends. Derzeit unterstützen wir das Spacy -Backend nur.
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 |
+-----------+------------+----------+
Alternativ können Sie Ihren eigenen Parser konfigurieren:
> >> 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.' ) Wir verwenden das reine pythonische dict und list , um ein Diagramm darzustellen. Obwohl diese Flexibilität einige unerwünschte Probleme mit sich bringen kann, bevorzugen wir diese Darstellung, weil:
Die generierten Szenengrafiken stimmen mit der folgenden Spezifikation überein:
{
'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...
]
}