Hi. I hope you all doing good. I’m really glad that you people advanced a
lot in this topic.
I saw your presentations talking about, link grammars, symbolic
representations, and about using similarities and substitutions.
I’ll try to be very concise. In short my statement is that with
similarities and substitutions you can have solutions of previously
unsolved problems. In other words, generate new knowledge using previous
related knowledge.
I apologize in advance for my lack of proper technical terms. But, if the
idea get through, that will be enough for me. I hope my explanation is
understandable.
The following is a graph composed by sub-graphs, the nodes are linked by
the equal ‘=’ relation, which goes in both directions in case there is no
more links, by default is left to right. The nodes can be single values or
sets.
For briefness and explain-ability I will use this notation instead of an
actual graph (image).
About my notations:
- [v1, v2] is a set,
- '=' is the relation,
- Every line can be seen as a sub-graph.
- I will use // to add a comment for explanation
- A ‘query’ is a new node that has no similarity relation in the graph
and therefore the algorithm needs to be used
*The initial state of the graph and a case of a query and the result:*
Alice = programmer
Bob = engineer
Mary = designer
John = programmer
Rose = engineer
Joe = designer
[engineer, job] = [model, system]
[programmer, job] = [develop, system]
[designer, job] = [design, UI]
Alice = available
Bob = available
Mary = available
Alice = [available, programmer]
Bob = [available, engineer]
Mary = [available, designer]
// initially available, but later relations are updated to working
John = working
Rose = working
Joe = working
R1 = name
R2 = name
solution = [
[[available, engineer], [engineer, job]],
[[available, programmer], [programmer, job]],
[[available, designer], [designer, job]]
]
[new, request] = [unsolved, request]
[request, name] = request
[solution, name] = solution
[resolve, request] = work
work = [solution, for, request]
// if we have a [unsolved, request] we want to [resolve, request]
// this is a simplification. It could have more meaning if we add more
details to this relation
[unsolved, request] = [resolve, request]
// the query is [Medical, report, system]
[new, request] = [Medical, report, system] // the query is linked to be
equal to a [new, request]
[Medical, report, system] = [request, R1] // generated [request, R1] to
identify the query
[request, R1] = [unsolved, request] // given that [unsolved, request] =
[new, request]
[request, R1] = [request, name] // given that R1 = name
[request, R1] = request
[request, R1] = [resolve, request] // given that: [unsolved, request] =
[request, R1]
[resolve, [request, R1]] = work // given that: request = [request, R1]
// here [solution, R1] can be generated by a stored procedure for
simplicity, and in this case is used to
// identify the node that will be the actual solution
[solution, for, [request, R1]] = [solution, R1] // given that: work =
[resolve, request], and work = [solution, for, request]
[solution, R1] = [solution, name]
[solution, R1] = solution
// final state, here the replacement for the node ‘solution’ is used to
produce the final relation
[solution, R1] = [[Rose, [model, system]], [John, [develop, system]], [Joe,
[design, UI]]]
// For the next part, to do a new query I will do the following to avoid
ambiguity
[request, R1] != [new, request] // this can be resolve in multiple ways, in
this case I’ll go with this
*At this point I will do a new query to illustrate how with substitutions
we can generate a new knowledge, given the previous state of graph.*
[new, request] = [Hotel, management, system] // new query is [Hotel,
management, system]
[Hotel, management, system] = [request, R2] // generate a identification
node
[request, R2] = [request, name] // given that: R2 = name
[request, name] = [request, R1] // we have this relation, then
[request, R2] = [request, R1] // therefore
[request, R2] = [solution, R1] // is the current most similar, *but*
[request, R2] is not *similar enough* to [solution, R1] because:
If we take into account the full sequence of substitutions we will notice
that
[Hotel, management, system] is *not equal* to [Medical, report, system]
We can do better, if we use 'solution' instead of [solution, R1]:
[solution, R1] = solution
[request, R2] = solution // given the previous relation
[request, R2] = [
[[available, engineer], [engineer, job]],
[[available, programmer], [programmer, job]],
[[available, designer], [designer, job]]
]
[request, R2] = [
[Bob, [model, system]],
[Alice, [develop, system]],
[Mary, [design, UI]]
]
// final output
[solution, R2] = [
[Bob, [model, system]],
[Alice, [develop, system]],
[Mary, [design, UI]]
]
This example is not really that interesting, and looking at the result it
seems pretty obvious. But the key here is that is generalizable, and is
just substitutions.
This substitution mechanism can be applied to multiple cases to solve any
kind of situations, given that it has enough previous knowledge. Is like
applying a formula, step by step. Every step is guided by a previously
known relation. This mechanism should be the algorithm applied directly to
the graph, so that is the process with which the graph change from one
state to the next state.
About the type system: I personally think that is not needed. I think that
the type information is implicit in the data stored in the graph, for
example: designer is a type, joe is an instance of designer. If is needed
we can create the following relation: designer = type. To be more explicit.
Thanks again for your time, and for the great work you are doing. I hope I
am being useful.
--
You received this message because you are subscribed to the Google Groups
"opencog" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/opencog/c4e59624-729b-46bd-987d-0575c1992643n%40googlegroups.com.