Beispiel #1
0
        private async Task <ActionResult <String> > Train([FromBody] RasaTrainRequestModel request, [FromQuery] string project)
        {
            var trainer = new BotTrainer();

            if (String.IsNullOrEmpty(request.Project))
            {
                request.Project = project;
            }

            // save corpus to agent dir
            var projectPath = Path.Combine(AppDomain.CurrentDomain.GetData("DataPath").ToString(), "Projects", project);
            var modelPath   = Path.Combine(projectPath, request.Model);

            if (!Directory.Exists(modelPath))
            {
                Directory.CreateDirectory(modelPath);
            }

            // Save raw data to file, then parse it to Agent instance.
            var metaFileName = Path.Combine(modelPath, "meta.json");

            System.IO.File.WriteAllText(metaFileName, JsonConvert.SerializeObject(new AgentImportHeader
            {
                Name     = project,
                Platform = PlatformType.Rasa
            }));
            // in order to unify the process.
            var fileName = Path.Combine(modelPath, "corpus.json");

            System.IO.File.WriteAllText(fileName, JsonConvert.SerializeObject(request, new JsonSerializerSettings
            {
                Formatting        = Formatting.Indented,
                NullValueHandling = NullValueHandling.Ignore,
                ContractResolver  = new CamelCasePropertyNamesContractResolver()
            }));

            var agent = _platform.LoadAgentFromFile(modelPath);

            var info = await trainer.Train(agent, new BotTrainOptions
            {
                AgentDir = projectPath,
                Model    = request.Model
            });

            return(Ok(new { info = info.Model }));
        }
Beispiel #2
0
        public async Task <ModelMetaData> Train(TAgent agent, TrainingCorpus corpus)
        {
            string agentDir = Path.Combine(AppDomain.CurrentDomain.GetData("DataPath").ToString(), "Projects", agent.Id);
            var    model    = "model_" + DateTime.UtcNow.ToString("yyyyMMdd");

            var trainer = new BotTrainer();

            agent.Corpus = corpus;

            var trainOptions = new BotTrainOptions
            {
                AgentDir = agentDir,
                Model    = model
            };

            var info = await trainer.Train(agent, trainOptions);

            return(info);
        }
Beispiel #3
0
        public async Task <ActionResult <String> > Train([FromQuery] string agentId)
        {
            var trainer = new BotTrainer();

            // save corpus to agent dir
            var    projectPath = Path.Combine(AppDomain.CurrentDomain.GetData("DataPath").ToString(), "Projects", agentId);
            var    model       = Directory.GetDirectories(projectPath).Where(x => x.Contains("model_")).Last().Split(Path.DirectorySeparatorChar).Last();
            string dataDir     = Path.Combine(projectPath, model);

            var agent = _platform.LoadAgentFromFile(dataDir);

            var info = await trainer.Train(agent, new BotTrainOptions
            {
                AgentDir = projectPath,
                Model    = model
            });

            return(Ok(new { info = info }));
        }
        public virtual async Task <ModelMetaData> Train(TAgent agent, TrainingCorpus corpus, BotTrainOptions options)
        {
            if (String.IsNullOrEmpty(options.AgentDir))
            {
                options.AgentDir = Path.Combine(AppDomain.CurrentDomain.GetData("DataPath").ToString(), "Projects", agent.Id);
            }

            if (String.IsNullOrEmpty(options.Model))
            {
                options.Model = "model_" + DateTime.UtcNow.ToString("yyyyMMdd");
            }

            ModelMetaData meta = null;

            // train by contexts
            corpus.UserSays.GroupBy(x => x.ContextHash).Select(g => new
            {
                Context = g.Key,
                Corpus  = new TrainingCorpus
                {
                    Entities = corpus.Entities,
                    UserSays = corpus.UserSays.Where(x => x.ContextHash == g.Key).ToList()
                }
            })
            .ToList()
            .ForEach(async c =>
            {
                var trainer  = new BotTrainer(settings);
                agent.Corpus = c.Corpus;

                meta = await trainer.Train(agent, new BotTrainOptions
                {
                    AgentDir = options.AgentDir,
                    Model    = options.Model + $"{Path.DirectorySeparatorChar}{c.Context}"
                });
            });

            meta.Pipeline.Clear();
            meta.Model = options.Model;

            return(meta);
        }
        public virtual async Task <ModelMetaData> Train(TAgent agent, TrainingCorpus corpus, BotTrainOptions options)
        {
            if (String.IsNullOrEmpty(options.AgentDir))
            {
                options.AgentDir = Path.Combine(AppDomain.CurrentDomain.GetData("DataPath").ToString(), "Projects", agent.Id);
            }

            if (String.IsNullOrEmpty(options.Model))
            {
                options.Model = "model_" + DateTime.UtcNow.ToString("yyyyMMdd");
            }

            var trainer = new BotTrainer(settings);

            agent.Corpus = corpus;

            var info = await trainer.Train(agent, options);

            return(info);
        }
        public async Task <ActionResult <String> > Train([FromBody] RasaTrainRequestModel request, [FromQuery] string project)
        {
            var trainer = new BotTrainer();

            if (String.IsNullOrEmpty(request.Project))
            {
                request.Project = project;
            }

            // save corpus to agent dir
            var projectPath = Path.Combine(AppDomain.CurrentDomain.GetData("DataPath").ToString(), "Projects");
            var dataPath    = Path.Combine(projectPath, project);
            var agentPath   = Path.Combine(dataPath, "Temp");

            if (!Directory.Exists(agentPath))
            {
                Directory.CreateDirectory(agentPath);
            }

            var fileName = Path.Combine(agentPath, "corpus.json");

            System.IO.File.WriteAllText(fileName, JsonConvert.SerializeObject(request.Corpus, new JsonSerializerSettings
            {
                Formatting        = Formatting.Indented,
                NullValueHandling = NullValueHandling.Ignore,
                ContractResolver  = new CamelCasePropertyNamesContractResolver()
            }));

            var bot   = new RasaAi();
            var agent = bot.LoadAgentFromFile <AgentImporterInRasa>(agentPath,
                                                                    new AgentImportHeader
            {
                Id   = request.Project,
                Name = project
            });

            var info = await trainer.Train(agent);

            return(Ok(new { info = info.Model }));
        }
Beispiel #7
0
 public override async Task Train(BotTrainOptions options)
 {
     var trainer = new BotTrainer(Agent.Id, Dc);
     await trainer.Train(Agent, options);
 }
Beispiel #8
0
 public override async Task Train()
 {
     agent.Corpus = GetIntentExpressions();
     var trainer = new BotTrainer(agent.Id, dc);
     await trainer.Train(agent);
 }