Here is a piece of JSON extracted from the
jsonQ website.
var jsonObj = {
"fathers": [{
"age": 44,
"name": "James Martin",
"daughters": [{
"age": 24,
"name": "Michelle",
"husband": {
"age": 30,
"name": "Matthew"
}
}, {
"age": 30,
"name": "Angela",
"husband": {
"age": 23,
"name": "William"
}
}]
}, {
"age": 47,
"name": "David Thompson",
"daughters": [{
"age": 20,
"name": "Amy",
"husband": {
"age": 26,
"name": "Edward"
}
}, {
"age": 20,
"name": "Dorothy",
"husband": {
"age": 23,
"name": "Timothy"
}
}]
}, {
"age": 56,
"name": "Thomas Young",
"daughters": [{
"age": 22,
"name": "Sharon",
"husband": {
"age": 23,
"name": "Jason"
}
}, {
"age": 22,
"name": "Carol",
"husband": {
"age": 23,
"name": "William"
}
}, {
"age": 20,
"name": "Brenda",
"husband": {
"age": 30,
"name": "Timothy"
}
}]
}, {
"age": 53,
"name": "Jason Martinez",
"daughters": [{
"age": 19,
"name": "Jessica",
"husband": {
"age": 24,
"name": "Daniel"
}
}]
}, {
"age": 51,
"name": "Thomas Gonzalez",
"daughters": [{
"age": 23,
"name": "Brenda",
"husband": {
"age": 30,
"name": "George"
}
}, {
"age": 30,
"name": "Dorothy",
"husband": {
"age": 23,
"name": "Brian"
}
}]
}, {
"age": 41,
"name": "James Lee",
"daughters": [{
"age": 20,
"name": "Sarah",
"husband": {
"age": 24,
"name": "Frank"
}
}, {
"age": 21,
"name": "Carol",
"husband": {
"age": 28,
"name": "Larry"
}
}]
}, {
"age": 58,
"name": "Kenneth Brown",
"daughters": [{
"age": 23,
"name": "Ruth",
"husband": {
"age": 24,
"name": "Brian"
}
}, {
"age": 18,
"name": "Lisa",
"husband": {
"age": 24,
"name": "Scott"
}
}, {
"age": 27,
"name": "Sandra",
"husband": {
"age": 31,
"name": "Charles"
}
}]
}, {
"age": 50,
"name": "Thomas Lee",
"daughters": [{
"age": 27,
"name": "Patricia",
"husband": {
"age": 30,
"name": "Scott"
}
}, {
"age": 21,
"name": "Jennifer",
"husband": {
"age": 23,
"name": "George"
}
}]
}, {
"age": 50,
"name": "Robert Anderson",
"daughters": [{
"age": 24,
"name": "Angela",
"husband": {
"age": 23,
"name": "James"
}
}]
}]
};
The obviousness of the information represented here is striking! This is an absolutely wild piece of data, and yet it makes perfect sense to a human developer. For a long time, as soon as I was planning to manipulate knowledge, I used to think "cyc-style ontology". Today, I'm wondering after all, what's wrong with messy data? Messy data's ok!!!
I'm working on a framework that would allow a hobbyist developer to shape a mind as easily as a chatbot. Well, I'm not saying that building up a good chatbot is easy (Mitsuku is probably a very complex project for example). Still, it's easier to make a chatbot than to make a Schwarzenegger-style metal bones AGI. I'd like a thinkbot developer to feel like working on a chatbot: simple tech, no pressure, hobby, relax, enjoy.
The only real problem is name collision if you're dealing with huge knowledge base. The answer to this is simply not to use named entities. Knowledge is just a list of objects. Objects have keys which lead to values. But they have no IDs, hence no name collision.
Inspired from the entity-component-system paradigm, here is some knowledge:
[
{
componentA: value1,
componentB: value2,
componentC: value3
},
{
componentA: value4,
componentD: value5
}
]
Here we have two entities. The various "aspects" of these entities are represented by the components they contain. Let's take a more concrete example.
The following represents "something":
It turns out this "something" is a human being.
This human is a woman.
[
{
race: "human",
gender: "female"
}
]
She's an entrepreneur.
[
{
race: "human",
gender: "female",
occupation: "entrepreneur"
}
]
She's also a mother.
[
{
race: "human",
gender: "female",
occupation: "entrepreneur"
motherOf: ["Cathy", "Jack"]
}
]
Being an entrepreneur and being a mother are two facets/aspects of her life, which are represented by two components.
Since it's easy to create a pattern-template couple for a chatbot, it should also be easy to create knowledge like this for a thinkbots. I can already hear people screaming "Scalability!" and "Consistency!"... Well my point is that
if you create your knowledge representation as simply as you can, you'll probably end up with something that's consistent with yourself, and consistent with how most people would represent things. Moreover, when expanding an already existing knowledge base, you'll instinctively follow the "coding style" of the kb, as any dev would.
So... screw OWL.
Where am I wrong?