neo4j-labs / arrows.app

A graph drawing application
https://arrows.app
Apache License 2.0
106 stars 16 forks source link

Knowledge base graph editor #71

Closed saliez closed 1 year ago

saliez commented 1 year ago

Problem: The maintenance of a knowledge base require often small updates by domain experts who are not IT geeks and would have too difficult to use Cypher. Question: The current interactive editor is excellent, but "Arrows.app" should allow to read from and write back in a standard Neo4j database.

akollegger commented 1 year ago

Hi @saliez ,

I could see this being achieved with a plugin that supports reading from/to a database, same as you'd read to/from any potential storage layer. Yet, there would be few challenges:

This kind of editing may be better served by Bloom. Is that an option for you?

-ABK

saliez commented 1 year ago

Hi Andreas,

Thank you very much for your message from NEO4J-LABS.

What I most need is a "graph editor" allowing to edit individual nodes and edges in a regular Neo4j database. Of course this could be possible by means of Cypher in the standard browser, but experts in other domains than IT absolutely need a much more easier human interface.

This approach open the way to a new usage of Neo4j directed to " Explainable Assisted Intelligence " which could be seen as an alternative to "blind Artificial Intelligence", making nowadays a lot of noise in news everywhere, like "chatGPT" ! "Bloom" is indeed very good on itself, but in my understanding mostly intended to "big data" analysis, currently the most important market of NEO4J.

One use case of a graph editor is the project " Assisted Intelligence in Medicine using Interactive Graphs", http://www.aimig.org/ , an experimental Proof of Concept in Open Source. The preliminary specification are in annex.

Therefore " arrows.app " provides already excellent ways to create and to adapt nodes and relationships in a very natural way.

In answer to your questions

( 1 )  Navigation and selection: Of course at a given point in time, we can be aware of only a relative small "view" out of a very large knowledge graph. The project is intended to be very interactive and to move often to a next new view. After any event we will often need a new selective extract from the database. For example: symptoms --> possible diagnoses --> recommendation to seek more information ---> ... After any data change event, a new evaluation could be necessary, maybe requiring a new selection. As you did say the job could be achieved by a kind of pluging doing a " saveTheLatestChanges(....) " directly in a normal Neo4j database. That said we will try to limit the traffic to and from the database, as far as possible.

( 2 )  Styling: The options will depend on labels and attributes, in function of the application, in this case medical. For example 'relationships weight' --> Thickness,' likelihood' --> size, 'type' --> shape, color, ... a kind of visual interface which could necessitate less than 2 days of training, a shortcut to any NLP.

( 3 )  Position: The relative positions could be controlled as attraction or repulsion, also in function of labels and/or attributes. This is available in libraries like https://visjs.github.io/vis-network/docs/network/ and https://visjs.github.io/vis-network/docs/network/physics.html .

Etienne Saliez, M.D.

On 22/05/2023 12:54, Andreas Kollegger wrote:

Hi @saliez https://github.com/saliez ,

I could see this being achieved with a plugin that supports reading from/to a database, same as you'd read to/from any potential storage layer. Yet, there would be few challenges:

  • defining a part of the larger graph to read from or write to (effectively a view)
  • preserving the node positions and styling choices somewhere (in the same knowledge base as extra properties?)

This kind of editing may be better served by Bloom. Is that an option for you?

-ABK

— Reply to this email directly, view it on GitHub https://github.com/neo4j-labs/arrows.app/issues/71#issuecomment-1557001217, or unsubscribe https://github.com/notifications/unsubscribe-auth/AB643GFLWTSN6KPWUZXGYBTXHNAVDANCNFSM6AAAAAAQOGMPEA. You are receiving this because you were mentioned.Message ID: @.***>

akollegger commented 1 year ago

Hi Etienne,

Thank you for all the additional details about what you're trying to achieve. I agree that Bloom has shifted focus towards analytics of the physical model and away from domain specific representations and interactions, so it may be too much to hope that its editing capabilities will improve.

I think there is a real need for a general purpose tool for interacting with and editing a knowledge graph. Graph visualization is a natural starting point for such a tool, yet interactions become cumbersome for anything larger than a few hundred nodes. My past explorations in this area led me to something closer to a spreadsheet that knows about relationships.

Arrows itself has been designed to draw graphs for illustrative purposes. There are important distinctions, for example properties are just strings rather than value types like numbers or booleans. This could be improved, but the direction for Arrows features will remain drawing rather than data.

That said, we've very intentionally made the project open source to enable others to take useful parts of Arrows and go in another direction. Some examples include using Arrows components within data import or data modeling tools. A data editing tool would also be a great candidate.

In the near term, my focus is to update the code, catch-up with newer dependencies, and begin restructuring the codebase to make it easier to maintain, extend or extract.

Regarding "extend": this could be the lowest effort way to do something like what you're describing through plugins. Arrows could happily think it is just drawing a graph while a plugin provides the necessary logic for interfacing with a larger Neo4j database.

I'm going to move this into a discussion, to keep the ideas alive.

Best, Andreas