SceneGraphParser ( sng_parser ) - это инструментарий Python для разбора предложений (на естественном языке) в графики сцен (как символическое представление) на основе анализа зависимости. Этот проект вдохновлен парсером Стэнфордского графа.
В отличие от Стэнфордской версии, этот анализатор написан исключительно Python. Он имеет простой в использовании пользовательский интерфейс и простой в конфигурации дизайн. Он анализирует предложения в графики, где узлы являются существительными (с такими модификаторами, как детерминанты или прилагательные), а края являются отношениями между существительными. Пожалуйста, см. В разделе «Пример» для получения подробной информации.
Основной момент: этот проект все еще разрабатывается. Все API подвергаются любым изменениям.
Примечание . Как вы можете заметить, анализ проводится набором экологически чистых правил на дереве анализа. Таким образом, нам нужна помощь от всех при сборе сбоев/угловых случаев текущей программы. Любые отчеты или помощь должны быть более чем приветствовать.
Это репо было разработано для:
Унифицированные визуальные встраивания: соединение зрения и языка со структурированным значением представлений
Хао Ву, Цзяюан Мао, Юфенг Чжан, Юнинг Цзян, Лей Ли, Вейвей Сан и Вей-Иин Ма
В конференции по компьютерному зрению и распознаванию шаблонов (CVPR) 2019 (устная презентация)
Пожалуйста, рассмотрите возможность ссылаться на нашу газету, если вы чувствуете, что вы чувствуете себя нанесены :). Разница между этим репо и оригинальным анализатором графика сцены Стэнфорда можно найти в #7.
Пакет может быть установлен с помощью PIP. Поскольку в настоящее время он поддерживает Spacy как Backend, английский пакет должен быть загружен после установки.
pip install SceneGraphParser
python -m spacy download en # to use the parser for English Самый простой способ использования этого инструмента - это вызов функции parse . В дизайне sng_parser поддерживает различные бэкэнды. В настоящее время мы поддерживаем только бэкэнд 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 |
+-----------+------------+----------+
В качестве альтернативы, вы можете настроить свой собственный анализатор:
> >> 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.' ) Мы используем Pure Pythonic dict и list , чтобы представлять график. Хотя эта гибкость может вызвать некоторые нежелательные проблемы, мы предпочитаем это представление, потому что:
Сгенерированные графики сцены соответствуют следующей спецификации:
{
'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...
]
}