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());
        }
Esempio n. 3
0
 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);
        }
Esempio n. 6
0
        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);
            }
        }
Esempio n. 7
0
        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 }
            });
        }