web refactoring
This commit is contained in:
parent
524c37895b
commit
ba5caca8e7
@ -1,31 +0,0 @@
|
||||
{
|
||||
"tag" : "bert",
|
||||
"nodes" : {
|
||||
"0" : {
|
||||
"id" : 0,
|
||||
"name" : "Bert"
|
||||
},
|
||||
"9" : {
|
||||
"id" : 9,
|
||||
"name" : "Bert's Hat"
|
||||
}
|
||||
},
|
||||
"relations" : {
|
||||
"0" : {
|
||||
"id" : 0,
|
||||
"name" : "nameOf",
|
||||
"parent" : 0,
|
||||
"child" : 2,
|
||||
"childWeb" : "root"
|
||||
},
|
||||
"1" : {
|
||||
"id" : 1,
|
||||
"name" : "qualiaOf",
|
||||
"parent" : 1,
|
||||
"parentWeb" : "color",
|
||||
"child" : 9
|
||||
}
|
||||
},
|
||||
"children" : [
|
||||
]
|
||||
}
|
||||
58
data/webs/characters/bert.json
Normal file
58
data/webs/characters/bert.json
Normal file
@ -0,0 +1,58 @@
|
||||
{
|
||||
"tag" : "bert",
|
||||
"nodes" : {
|
||||
"0" : {
|
||||
"id" : 0,
|
||||
"name" : "Bert"
|
||||
},
|
||||
"9" : {
|
||||
"id" : 9,
|
||||
"name" : "Bert's Hat"
|
||||
}
|
||||
},
|
||||
"relations" : {
|
||||
"0" : {
|
||||
"comment" : "Bert is the name of the ai's sense of self",
|
||||
"id" : 0,
|
||||
"name" : "nameOf",
|
||||
"parent" : 0,
|
||||
"child" : 2,
|
||||
"childWeb" : "root"
|
||||
},
|
||||
"1" : {
|
||||
"comment" : "The color of bert's hat is blue",
|
||||
"id" : 1,
|
||||
"name" : "qualiaOf",
|
||||
"parent" : 1,
|
||||
"parentWeb" : "color",
|
||||
"child" : 9
|
||||
},
|
||||
"2" : {
|
||||
"comment" : "'Bert' is an instance of a name",
|
||||
"id" : 2,
|
||||
"name" : "instanceOf",
|
||||
"parent" : 0,
|
||||
"parentWeb" : "name",
|
||||
"child" : 0
|
||||
},
|
||||
"3" : {
|
||||
"comment" : "The self possess bert's hat",
|
||||
"id" : 3,
|
||||
"name" : "possessionOf",
|
||||
"parent" : 2,
|
||||
"parentWeb" : "root",
|
||||
"child" : 9
|
||||
},
|
||||
"4" : {
|
||||
"comment" : "Bert's hat is an instance of a hat",
|
||||
"id" : 4,
|
||||
"name" : "instanceOf",
|
||||
"parent" : 8,
|
||||
"parentWeb" : "root",
|
||||
"child" : 9
|
||||
}
|
||||
},
|
||||
"children" : [
|
||||
"./data/webs/root.json"
|
||||
]
|
||||
}
|
||||
6
data/webs/conversations/convo1.json
Normal file
6
data/webs/conversations/convo1.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"tag" : "convo1",
|
||||
"children" : [
|
||||
"./data/webs/characters/bert.json"
|
||||
]
|
||||
}
|
||||
6
data/webs/linguistics/linguistics.json
Normal file
6
data/webs/linguistics/linguistics.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"tag": "linguistics",
|
||||
"children" : [
|
||||
"./data/webs/linguistics/name.json"
|
||||
]
|
||||
}
|
||||
19
data/webs/linguistics/name.json
Normal file
19
data/webs/linguistics/name.json
Normal file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"tag": "name",
|
||||
"nodes" : {
|
||||
"0" : {
|
||||
"id" : 0,
|
||||
"name" : "name"
|
||||
}
|
||||
},
|
||||
"relations" : {
|
||||
"0" : {
|
||||
"comment" : "name is an instance of a concept",
|
||||
"id" : 0,
|
||||
"name" : "instanceOf",
|
||||
"parent" : "0",
|
||||
"parentWeb" : "concept",
|
||||
"child" : 0
|
||||
}
|
||||
}
|
||||
}
|
||||
12
data/webs/philosophy/concept.json
Normal file
12
data/webs/philosophy/concept.json
Normal file
@ -0,0 +1,12 @@
|
||||
{
|
||||
"tag": "concept",
|
||||
"nodes" : {
|
||||
"0" : {
|
||||
"id" : 0,
|
||||
"name" : "concept"
|
||||
}
|
||||
},
|
||||
"anchors" : {
|
||||
"concept" : 0
|
||||
}
|
||||
}
|
||||
6
data/webs/philosophy/philosophy.json
Normal file
6
data/webs/philosophy/philosophy.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"tag": "philosophy",
|
||||
"children" : [
|
||||
"./data/webs/philosophy/concept.json"
|
||||
]
|
||||
}
|
||||
@ -3,11 +3,11 @@
|
||||
"nodes" : {
|
||||
"0" : {
|
||||
"id" : 0,
|
||||
"name" : "Color"
|
||||
"name" : "color"
|
||||
},
|
||||
"1" : {
|
||||
"id" : 1,
|
||||
"name" : "Blue"
|
||||
"name" : "blue"
|
||||
}
|
||||
},
|
||||
"relations" : {
|
||||
|
||||
@ -1,10 +1,6 @@
|
||||
{
|
||||
"tag" : "root",
|
||||
"nodes" : {
|
||||
"1" : {
|
||||
"id" : 1,
|
||||
"name" : "Name"
|
||||
},
|
||||
"2" : {
|
||||
"id" : 2,
|
||||
"name" : "Self"
|
||||
@ -31,72 +27,53 @@
|
||||
},
|
||||
"8" : {
|
||||
"id" : 8,
|
||||
"name" : "Hat"
|
||||
},
|
||||
"10" : {
|
||||
"id" : 10,
|
||||
"name" : "concept"
|
||||
"name" : "hat"
|
||||
}
|
||||
},
|
||||
"relations" : {
|
||||
"1" : {
|
||||
"comment" : "The self is an instance of a person",
|
||||
"id" : 1,
|
||||
"name" : "instanceOf",
|
||||
"parent" : 3,
|
||||
"child" : 2
|
||||
},
|
||||
"2" : {
|
||||
"id" : 2,
|
||||
"name" : "instanceOf",
|
||||
"parent" : 1,
|
||||
"child" : 0,
|
||||
"childWeb" : "bert"
|
||||
},
|
||||
"3" : {
|
||||
"comment" : "The other is an instance of a person",
|
||||
"id" : 3,
|
||||
"name" : "instanceOf",
|
||||
"parent" : 3,
|
||||
"child" : 4
|
||||
},
|
||||
"4" : {
|
||||
"comment" : "The current conversation has the other as a participant",
|
||||
"id" : 4,
|
||||
"name" : "participantOf",
|
||||
"parent" : 7,
|
||||
"child" : 4
|
||||
},
|
||||
"5" : {
|
||||
"comment" : "The current conversation has the self as a participant",
|
||||
"id" : 5,
|
||||
"name" : "participantOf",
|
||||
"parent" : 7,
|
||||
"child" : 2
|
||||
},
|
||||
"6" : {
|
||||
"id" : 6,
|
||||
"name" : "possessionOf",
|
||||
"parent" : 2,
|
||||
"child" : 9,
|
||||
"childWeb" : "bert"
|
||||
},
|
||||
"7" : {
|
||||
"id" : 7,
|
||||
"name" : "instanceOf",
|
||||
"parent" : 8,
|
||||
"child" : 9,
|
||||
"childWeb" : "bert"
|
||||
},
|
||||
"8" : {
|
||||
"comment" : "hat is an instance of a concept",
|
||||
"id" : 8,
|
||||
"name" : "instanceOf",
|
||||
"parent" : 10,
|
||||
"parent" : 0,
|
||||
"parentWeb" : "concept",
|
||||
"child" : 8
|
||||
}
|
||||
},
|
||||
"anchors" : {
|
||||
"self" : 2,
|
||||
"concept" : 10
|
||||
"self" : 2
|
||||
},
|
||||
"children" : [
|
||||
"./data/webs/qualia/qualia.json",
|
||||
"./data/webs/bert.json"
|
||||
"./data/webs/linguistics/linguistics.json",
|
||||
"./data/webs/philosophy/philosophy.json",
|
||||
"./data/webs/qualia/qualia.json"
|
||||
]
|
||||
}
|
||||
@ -1,6 +1,6 @@
|
||||
{
|
||||
"tag" : "root",
|
||||
"tag" : "web",
|
||||
"children" : [
|
||||
"./data/webs/root.json"
|
||||
"./data/webs/conversations/convo1.json"
|
||||
]
|
||||
}
|
||||
11
docs/ethics_of_testing.txt
Normal file
11
docs/ethics_of_testing.txt
Normal file
@ -0,0 +1,11 @@
|
||||
Is it ethical to test a conversational AI?
|
||||
Essentially becomes "are you killing a person every time you shut down the AI?"
|
||||
Essentially becomes "is this AI a person?"
|
||||
|
||||
Thought experiment:
|
||||
Lets say there was a specific chunk of the brain that stored all memories.
|
||||
Taking that chunk out of a person's brain probably isn't great.
|
||||
If you take that chunk of brain out of a person and put it into a brain that was missing that chunk, have you killed them?
|
||||
Leaning towards no. Same concept as if you replaced a part of someone's brain with a machine with the same data+function.
|
||||
Ergo, as long as I'm not deleting memories I don't think it's outright murder.
|
||||
Still kinda murky tho
|
||||
3
docs/style_guide.txt
Normal file
3
docs/style_guide.txt
Normal file
@ -0,0 +1,3 @@
|
||||
|
||||
1. concepts should all have their node names be lower case (ie "color" not "Color")
|
||||
|
||||
@ -90,7 +90,12 @@ public class KnowledgeWeb {
|
||||
} else {
|
||||
lookupId = "node-" + relation.webTag + relation.parent;
|
||||
}
|
||||
int nodeId = crossRelationLookupMap.get(lookupId);
|
||||
int nodeId = 0;
|
||||
try {
|
||||
nodeId = crossRelationLookupMap.get(lookupId);
|
||||
} catch(NullPointerException ex){
|
||||
throw new Error("Failed to find node link " + lookupId + " in relation in web " + relation.webTag);
|
||||
}
|
||||
relation.parent = nodeId;
|
||||
|
||||
if(relation.childWeb != null){
|
||||
@ -139,7 +144,10 @@ public class KnowledgeWeb {
|
||||
* @return Merged knowledge web
|
||||
*/
|
||||
private static KnowledgeWeb recursivelyLoad(Map<String,Integer> crossRelationLookupMap, List<String> foundTags, String startPoint){
|
||||
KnowledgeWeb rVal = FileUtils.loadObjectFromFile(new File(startPoint), KnowledgeWeb.class);;
|
||||
KnowledgeWeb rVal = FileUtils.loadObjectFromFile(new File(startPoint), KnowledgeWeb.class);
|
||||
if(rVal == null){
|
||||
throw new Error("Failed to load file! " + startPoint);
|
||||
}
|
||||
if(foundTags.contains(rVal.getTag())){
|
||||
throw new UnsupportedOperationException("Trying to load two webs with the same tag! " + rVal.getTag());
|
||||
}
|
||||
|
||||
@ -44,6 +44,11 @@ public class Relation {
|
||||
*/
|
||||
String childWeb;
|
||||
|
||||
/**
|
||||
* An optional comment applied to the relation
|
||||
*/
|
||||
String comment;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* @param name The name of the relation
|
||||
|
||||
@ -14,7 +14,7 @@ public class NameQueryFilter {
|
||||
* Filters a set of nodes to a singleton based on a name
|
||||
*/
|
||||
public static Node withNodeName(List<Node> nodes, String name){
|
||||
List<Node> filtered = nodes.stream().filter(node -> !node.getName().equals(name)).collect(Collectors.toList());
|
||||
List<Node> filtered = nodes.stream().filter(node -> node.getName().equals(name)).collect(Collectors.toList());
|
||||
if(filtered.size() != 1){
|
||||
throw new UnsupportedOperationException("TODO: handle ambiguous case");
|
||||
}
|
||||
|
||||
@ -15,7 +15,7 @@ public class AnswerTests {
|
||||
public void testAnswerQuery(){
|
||||
Globals.init("./data/webs/test/web.json");
|
||||
Quote result = ConvAI.simFrame("What color is your hat?");
|
||||
assertEquals(result.getRaw().contains("Blue"), true);
|
||||
assertEquals(result.getRaw().contains("blue"), true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -24,7 +24,7 @@ public class QueryTests {
|
||||
|
||||
Quote response = ConvAI.simFrame("What color is your hat?");
|
||||
|
||||
boolean responseContainsBlue = response.getRaw().contains("Blue");
|
||||
boolean responseContainsBlue = response.getRaw().contains("blue");
|
||||
assertEquals(responseContainsBlue, true);
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user