We explored a lot of options, from graph databases to scraping the USPTO and running machine learning models over it.
Finally, we concluded that in order to meaningfully generate new ideas, we needed computers to understand the map of existing ideas first.
The general idea was as follows:
- A bike has wheels
- Wheels allow for movement
- Motors can help wheels boost movement
- Therefore a valid new idea could be bike + motor = motorbike
For a computer to understand that, you would need to map all humankind’s knowledge in a graph. There have been some attempts at doing so, and we even tried to leverage on those for Unpatent:
But the issue is always language. Language is subjective by design. Words don’t have formal specs and implementations, like software does.
Language is wet code, not dry code. This makes it so hard for computers to enter our world, understand it and build on their own.
Today I won’t go into the AI rabbit hole, but rather on how we can improve our systems today using tools to reduce the gap between language and code.
Currently, Wikipedia defines motorbike as:
A motorcycle, often called a bike, motorbike, or cycle, is a two- or three-wheeled motor vehicle
This doesn’t tell us much, specially about what it needs to be in place in order for something to be a motorbike. In an idyllic world, a word would take meaning because of its place in the knowledge graph.
For example, motorbike would be roughly defined as follows:
Of course this would be inside an infinite graph, so Motorbike would be related to Transportation somehow and Battery would be indirectly related to Wind or Solar.
Also, the above could be expressed as code:
graph TD MB[Motorbike] -->|Needs| W(Wheels) MB[Motorbike] -->|Needs| M(Motor) M(Motor) -->|Needs| E(Energy) E(Energy) -->|Is| F(Fuel) E(Energy) -->|Is| B(Battery) M(Motor) -->|Powers| W MB[Motorbike] -->|Needs| D(Driver) D(Driver) -->|Is| H(Human) D(Driver) -->|Is| C(Computer)
This gives us some interesting properties:
- By charting the relationship between words, we enclose their meaning and reduce subjective interpretation
- As it is a graph, you can join it to other graphs, the same way you import code or packages. This reduces the need to re-define since you could rely on a few very well vetted definitions
- As it can be expressed as code, we can have commit history and diffs in order to see how this knowledge and its meaning evolves
- We can do some basic testing to see if our whole graph computes! For example, we could catch conflicting definitions inside a graph
This can now sound very abstract. What are the use cases, apart from AI?
I’ll enumerate a few:
- Formalize governance processes, thus increasing transparency and reducing subjectivity
- Write down company processes, to summarize flows in a concise manner
- Graph out the values or the manifesto of a community, to make sure it always follows them
I just discovered Mermaid, which is a tool that allows to quickly chart by using code. I have been looking for something like this for a long time.
Now I plan to start writing code for multiple processes I want to formalize, and also for my own knowledge and mental models I have been accumulating from life and reading.
I’m genuinely amused by knowledge graphs, and I think they could help reduce misinterpretations and improve accuracy in how humans and organizations communicate their view of the world.