From 82acb3a8d73fe72fc39ac8b949862b18dc2e3dee Mon Sep 17 00:00:00 2001 From: Oleksiy Pletnov Date: Fri, 28 Sep 2018 18:15:17 +0300 Subject: [PATCH] fix(nlu): native-NLU values should be in 0..1 interval (resolve #865) --- .../botpress-nlu/src/providers/native.js | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/packages/functionals/botpress-nlu/src/providers/native.js b/packages/functionals/botpress-nlu/src/providers/native.js index 7ec3e27af3b..ca09a737ccd 100755 --- a/packages/functionals/botpress-nlu/src/providers/native.js +++ b/packages/functionals/botpress-nlu/src/providers/native.js @@ -144,19 +144,24 @@ export default class NativeProvider extends Provider { let allScores = zscore(classifications.map(c => parseFloat(c.value))) - allScores = allScores.map((s, i) => { - const delta = Math.abs(s - allScores[i + 1] / s) - if (delta >= threshold) { - return s - } - - return ( - s - - Math.max(0, allScores[i + 1] || 0) * 0.5 - - Math.max(0, allScores[i + 2] || 0) * 0.75 - - Math.max(0, allScores[i + 3] || 0) - ) - }) + const SIGMOID_ADJUSTMENT = -3.5 + const sigmoid = t => 1 / (1 + Math.pow(Math.E, -(t + SIGMOID_ADJUSTMENT))) + + allScores = allScores + .map((s, i) => { + const delta = Math.abs(s - allScores[i + 1] / s) + if (delta >= threshold) { + return s + } + + return ( + s - + Math.max(0, allScores[i + 1] || 0) * 0.5 - + Math.max(0, allScores[i + 2] || 0) * 0.75 - + Math.max(0, allScores[i + 3] || 0) + ) + }) + .map(sigmoid) const intents = _.orderBy( classifications.map((c, i) => ({