Commonsense rules development: erinevus redaktsioonide vahel
Resümee puudub |
|||
| (ei näidata ühe teise kasutaja 2 vahepealset redaktsiooni) | |||
| 64. rida: | 64. rida: | ||
=== | === Identifying the predicates === | ||
(From Jurafsky: 15.4 "Event and State Representation") | |||
# Events are captured with predicates that take single event variable as an argument. Events are denoted by verbs. | # Events are captured with predicates that take single event variable as an argument. Events are denoted by verbs. | ||
| 73. rida: | 73. rida: | ||
# The logical connections between closely related inputs that share same predicate are satisfied without the need for additional inference. | # The logical connections between closely related inputs that share same predicate are satisfied without the need for additional inference. | ||
# Syntactic arguments form the arguments of semantic predicates. | # Syntactic arguments form the arguments of semantic predicates. | ||
= Encoding of reasons why something does not have normal capabilities = | |||
<pre> | |||
[ | |||
// classes have themselves as classes | |||
["be", "?:P", "?:P"], | |||
// taxonomy | |||
[["be", "bird", "?:X1"], "=>" ,["be", "organism", "?:X1"]], | |||
[["be", "organism", "?:X1"], "=>" ,["be", "object", "?:X1"]], | |||
// default parts (hasa) and capabilities of birds, airplanes, helicopters and generic objects | |||
[["be", "bird", "?:X1"], "=>", [["hasa", "wing", "?:X1"],"|",["$block", 10000, ["$not", ["hasa", "wing", "?:X1"]]]]], | |||
[["be", "bird", "?:X1"], "=>", [["capability", "fly", "?:X1"],"|",["$block", 1000, ["$not",["capability", "fly", "?:X1"]]]]], | |||
[["be", "airplane", "?:X1"], "=>", [["hasa", "wing", "?:X1"],"|",["$block", 10000, ["$not", ["hasa", "wing", "?:X1"]]]]], | |||
[["be", "airplane", "?:X1"], "=>", [["capability", "fly", "?:X1"],"|",["$block", 1000, ["$not",["capability", "fly", "?:X1"]]]]], | |||
[["be", "helicopter", "?:X1"], "=>", [["hasa", "rotor", "?:X1"],"|",["$block", 10000, ["$not", ["hasa", "rotor", "?:X1"]]]]], | |||
[["be", "helicopter", "?:X1"], "=>", [["capability", "fly", "?:X1"],"|",["$block", 1000, ["$not",["capability", "fly", "?:X1"]]]]], | |||
[["be", "object", "?:X1"], "=>", [["-hasa", "wing", "?:X1"],"|",["$block", 10, ["hasa", "wing", "?:X1"]]]], | |||
[["be", "object", "?:X1"], "=>", [["-hasa", "rotor", "?:X1"],"|",["$block", 10, ["hasa", "rotor", "?:X1"]]]], | |||
[["be", "object", "?:X1"], "=>", [["-capability", "fly", "?:X1"],"|",["$block", 1, ["capability", "fly", "?:X1"]]]], | |||
// concepts have unconditionally some parts | |||
//[[["be", "helicopter", "?:X1"], "&", ["concept", "?:X1"]], "=>", ["hasa", "rotor", "?:X1"]], | |||
//{"@role": "axiom", "@logic": [["-be", "bird", "?:O"], ["-hasa", "wing", "bird"], ["hasa","wing","?:O"], ["-capability","fly","?:O"]] }, | |||
//{"@role": "axiom", "@logic": [["-be", "?:P", "?:O"], ["-hasa", "wing", "?:P"], ["hasa","wing","?:O"], ["-capability","fly","?:O"]] }, | |||
/* | |||
{"@role": "axiom", "@logic": [["-be", "?:P", "?:O"], ["-capability","fly","?:P"], ["-hasa", "wing", "?:P"], ["hasa","wing","?:O"], ["-capability","fly","?:O"], ["$block", 20000, ["capability", "fly", "?:O"]]] }, | |||
{"@role": "axiom", "@logic": [["-be", "?:P", "?:O"], ["-capability","fly","?:P"], ["-hasa", "rotor", "?:P"], ["hasa","rotor","?:O"], ["-capability","fly","?:O"], ["$block", 20000, ["capability", "fly", "?:O"]]] }, | |||
{"@role": "axiom", "@logic": [["-be", "?:P", "?:O"], ["-capability","fly","?:P"], ["-hasa", "balloon", "?:P"], ["hasa","balloon","?:O"], ["-capability","fly","?:O"], ["$block", 20000, ["capability", "fly", "?:O"]]] }, | |||
*/ | |||
// if a class has some capability and a specific part which is used for this capability, then an instance of a class | |||
// without this part does not have that capability | |||
{"@role": "axiom", | |||
"@confidence": 90, | |||
"@logic": [["-be", "?:P", "?:O"], ["-hasa", "?:PART", "?:P"], ["-usedfor", "?:C", "?:PART"], //["-concept","?:P"], ["concept","?:O"], // ["-capability","?:C","?:P"], | |||
["hasa","?:PART","?:O"], | |||
["-capability","?:C","?:O"], | |||
["$block", 20000, ["capability", "?:C", "?:O"]]] }, | |||
// similar to the previous rule, but an instance of a part is present and is nonfunctional | |||
{"@role": "axiom", | |||
"@confidence": 80, | |||
"@logic": [["-be", "?:P", "?:O"], ["-hasa", "?:PART", "?:P"], ["-usedfor", "?:C", "?:PART"], ["concept","?:PI"], // ["-concept","?:P"], ["concept","?:O"], // ["-capability","?:C","?:P"], | |||
["-hasa", "?:PI", "?:O"], ["-be","?:PART","?:PI"], ["-property","nonfunctional","?:PI"], | |||
["-capability","?:C","?:O"], | |||
["$block", 20000, ["capability", "?:C", "?:O"]]] }, | |||
// similar to the previous rule, but all instances of this type of the object are nonfunctional | |||
/* | |||
The forall part is to be negated, hence also skolemized: | |||
.... [forall sk. [((haspart sk O) & (be PART sk)) => (property nonfunctional sk)]] .... => (cannotfly O) | |||
*/ | |||
{"@role": "axiom", | |||
"@confidence": 90, | |||
"@logic": [["-be", "?:P", "?:O"], ["-hasa", "?:PART", "?:P"], ["-usedfor", "?:C", "?:PART"], //["-concept","?:P"], ["concept","?:O"], // ["-capability","?:C","?:P"], | |||
//["hasa", ["sk1", "?:P", "?:O", "?:C", "?:PART"], "?:O"], ["be","?:PART",["sk1", "?:P", "?:O", "?:C", "?:PART"]], | |||
["hasa", ["sk1", "?:P", "?:O", "?:C", "?:PART"], "?:O"], //["be","?:PART", "sk1"], | |||
["-capability","?:C","?:O"], | |||
["$block", 20000, ["capability", "?:C", "?:O"]]] }, | |||
{"@role": "axiom", | |||
"@confidence": 90, | |||
"@logic": [["-be", "?:P", "?:O"], ["-hasa", "?:PART", "?:P"], ["-usedfor", "?:C", "?:PART"], //["-concept","?:P"], ["concept","?:O"], // ["-capability","?:C","?:P"], | |||
//["hasa", ["sk1", "?:P", "?:O", "?:C", "?:PART"], "?:O"], ["be","?:PART",["sk1", "?:P", "?:O", "?:C", "?:PART"]], | |||
["be","?:PART", ["sk1", "?:P", "?:O", "?:C", "?:PART"]], | |||
["-capability","?:C","?:O"], | |||
["$block", 20000, ["capability", "?:C", "?:O"]]] }, | |||
{"@role": "axiom", | |||
"@confidence": 90, | |||
"@logic": [["-be", "?:P", "?:O"], ["-hasa", "?:PART", "?:P"], ["-usedfor", "?:C", "?:PART"], //["-concept","?:P"], ["concept","?:O"], // ["-capability","?:C","?:P"], | |||
//["-property","nonfunctional",["sk1", "?:P", "?:O", "?:C", "?:PART"]], | |||
["-property","nonfunctional",["sk1", "?:P", "?:O", "?:C", "?:PART"]], | |||
["-capability","?:C","?:O"], | |||
["$block", 20000, ["capability", "?:C", "?:O"]]] }, | |||
// several things used for flying | |||
["usedfor", "fly", "wing"], | |||
["usedfor", "fly", "rotor"], | |||
["usedfor", "fly", "balloon"], | |||
// concept stuff | |||
/* | |||
["concept","bird"], | |||
["concept","airplane"], | |||
["concept","helicopter"], | |||
["concept","organism"], | |||
["concept","object"], | |||
//[["-concept","?:X"],["$block",0,["concept","?:X"]]], | |||
["-concept", "birdx1"], | |||
["-concept", "birdx2"], | |||
["-concept", "planex1"], | |||
["-concept", "planex2"], | |||
["-concept", "helix1"], | |||
["-concept", "helix2"], | |||
*/ | |||
// concrete | |||
// birds birdx1 and birdx2 | |||
// airplanes planex1, planex2 and planex3 | |||
// helicopters helix1 and helix2 | |||
{"@role": "assumption", "@logic": ["be","bird","birdx1"]}, | |||
{"@role": "assumption", "@logic": ["be","bird","birdx2"]}, | |||
{"@role": "assumption", "@logic": ["be","airplane","planex1"]}, | |||
{"@role": "assumption", "@logic": ["be","airplane","planex2"]}, | |||
{"@role": "assumption", "@logic": ["be","airplane","planex3"]}, | |||
{"@role": "assumption", "@logic": ["be","helicopter","helix1"]}, | |||
{"@role": "assumption", "@logic": ["be","helicopter","helix2"]}, | |||
// birdx2 is an exemplar of a class of nonwingedbird | |||
{"@role": "assumption", "@logic": ["be","nonwingedbird","birdx2"]}, | |||
[["be", "nonwingedbird", "?:X1"], "=>" ,["be", "bird", "?:X1"]], | |||
[["be", "nonwingedbird", "?:X1"], "=>" ,["-hasa", "wing", "?:X1"]], | |||
// defective things are nonfunctional | |||
[["property","defective","?:X"], "=>" , ["property","nonfunctional","?:X"]], | |||
// planex2 has a defective wing | |||
["hasa", "wingx2", "planex2"], | |||
["be", "wing", "wingx2"], | |||
["-concept", "wingx2"], | |||
["property","defective","wingx2"], | |||
// all wings of planex3 are defective | |||
[["-hasa", "?:P", "planex3"], ["-be", "wing", "?:P"], ["property","defective","?:P"]], | |||
// helix2 does not have a rotor | |||
["-hasa", "rotor", "helix2"], | |||
// question | |||
{"@question": ["capability","fly","?:X"]} | |||
//{"@question": [["capability","fly","?:X"],"&",["-concept","?:X"]]} | |||
] | |||
</pre> | |||
Viimane redaktsioon: 22. detsember 2021, kell 14:10
A place to develop and maintain commonsense rules for quasimodo etc.
Static knowledge encoding
Description of current Quasimodo/ConceptNet encoding coming soon
Event encoding
We use Neo-Davidsonian encoding with semantic roles:
- actor (subject)
- patient (object)
- ...
Event type is the verb that describes the event.
Example: "Brutus stabbed Caesar in the agora"
event_subject(brutus, ev1). event_object(caesar, ev1). event_type(stab, ev1). event_location(agora, ev1).
Connecting Static Knowledge to Events
This is mostly unsolved. This minimal example may help get things started:
"Did grape juice turn into wine?"
event_subject(grape_juice, ev1). event_type(turn_into, ev1).
There are multiple ways of encoding that this is a question, for example:
event_object(wine, ev1) => $ans(yes).
Assuming we have commonsense knowledge about fermenting grape juice:
be(grape_juice, X) => ovs(wine, turn_into, X). % reflexivity be(X, X).
Proposal SVO triples can be connected to events like this:
ovs(Z, Y, X) & event_type(Y, W) & event_subject(X, W) => event_object(Z, W).
This example does not fully make sense yet, since the event itself lacks context. Work in progress.
High level steps for constructing a logical form
Construction of logical form consists of the following steps:
- Finding predicates and specify their arguments (number, type)
- Concepts and events - predicate/1
- Roles - predicate/2
- Constructing corresponding atoms
- Dividing atoms on same level into groups
- Specifying connectives between atoms of each group and construct corresponding formulas.
- Dividing formulas and/or any of the remaining atoms of the same level into groups. If there are no groups go to step 7
- Specifyng connectives between elements of each group
- Specifying quantifers for the variables.
- Constructing the final FOL formula.
Identifying the predicates
(From Jurafsky: 15.4 "Event and State Representation")
- Events are captured with predicates that take single event variable as an argument. Events are denoted by verbs.
- There is no need to specifiy a fixed number of arguments for a given FOL predicate: as many roles and fillers can be glued on
- No more roles are postulated than are mentioned in input.
- The logical connections between closely related inputs that share same predicate are satisfied without the need for additional inference.
- Syntactic arguments form the arguments of semantic predicates.
Encoding of reasons why something does not have normal capabilities
[
// classes have themselves as classes
["be", "?:P", "?:P"],
// taxonomy
[["be", "bird", "?:X1"], "=>" ,["be", "organism", "?:X1"]],
[["be", "organism", "?:X1"], "=>" ,["be", "object", "?:X1"]],
// default parts (hasa) and capabilities of birds, airplanes, helicopters and generic objects
[["be", "bird", "?:X1"], "=>", [["hasa", "wing", "?:X1"],"|",["$block", 10000, ["$not", ["hasa", "wing", "?:X1"]]]]],
[["be", "bird", "?:X1"], "=>", [["capability", "fly", "?:X1"],"|",["$block", 1000, ["$not",["capability", "fly", "?:X1"]]]]],
[["be", "airplane", "?:X1"], "=>", [["hasa", "wing", "?:X1"],"|",["$block", 10000, ["$not", ["hasa", "wing", "?:X1"]]]]],
[["be", "airplane", "?:X1"], "=>", [["capability", "fly", "?:X1"],"|",["$block", 1000, ["$not",["capability", "fly", "?:X1"]]]]],
[["be", "helicopter", "?:X1"], "=>", [["hasa", "rotor", "?:X1"],"|",["$block", 10000, ["$not", ["hasa", "rotor", "?:X1"]]]]],
[["be", "helicopter", "?:X1"], "=>", [["capability", "fly", "?:X1"],"|",["$block", 1000, ["$not",["capability", "fly", "?:X1"]]]]],
[["be", "object", "?:X1"], "=>", [["-hasa", "wing", "?:X1"],"|",["$block", 10, ["hasa", "wing", "?:X1"]]]],
[["be", "object", "?:X1"], "=>", [["-hasa", "rotor", "?:X1"],"|",["$block", 10, ["hasa", "rotor", "?:X1"]]]],
[["be", "object", "?:X1"], "=>", [["-capability", "fly", "?:X1"],"|",["$block", 1, ["capability", "fly", "?:X1"]]]],
// concepts have unconditionally some parts
//[[["be", "helicopter", "?:X1"], "&", ["concept", "?:X1"]], "=>", ["hasa", "rotor", "?:X1"]],
//{"@role": "axiom", "@logic": [["-be", "bird", "?:O"], ["-hasa", "wing", "bird"], ["hasa","wing","?:O"], ["-capability","fly","?:O"]] },
//{"@role": "axiom", "@logic": [["-be", "?:P", "?:O"], ["-hasa", "wing", "?:P"], ["hasa","wing","?:O"], ["-capability","fly","?:O"]] },
/*
{"@role": "axiom", "@logic": [["-be", "?:P", "?:O"], ["-capability","fly","?:P"], ["-hasa", "wing", "?:P"], ["hasa","wing","?:O"], ["-capability","fly","?:O"], ["$block", 20000, ["capability", "fly", "?:O"]]] },
{"@role": "axiom", "@logic": [["-be", "?:P", "?:O"], ["-capability","fly","?:P"], ["-hasa", "rotor", "?:P"], ["hasa","rotor","?:O"], ["-capability","fly","?:O"], ["$block", 20000, ["capability", "fly", "?:O"]]] },
{"@role": "axiom", "@logic": [["-be", "?:P", "?:O"], ["-capability","fly","?:P"], ["-hasa", "balloon", "?:P"], ["hasa","balloon","?:O"], ["-capability","fly","?:O"], ["$block", 20000, ["capability", "fly", "?:O"]]] },
*/
// if a class has some capability and a specific part which is used for this capability, then an instance of a class
// without this part does not have that capability
{"@role": "axiom",
"@confidence": 90,
"@logic": [["-be", "?:P", "?:O"], ["-hasa", "?:PART", "?:P"], ["-usedfor", "?:C", "?:PART"], //["-concept","?:P"], ["concept","?:O"], // ["-capability","?:C","?:P"],
["hasa","?:PART","?:O"],
["-capability","?:C","?:O"],
["$block", 20000, ["capability", "?:C", "?:O"]]] },
// similar to the previous rule, but an instance of a part is present and is nonfunctional
{"@role": "axiom",
"@confidence": 80,
"@logic": [["-be", "?:P", "?:O"], ["-hasa", "?:PART", "?:P"], ["-usedfor", "?:C", "?:PART"], ["concept","?:PI"], // ["-concept","?:P"], ["concept","?:O"], // ["-capability","?:C","?:P"],
["-hasa", "?:PI", "?:O"], ["-be","?:PART","?:PI"], ["-property","nonfunctional","?:PI"],
["-capability","?:C","?:O"],
["$block", 20000, ["capability", "?:C", "?:O"]]] },
// similar to the previous rule, but all instances of this type of the object are nonfunctional
/*
The forall part is to be negated, hence also skolemized:
.... [forall sk. [((haspart sk O) & (be PART sk)) => (property nonfunctional sk)]] .... => (cannotfly O)
*/
{"@role": "axiom",
"@confidence": 90,
"@logic": [["-be", "?:P", "?:O"], ["-hasa", "?:PART", "?:P"], ["-usedfor", "?:C", "?:PART"], //["-concept","?:P"], ["concept","?:O"], // ["-capability","?:C","?:P"],
//["hasa", ["sk1", "?:P", "?:O", "?:C", "?:PART"], "?:O"], ["be","?:PART",["sk1", "?:P", "?:O", "?:C", "?:PART"]],
["hasa", ["sk1", "?:P", "?:O", "?:C", "?:PART"], "?:O"], //["be","?:PART", "sk1"],
["-capability","?:C","?:O"],
["$block", 20000, ["capability", "?:C", "?:O"]]] },
{"@role": "axiom",
"@confidence": 90,
"@logic": [["-be", "?:P", "?:O"], ["-hasa", "?:PART", "?:P"], ["-usedfor", "?:C", "?:PART"], //["-concept","?:P"], ["concept","?:O"], // ["-capability","?:C","?:P"],
//["hasa", ["sk1", "?:P", "?:O", "?:C", "?:PART"], "?:O"], ["be","?:PART",["sk1", "?:P", "?:O", "?:C", "?:PART"]],
["be","?:PART", ["sk1", "?:P", "?:O", "?:C", "?:PART"]],
["-capability","?:C","?:O"],
["$block", 20000, ["capability", "?:C", "?:O"]]] },
{"@role": "axiom",
"@confidence": 90,
"@logic": [["-be", "?:P", "?:O"], ["-hasa", "?:PART", "?:P"], ["-usedfor", "?:C", "?:PART"], //["-concept","?:P"], ["concept","?:O"], // ["-capability","?:C","?:P"],
//["-property","nonfunctional",["sk1", "?:P", "?:O", "?:C", "?:PART"]],
["-property","nonfunctional",["sk1", "?:P", "?:O", "?:C", "?:PART"]],
["-capability","?:C","?:O"],
["$block", 20000, ["capability", "?:C", "?:O"]]] },
// several things used for flying
["usedfor", "fly", "wing"],
["usedfor", "fly", "rotor"],
["usedfor", "fly", "balloon"],
// concept stuff
/*
["concept","bird"],
["concept","airplane"],
["concept","helicopter"],
["concept","organism"],
["concept","object"],
//[["-concept","?:X"],["$block",0,["concept","?:X"]]],
["-concept", "birdx1"],
["-concept", "birdx2"],
["-concept", "planex1"],
["-concept", "planex2"],
["-concept", "helix1"],
["-concept", "helix2"],
*/
// concrete
// birds birdx1 and birdx2
// airplanes planex1, planex2 and planex3
// helicopters helix1 and helix2
{"@role": "assumption", "@logic": ["be","bird","birdx1"]},
{"@role": "assumption", "@logic": ["be","bird","birdx2"]},
{"@role": "assumption", "@logic": ["be","airplane","planex1"]},
{"@role": "assumption", "@logic": ["be","airplane","planex2"]},
{"@role": "assumption", "@logic": ["be","airplane","planex3"]},
{"@role": "assumption", "@logic": ["be","helicopter","helix1"]},
{"@role": "assumption", "@logic": ["be","helicopter","helix2"]},
// birdx2 is an exemplar of a class of nonwingedbird
{"@role": "assumption", "@logic": ["be","nonwingedbird","birdx2"]},
[["be", "nonwingedbird", "?:X1"], "=>" ,["be", "bird", "?:X1"]],
[["be", "nonwingedbird", "?:X1"], "=>" ,["-hasa", "wing", "?:X1"]],
// defective things are nonfunctional
[["property","defective","?:X"], "=>" , ["property","nonfunctional","?:X"]],
// planex2 has a defective wing
["hasa", "wingx2", "planex2"],
["be", "wing", "wingx2"],
["-concept", "wingx2"],
["property","defective","wingx2"],
// all wings of planex3 are defective
[["-hasa", "?:P", "planex3"], ["-be", "wing", "?:P"], ["property","defective","?:P"]],
// helix2 does not have a rotor
["-hasa", "rotor", "helix2"],
// question
{"@question": ["capability","fly","?:X"]}
//{"@question": [["capability","fly","?:X"],"&",["-concept","?:X"]]}
]