Skip to main content

A state of the art knowledge base

Project description

CircleCI DOI Documentation Status PyPI version fury.io PyPI download month PyPI pyversions PyPI license

Zincbase logo

ZincBase is a state of the art knowledge base and complex simulation suite. It does the following:

  • Store and retrieve graph structured data efficiently.
  • Provide ways to query the graph, including via bleeding-edge graph neural networks.
  • Simulate complex effects playing out across the graph and see how predictions change.

Zincbase exists to answer questions like "what is the probability that Tom likes LARPing", or "who likes LARPing", or "classify people into LARPers vs normies", or simulations like "what happens if all the LARPers become normies".

Example graph for reasoning

It combines the latest in neural networks with symbolic logic (think expert systems and prolog), graph search, and complexity theory.

View full documentation here.

Quickstart

pip3 install zincbase

from zincbase import KB
kb = KB()
kb.store('eats(tom, rice)')
for ans in kb.query('eats(tom, Food)'):
    print(ans['Food']) # prints 'rice'

...
# The included assets/countries_s1_train.csv contains triples like:
# (namibia, locatedin, africa)
# (lithuania, neighbor, poland)

kb = KB()
kb.from_csv('./assets/countries_s1_train.csv', delimiter='\t')
kb.build_kg_model(cuda=False, embedding_size=40)
kb.train_kg_model(steps=8000, batch_size=1, verbose=False)
kb.estimate_triple_prob('fiji', 'locatedin', 'melanesia')
0.9607

Requirements

  • Python 3
  • Libraries from requirements.txt
  • GPU preferable for large graphs but not required

Installation

pip install -r requirements.txt

Note: Requirements might differ for PyTorch depending on your system.

Web UI

Zincbase can serve live-updating force-directed graphs in 3D to a web browser. The command python -m zincbase.web will set up a static file server and a websocket server for live updates. Visit http://localhost:5000/ in your browser and you'll see the graph UI. As you build a graph in Python, you can visualize it (and changes to it) in realtime through this UI.

Here are a couple of examples (source code here):

Peek 2020-03-21 12-34

Peek 2020-03-21 12-39

Complexity (Graph/Network) Examples

Two such examples are included (right now; we intend to include more soon such as virus spread and neural nets that communicate.) The examples are basic ones: Conway's Game of Life and the Abelian Sandpile. Here are some screencaps; source code is here, performance can be lightning fast depending how you tweak Zincbase recursion and propagation settings.

Peek 2020-03-06 23-53 Peek 2020-03-06 23-55

Required for the UI

  • You should pip install zincbase[web] to get the optional web extra.
  • You should have Redis running; by default, at localhost:6379. This is easily achievable, just do docker run -p 6379:6379 -d redis

Testing

python test/test_main.py
python test/test_graph.py
... etc ... all the test files there
python -m doctest zincbase/zincbase.py

Validation

"Countries" and "FB15k" datasets are included in this repo.

There is a script to evaluate that ZincBase gets at least as good performance on the Countries dataset as the original (2019) RotatE paper. From the repo's root directory:

python examples/eval_countries_s3.py

It tests the hardest Countries task and prints out the AUC ROC, which should be ~ 0.95 to match the paper. It takes about 30 minutes to run on a modern GPU.

There is also a script to evaluate performance on FB15k: python examples/fb15k_mrr.py.

Running the web UI

There are a couple of extra requirements -- install with pip3 install zincbase[web]. You also need an accessible Redis instance somewhere. This one-liner will get it running locally: docker run -p 6379:6379 -d redis (requires Docker, of course.)

You then need a Zincbase server instance running:

Building documentation

From docs/ dir: make html. If something changed a lot: sphinx-apidoc -o . ..

Pushing to pypi

NOTE: This is now all automatic via CircleCI, but here are the manual steps for reference:

  • Edit setup.py as appropriate (probably not necessary)
  • Edit the version in zincbase/__init__.py
  • From the top project directory python setup.py sdist bdist_wheel --universal
  • twine upload dist/*

TODO

  • add ability to kb = KB(backend='complexdb://my_api_key')
  • utilize postgres as backend triple store
  • Reinforcement learning for graph traversal.
  • Rete algorithm (maybe)

References & Acknowledgements

Theo Trouillon. Complex-Valued Embedding Models for Knowledge Graphs. Machine Learning[cs.LG]. Université Grenoble Alpes, 2017. English. ffNNT : 2017GREAM048

L334: Computational Syntax and Semantics -- Introduction to Prolog, Steve Harlow

Open Book Project: Prolog in Python, Chris Meyers

Prolog Interpreter in Javascript

RotatE: Knowledge Graph Embedding by Relational Rotation in Complex Space, Zhiqing Sun and Zhi-Hong Deng and Jian-Yun Nie and Jian Tang, International Conference on Learning Representations, 2019

Citing

If you use this software, please consider citing:

@software{zincbase,
  author = {{Tom Grek}},
  title = {ZincBase: A state of the art knowledge base},
  url = {https://github.com/tomgrek/zincbase},
  version = {0.1.1},
  date = {2019-05-12}
}

Contributing

See CONTRIBUTING. And please do!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zincbase-0.10.1.tar.gz (481.2 kB view details)

Uploaded Source

Built Distribution

zincbase-0.10.1-py2.py3-none-any.whl (480.9 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file zincbase-0.10.1.tar.gz.

File metadata

  • Download URL: zincbase-0.10.1.tar.gz
  • Upload date:
  • Size: 481.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.0.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.7.7

File hashes

Hashes for zincbase-0.10.1.tar.gz
Algorithm Hash digest
SHA256 5a73da351bb62b380de7e5e0d86d23a0c43d77d36a2a5ff8beb7ded782bea912
MD5 7d663869e9ac9a569bc20c0a60e3ca46
BLAKE2b-256 f42301a4d635c0b3ebcb3fb9bcde63a4971e69cfbf15ca99fa7f18110d5398fb

See more details on using hashes here.

File details

Details for the file zincbase-0.10.1-py2.py3-none-any.whl.

File metadata

  • Download URL: zincbase-0.10.1-py2.py3-none-any.whl
  • Upload date:
  • Size: 480.9 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.0.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.7.7

File hashes

Hashes for zincbase-0.10.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 f69e2b612d3175a6d82a0e9c52cd533b5cab2ec860489602109bfe58d7f594c6
MD5 5961727012a95672618f9472e1f256a2
BLAKE2b-256 453afbb61bbbf61d81e11b4ae0c16953302c343656dde4ed057334f46de07eaa

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page