Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mmxgn/sprl-spacy
Implementation of Spatial Role Labeling using the Spacy NLP framework.
https://github.com/mmxgn/sprl-spacy
nlp problog spacy spatial-role-labeling sprl
Last synced: 3 months ago
JSON representation
Implementation of Spatial Role Labeling using the Spacy NLP framework.
- Host: GitHub
- URL: https://github.com/mmxgn/sprl-spacy
- Owner: mmxgn
- Created: 2018-09-20T13:57:10.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2020-02-09T12:25:30.000Z (almost 5 years ago)
- Last Synced: 2024-07-30T20:18:14.221Z (5 months ago)
- Topics: nlp, problog, spacy, spatial-role-labeling, sprl
- Language: Python
- Size: 43 KB
- Stars: 18
- Watchers: 3
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# SPRL-Spacy
This repository implements an easy to use Spatial Role Labeling module trained on
three entities (`TRAJECTOR`, `SPATIAL_INDICATOR`, `LANDMARK`) and the relations appearing
on the SpRL 2013 IAPR TC-12 dataset.## Requirements
- `spacy >=2.0.0a18` and the necessary requirements (Does *NOT* work with Spacy versions `2.1.x` and above)
- `sklearn`
- `scipy`
- `pickle` for python 3.7.0
- `problog` for use with ProbLog.## Usage
1. Clone this repository where you want to use it.
2. Download the two models from the [releases](https://github.com/mmxgn/sprl-spacy/releases) page and put them in the `models/` directory.
3. Import `spacy` and `sprl` and use them like the following example:```
import spacy
from sprl import *nlp = spacy.load('models/en_core_web_lg-sprl')
sentence = "An angry big dog is behind us."
rel = sprl(sentence, nlp, model_relext_filename='models/model_svm_relations.pkl')
print(rel)
```If everything went fine you should get something like:
```
[(An angry big dog, behind, us, 'direction')]
```You can also run `sprl_cmd.py` to get a continuous input to test how well various
sentences are processed:```
$ python3 sprl_cmd.py
```## Problog
If you happen to have problog installed, I have made a library that allows you to process sentences and produce a set of first order predicates that express the spatial relations within it. For example you can do something like in `pl/test_sprl.pl`:
```
:-use_module('sprl.pl').run_all :- sprl_process_sentence('An angry big dog is behind us.').
query(run_all).
query(trajector(X)).
query(landmark(X)).
query(spatial_indicator(X)).
query(type(X,Y)).
query(extent(X, Extent)).
query(spatial_relation(X)).
query(gtype(X,Y)).
query(srtype(X, Y)).
query(srtype(X)).```
which you can run with:
```
$ PYTHONPATH="../sprl" problog test_sprl.pl
```and get the following output:
```
extent(lm0,us): 1
extent(sp0,behind): 1
extent(tr0,An angry big dog): 1
gtype(st0,direction): 1
landmark(lm0): 1
run_all: 1
spatial_indicator(sp0): 1
spatial_relation(sr0): 1
srtype(sr0,st0): 1
srtype(st0): 1
trajector(tr0): 1
type(lm0,person): 1
type(tr0,animal): 1
```We can see for example that it identified and labeled the trajector, landmark and spatial indicator in the sentence, assigned them an id, identified the spatial relation and assigned it a general type of *direction*. It also assigned a type of *person* to the landmark *us* and *animal* to the trajector *An angry big dog*. For what those predicates mean and how they are used please see `doc/sprl.html`.
## Credits
While the model has been trained by me, the relation extraction part uses features from
the paper for Sprl-CWW (see below), and the dataset from SemEval 2013 Task 3: Spatial Role Labeling.The features for relation extraction:
```
Nichols, Eric, and Fadi Botros.
"SpRL-CWW: Spatial relation classification with independent multi-class models."
Proceedings of the 9th International Workshop on Semantic Evaluation.
```Semeval 2013 task 3: Spatial Role Labeling
```
Kolomiyets, Oleksandr, et al.
"Semeval-2013 task 3: Spatial role labeling."
Second Joint Conference on Lexical and Computational Semantics
```So please cite the papers above, as well as spacy and ProbLog (if you use it) in your work :)