I’m always a bit frustrated when people talk about a “knowledge graph”; the concept seems obviously useful, but also obviously incomplete. What precisely are the nodes and edges in the graph? What are the type signatures of these things?
I was thinking about this over breakfast. Here are some guesses.
One simple model is that each “node” in the graph is essentially a trigger-action plan. There’s a small pattern-matcher, for example a pattern which recognizes root-finding problems with quadratic functions. When the pattern matches something, it triggers a bunch of possible connections—e.g. one connection might be a pointer to the quadratic equation, another might be a connection to polynomial factorization, etc. Each of those is itself either another node (e.g. the quadratic equation node) or, in the base-case, a simple action to take (e.g. writing some symbols on paper).
In this model, teaching involves a few different pieces:
Creation of the node itself—just giving it a name and emphasizing importance can help
Refining the pattern—e.g. practice recognizing root-finding problems with quadratic functions. Examples are probably the best tool here.
Installing the “downstream” pointers to other concepts, and “upstream” pointers from other concepts to this one. “Downstream” pointers would be things like “here’s a list of tricks you can use to solve this sort of problem”, “upstream” pointers would be things like “this is itself a root-finding method, so look for quadratics when you need to solve equations, and also use other equation-solving tools like adding a number to both sides”.
Giving weight to upstream/downstream concepts—i.e. indicating which connections are more/less important, so they’re properly prioritized in the list of “actions” triggered when a pattern is detected.
Building the habit of actually checking for the pattern, and actually triggering the “actions” when the pattern is matched. I.e. practice, preferably on a fairly wide variety of problems to minimize “out-of-distribution”-style failures.
So that’s one model.
That model seems to capture a lot of useful things about procedural knowledge graphs, but it seems like there’s a separate kind of knowledge graph for world-models. The part above is analogous to a program (it guides what-to-do), whereas a world-modelling knowledge graph would be analogous to the contents of a database; it’s the datastructure on which the procedural knowledge graph operates. My current best model for a world-modelling knowledge graph looks something like this—it’s a causal model recursively built out of reusable sub-models.
Teaching components of the world-modelling knowledge graph would involve somewhat different pieces:
We’d typically be teaching some prototypical submodel, a building block to use in many different places in the world-model. For instance, in introductory physics these submodels would be things like “masses” and “inclined planes” and “masses on inclined planes”.
Teaching the submodel itself means walking through the components of the little causal subgraph the model specifies—e.g. how masses on inclined planes behave.
The submodel will have some pattern-matcher associated with it, for recognizing components of the real world to which the submodel applies. This means examples, to practice recognizing e.g. “masses” and “inclined planes” and “masses on inclined planes”.
The submodel will itself have submodels, and these are the pointers out to other nodes. E.g. if there’s a submodel for the prototypical mass-on-inclined-plane problem, then it should have a pointer to a “point mass” submodel. Here, the real key is the connections which are not present—e.g. the point-mass submodel doesn’t care about the shape of the object in question, it’s just approximated as a point.
It feels like there should be a clean way to unify the procedural and world-modelling knowledge graphs. I’m not sure what it is. I’m sure somebody will argue that it’s all procedural and the world-modelling is just embedded in a bunch of procedures, but I’m not convinced; it sure feels like there’s a graph of data on which the program operates. I could see it working the opposite way, though… maybe it’s all world-modelling, and part of the world-model is something like “model of the best way to solve this problem”, and our “procedural” behavior is actually just prediction on that part of the world model (sort predictive-processing-esque).
I’m always a bit frustrated when people talk about a “knowledge graph”; the concept seems obviously useful, but also obviously incomplete. What precisely are the nodes and edges in the graph? What are the type signatures of these things?
I was thinking about this over breakfast. Here are some guesses.
One simple model is that each “node” in the graph is essentially a trigger-action plan. There’s a small pattern-matcher, for example a pattern which recognizes root-finding problems with quadratic functions. When the pattern matches something, it triggers a bunch of possible connections—e.g. one connection might be a pointer to the quadratic equation, another might be a connection to polynomial factorization, etc. Each of those is itself either another node (e.g. the quadratic equation node) or, in the base-case, a simple action to take (e.g. writing some symbols on paper).
In this model, teaching involves a few different pieces:
Creation of the node itself—just giving it a name and emphasizing importance can help
Refining the pattern—e.g. practice recognizing root-finding problems with quadratic functions. Examples are probably the best tool here.
Installing the “downstream” pointers to other concepts, and “upstream” pointers from other concepts to this one. “Downstream” pointers would be things like “here’s a list of tricks you can use to solve this sort of problem”, “upstream” pointers would be things like “this is itself a root-finding method, so look for quadratics when you need to solve equations, and also use other equation-solving tools like adding a number to both sides”.
Giving weight to upstream/downstream concepts—i.e. indicating which connections are more/less important, so they’re properly prioritized in the list of “actions” triggered when a pattern is detected.
Building the habit of actually checking for the pattern, and actually triggering the “actions” when the pattern is matched. I.e. practice, preferably on a fairly wide variety of problems to minimize “out-of-distribution”-style failures.
So that’s one model.
That model seems to capture a lot of useful things about procedural knowledge graphs, but it seems like there’s a separate kind of knowledge graph for world-models. The part above is analogous to a program (it guides what-to-do), whereas a world-modelling knowledge graph would be analogous to the contents of a database; it’s the datastructure on which the procedural knowledge graph operates. My current best model for a world-modelling knowledge graph looks something like this—it’s a causal model recursively built out of reusable sub-models.
Teaching components of the world-modelling knowledge graph would involve somewhat different pieces:
We’d typically be teaching some prototypical submodel, a building block to use in many different places in the world-model. For instance, in introductory physics these submodels would be things like “masses” and “inclined planes” and “masses on inclined planes”.
Teaching the submodel itself means walking through the components of the little causal subgraph the model specifies—e.g. how masses on inclined planes behave.
The submodel will have some pattern-matcher associated with it, for recognizing components of the real world to which the submodel applies. This means examples, to practice recognizing e.g. “masses” and “inclined planes” and “masses on inclined planes”.
The submodel will itself have submodels, and these are the pointers out to other nodes. E.g. if there’s a submodel for the prototypical mass-on-inclined-plane problem, then it should have a pointer to a “point mass” submodel. Here, the real key is the connections which are not present—e.g. the point-mass submodel doesn’t care about the shape of the object in question, it’s just approximated as a point.
It feels like there should be a clean way to unify the procedural and world-modelling knowledge graphs. I’m not sure what it is. I’m sure somebody will argue that it’s all procedural and the world-modelling is just embedded in a bunch of procedures, but I’m not convinced; it sure feels like there’s a graph of data on which the program operates. I could see it working the opposite way, though… maybe it’s all world-modelling, and part of the world-model is something like “model of the best way to solve this problem”, and our “procedural” behavior is actually just prediction on that part of the world model (sort predictive-processing-esque).
There is some research on knowledge graphs as a data-structure, and as a tool in AI. Wikipedia and a bunch of references.