ScenEgraphParser ( sng_parser ) adalah toolkit Python untuk penguraian kalimat (dalam bahasa alami) ke dalam grafik adegan (sebagai representasi simbolik) berdasarkan parsing ketergantungan. Proyek ini terinspirasi oleh Parser Grafik Adegan Stanford.
Berbeda dari versi Stanford, parser ini ditulis murni oleh Python. Ini memiliki antarmuka pengguna yang mudah digunakan dan desain yang mudah dikonfigurasi. Ini mem -parsing kalimat ke dalam grafik di mana node adalah kata benda (dengan pengubah seperti penentu atau kata sifat) dan tepi adalah hubungan antara kata benda. Silakan lihat bagian contoh untuk detailnya.
Sorotan: Proyek ini masih sedang dikembangkan. Semua API mengalami perubahan apa pun.
CATATAN : Seperti yang mungkin Anda perhatikan, parsing dilakukan oleh seperangkat aturan yang ditulis manusia pada pohon parsing. Dengan demikian, kami membutuhkan bantuan dari semua orang dalam mengumpulkan kasus kegagalan/sudut dari program saat ini. Segala jenis laporan atau bantuan harus lebih dari disambut.
Repo ini dikembangkan untuk:
Tanah Visual-Semantik Terpadu: menjembatani visi dan bahasa dengan representasi makna terstruktur
Hao Wu, Jiayuan Mao, Yufeng Zhang, Yuning Jiang, Lei Li, Weiwei Sun, dan Wei-Ying Ma
Dalam Konferensi tentang Visi Komputer dan Pengenalan Pola (CVPR) 2019 (Presentasi Lisan)
Harap pertimbangkan mengutip makalah kami jika Anda merasa nyaman :). Perbedaan antara repo ini dan parser grafik adegan Stanford asli dapat ditemukan di #7.
Paket dapat diinstal menggunakan PIP. Karena saat ini hanya mendukung Spacy sebagai backend, paket bahasa Inggris perlu diunduh setelah instalasi.
pip install SceneGraphParser
python -m spacy download en # to use the parser for English Cara termudah untuk menggunakan alat ini adalah dengan memanggil fungsi parse . Dalam desain, sng_parser mendukung backend yang berbeda. Saat ini, kami hanya mendukung backend 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 |
+-----------+------------+----------+
Atau, Anda dapat mengonfigurasi parser Anda sendiri:
> >> 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.' ) Kami menggunakan dict pythonic murni dan list untuk mewakili grafik. Meskipun fleksibilitas ini dapat membawa beberapa masalah yang tidak diinginkan, kami lebih suka representasi ini karena:
Grafik adegan yang dihasilkan cocok dengan spesifikasi berikut:
{
'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...
]
}