internal int GetParaphraseCount(SLUFactory sluFactory) { AnnotatedQuestionActionEntry lastAction = null; foreach (var action in ExplanationTurns) { if (lastAction != null && lastAction.Act.StartsWith("RequestExplanation")) { break; } lastAction = action; } if (lastAction == null) { throw new NotImplementedException(); } if (isInform(lastAction, sluFactory)) { return(1); } return(0); }
private Dictionary <string, object>[] convertTurns(IEnumerable <AnnotatedQuestionActionEntry> turns, int turnOffset) { var sluFactory = new SLUFactory(); var result = new List <Dictionary <string, object> >(); var turnsArray = turns.ToArray(); for (var i = 0; i < turnsArray.Length; i += 2) { var machineAction = turnsArray[i]; var userAction = turnsArray[i + 1]; var representation = new Dictionary <string, object>(); result.Add(representation); representation["turn_index"] = (i + turnOffset) / 2; var output = new Dictionary <string, object>() { { "time", machineAction.Time }, { "transcript", machineAction.Text }, { "dialog_acts", convertAct(machineAction.Act) } }; var input = new Dictionary <string, object>() { { "time", userAction.Time }, { "chat", userAction.Text }, { "chat_slu", getUserSlu(userAction, sluFactory) } }; representation["output"] = output; representation["input"] = input; } return(result.ToArray()); }
internal DialogContext(QuestionInfo topic, ResponseBase contextQuestion, IModel handlingModel, SLUFactory factory) { HandlingModel = handlingModel; Factory = factory; Topic = topic; ContextQuestion = contextQuestion; NextMachineOutput = contextQuestion; }
internal int GetExplanationCount(SLUFactory sluFactory) { if (isInform(ExplanationTurns.Last(), sluFactory)) { return(1); } return(0); }
private bool isInform(AnnotatedQuestionActionEntry action, SLUFactory sluFactory) { var slu = sluFactory.GetBestDialogAct(UtteranceParser.Parse(action.Text)); if (slu is DontKnowAct || slu is NegateAct || slu is ChitChatAct || slu is AffirmAct) { return(false); } return(true); }
static void MainParsing(string[] args) { var utterance = "yes, Obama is president of which state?"; var parsedUtterance = UtteranceParser.Parse(utterance); var factory = new SLUFactory(); var bestAct = factory.GetBestDialogAct(parsedUtterance); var acts = factory.GetDialogActs(parsedUtterance); foreach (var act in acts) { Console.WriteLine(act); } }
private static void writeQuestionDataset() { var provider = Program.QuestionDialogProvider; provider.Refresh(); var sluFactory = new SLUFactory(); var dialogCount = 0; var turnCount = 0; var explanationCount = 0; var answerCount = 0; var noAnswerCount = 0; var parahpraseCount = 0; var correctCount = 0; var incorrectCount = 0; var differentChoise = 0; var invalid = 0; var unwanted = 0; var dialogIndexes = new List <int>(); var questions = new HashSet <string>(); for (var i = 0; i < provider.DialogCount; ++i) { var dialog = provider.GetDialog(i); var annotation = dialog.Annotation; switch (annotation) { case "invalid": invalid += 1; break; case "unwanted_answer": unwanted += 1; break; } if (annotation == null || annotation == "invalid" || annotation == "unwanted_answer") { //we dont want this dialog continue; } switch (annotation) { case "correct_answer": correctCount += 1; break; case "different_choice": differentChoise += 1; incorrectCount += 1; break; case "no_answer": noAnswerCount += 1; break; default: incorrectCount += 1; break; } questions.Add(dialog.Question); dialogCount += 1; turnCount += dialog.TurnCount; explanationCount += dialog.GetExplanationCount(sluFactory); parahpraseCount += dialog.GetParaphraseCount(sluFactory); answerCount += dialog.GetAnswerCount(); dialogIndexes.Add(i); } Console.WriteLine("Dataset statistics"); w("Dialog count", dialogCount); w("Turn count", turnCount); w("Explanation count", explanationCount); w("Answer count", answerCount); w("Noanswer count", noAnswerCount); w("Paraphrase count", parahpraseCount); w("Correct count", correctCount); w("Incorrect count", incorrectCount); w("Different choice", differentChoise); w("Invalid count", invalid); w("Unwanted count", unwanted); w("Question count", questions.Count); Console.WriteLine(); var rnd = new Random(12345); Shuffle(rnd, dialogIndexes); var testRatio = 0.35; var trainRatio = 0.5; var testCount = (int)(dialogIndexes.Count * testRatio); var trainCount = (int)(dialogIndexes.Count * trainRatio); var devCount = dialogIndexes.Count - testRatio - trainRatio; var testIndexes = dialogIndexes.Take(testCount).ToArray(); var trainIndexes = dialogIndexes.Skip(testCount).Take(trainCount).ToArray(); var devIndexes = dialogIndexes.Skip(testCount + trainCount).ToArray(); if (testIndexes.Intersect(trainIndexes).Any() || trainIndexes.Intersect(devIndexes).Any() || devIndexes.Intersect(testIndexes).Any()) { throw new NotSupportedException("there is an error when spliting dataset"); } writeQuestionDatasetTo("question_dialogs-test.json", testIndexes, provider); writeQuestionDatasetTo("question_dialogs-train.json", trainIndexes, provider); writeQuestionDatasetTo("question_dialogs-dev.json", devIndexes, provider); Console.ReadLine(); }
private Dictionary <string, object> getUserSlu(AnnotatedQuestionActionEntry userAction, SLUFactory sluFactory) { var slu = sluFactory.GetBestDialogAct(UtteranceParser.Parse(userAction.Text)); if (slu is DontKnowAct || slu is NegateAct || slu is ChitChatAct || slu is AffirmAct) { return(slu.GetDialogAct().ToDictionary()); } return(new Dictionary <string, object>() { { "act", "Inform" }, { "text", userAction.Text } }); }