internal static void RunAnswerGeneralizationDev() { var trainDataset = Configuration.GetQuestionDialogsTrain(); var devDataset = Configuration.GetQuestionDialogsDev(); var simpleQuestions = Configuration.GetSimpleQuestionsDump(); var db = Configuration.Db; var trainDialogs = trainDataset.Dialogs.ToArray(); var linkedUtterancesTrain = cachedLinkedUtterancesTrain(simpleQuestions, db, trainDialogs); //var graph = cachedEntityGraph(simpleQuestions, trainDialogs, linkedUtterancesTrain); var graph = new ComposedGraph(new FreebaseGraphLayer(db)); var linker = new GraphDisambiguatedLinker(db, "./verbs.lex"); var cachedLinker = new CachedLinker(trainDialogs.Select(d => d.Question).ToArray(), linkedUtterancesTrain, linker); var generalizer = new PatternGeneralizer(graph, cachedLinker.LinkUtterance); var testDialogs = 0; //train for (var i = 0; i < trainDialogs.Length - testDialogs; ++i) { var trainDialog = trainDialogs[i]; var question = trainDialog.Question; var answerNodeId = FreebaseDbProvider.GetId(trainDialog.AnswerMid); var answerNode = graph.GetNode(answerNodeId); generalizer.AddExample(question, answerNode); } /*/ * //evaluation on dev set * foreach (var devDialog in trainDialogs) * { * writeLine(devDialog.Question); * writeLine("\t" + cachedLinker.LinkUtterance(devDialog.Question)); * var desiredAnswerLabel = db.GetLabel(devDialog.AnswerMid); * writeLine("\tDesired answer: {0} ({1})", desiredAnswerLabel, devDialog.AnswerMid); * var answer = generalizer.GetAnswer(devDialog.Question); * if (answer == null) * { * writeLine("\tNo answer."); * } * else * { * var answerLabel = db.GetLabel(FreebaseLoader.GetMid(answer.Value.Data)); * writeLine("\tGeneralizer output: {0} {1}", answerLabel, answer); * } * writeLine(); * } * /**/ var result = generalizer.GetAnswer("What county is ovens auditorium in"); //var result = generalizer.GetAnswer("What is Obama gender?"); //var result = generalizer.GetAnswer("is mir khasim ali of the male or female gender"); }
internal static void RunToyGeneralization() { var data = new ExplicitLayer(); var A = data.CreateReference("A"); var B = data.CreateReference("B"); var C = data.CreateReference("C"); var D = data.CreateReference("D"); var H1 = data.CreateReference("H1"); var H2 = data.CreateReference("H2"); var H3 = data.CreateReference("H3"); var fH1 = data.CreateReference("fH1"); var fH2 = data.CreateReference("fH2"); var fH3 = data.CreateReference("fH3"); var H = data.CreateReference("H"); var X = data.CreateReference("X"); var edge1 = "e1"; var edgeZ1 = "z1"; var edgeZ2 = "z2"; var edgeIs = "is"; data.AddEdge(A, edge1, H1); data.AddEdge(B, edge1, H2); data.AddEdge(C, edge1, H3); data.AddEdge(A, edge1, fH1); data.AddEdge(B, edge1, fH2); data.AddEdge(C, edge1, fH3); data.AddEdge(H1, edgeIs, H); data.AddEdge(H2, edgeIs, H); data.AddEdge(H3, edgeIs, H); data.AddEdge(D, edgeZ1, H1); data.AddEdge(D, edgeZ2, H2); var graph = new ComposedGraph(data); var group = new KnowledgeDialog.Knowledge.Group(graph); group.AddNode(A); group.AddNode(B); var linker = new SingleWordLinker(); linker.Add(A, B, C, D, H1, H2, H3); var generalizer = new PatternGeneralizer(graph, linker.LinkUtterance); generalizer.AddExample("Where A lives?", H1); generalizer.AddExample("Where B lives?", H2); var answer = generalizer.GetAnswer("Where does C live?"); }