diff --git a/core/data/en/global-resolvers/affirmation_denial.json b/core/data/en/global-resolvers/affirmation_denial.json
index 38ba26691..95b5c6d58 100644
--- a/core/data/en/global-resolvers/affirmation_denial.json
+++ b/core/data/en/global-resolvers/affirmation_denial.json
@@ -7,7 +7,7 @@
"Yep",
"Yup",
"Yeah",
- "Let's do it",
+ "Do [it|this|that]",
"For sure",
"Sure thing",
"Of course!",
@@ -30,6 +30,7 @@
"utterance_samples": [
"No",
"No no don't",
+ "Stop it",
"Nope",
"Naa",
"No thanks",
diff --git a/scripts/train/train-resolvers-model/train-global-resolvers.js b/scripts/train/train-resolvers-model/train-global-resolvers.js
index cce35fdaf..3460386fb 100644
--- a/scripts/train/train-resolvers-model/train-global-resolvers.js
+++ b/scripts/train/train-resolvers-model/train-global-resolvers.js
@@ -1,5 +1,6 @@
import path from 'path'
import fs from 'fs'
+import { composeFromPattern } from '@nlpjs/utils'
import log from '@/helpers/log'
@@ -28,7 +29,13 @@ export default (lang, nlp) => new Promise((resolve) => {
nlp.assignDomain(lang, intent, 'system')
for (let k = 0; k < intentObj.utterance_samples.length; k += 1) {
- nlp.addDocument(lang, intentObj.utterance_samples[k], intent)
+ const utteranceSample = intentObj.utterance_samples[k]
+ // Achieve Cartesian training
+ const utteranceAlternatives = composeFromPattern(utteranceSample)
+
+ utteranceAlternatives.forEach((utteranceAlternative) => {
+ nlp.addDocument(lang, utteranceAlternative, intent)
+ })
}
}
diff --git a/scripts/train/train-resolvers-model/train-skills-resolvers.js b/scripts/train/train-resolvers-model/train-skills-resolvers.js
index a86012395..f2d4fb53c 100644
--- a/scripts/train/train-resolvers-model/train-skills-resolvers.js
+++ b/scripts/train/train-resolvers-model/train-skills-resolvers.js
@@ -1,5 +1,6 @@
import path from 'path'
import fs from 'fs'
+import { composeFromPattern } from '@nlpjs/utils'
import log from '@/helpers/log'
import domain from '@/helpers/domain'
@@ -40,7 +41,12 @@ export default (lang, nlp) => new Promise(async (resolve) => {
nlp.assignDomain(lang, intent, currentDomain.name)
intentObj.utterance_samples.forEach((utteranceSample) => {
- nlp.addDocument(lang, utteranceSample, intent)
+ // Achieve Cartesian training
+ const utteranceAlternatives = composeFromPattern(utteranceSample)
+
+ utteranceAlternatives.forEach((utteranceAlternative) => {
+ nlp.addDocument(lang, utteranceAlternative, intent)
+ })
})
})
diff --git a/server/src/core/ner.js b/server/src/core/ner.js
index a57849325..9db763d3d 100644
--- a/server/src/core/ner.js
+++ b/server/src/core/ner.js
@@ -49,6 +49,8 @@ class Ner {
promises.push(this.injectRegexEntity(lang, entity))
} else if (entity.type === 'trim') {
promises.push(this.injectTrimEntity(lang, entity))
+ } else if (entity.type === 'enum') {
+ promises.push(this.injectEnumEntity(lang, entity))
}
}
@@ -140,6 +142,24 @@ class Ner {
})
}
+ /**
+ * Inject enum type entities
+ */
+ injectEnumEntity (lang, entity) {
+ return new Promise((resolve) => {
+ const { name: entityName, options } = entity
+ const optionKeys = Object.keys(options)
+
+ optionKeys.forEach((optionName) => {
+ const { synonyms } = options[optionName]
+
+ this.ner.addRuleOptionTexts(lang, entityName, optionName, synonyms)
+ })
+
+ resolve()
+ })
+ }
+
/**
* Get Microsoft builtin entities
* https://github.com/axa-group/nlp.js/blob/master/packages/builtin-microsoft/src/builtin-microsoft.js
diff --git a/skills/social_communication/mbti/nlu/en.json b/skills/social_communication/mbti/nlu/en.json
index 0fb3b1736..09cb8ccce 100644
--- a/skills/social_communication/mbti/nlu/en.json
+++ b/skills/social_communication/mbti/nlu/en.json
@@ -3,10 +3,11 @@
"setup": {
"type": "dialog",
"utterance_samples": [
- "I want to know my MBTI personality type"
+ "I want to know my MBTI personality type",
+ "Start a personality type [quiz|questionnaire|test]"
],
"answers": [
- "Alright, let's go!"
+ "Alright, let's go!
1/20
At a party do you: