You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: app/js/core/interactions/helpers/findBestResponse/computeResponseScore.mjs
+9-2Lines changed: 9 additions & 2 deletions
Original file line number
Diff line number
Diff line change
@@ -3,6 +3,7 @@ import { computeKeywordScore } from "./computeKeywordScore.mjs";
3
3
4
4
constMATCH_SCORE_IDENTITY=30;// Pour régler le fait de privilégier l'identité d'un keyword à la simple similarité
5
5
6
+
// Construction de la liste des keywords à tester
6
7
functionbuildKeywordsList(next,response){
7
8
// Si on a la directive !Next, on inclut seulement les keywords dans la liste des termes à tester (sauf s'il n'y a pas de keyword)
8
9
// Sinon on inclut le titre
@@ -19,6 +20,7 @@ function buildKeywordsList(next, response) {
19
20
returnbaseList.map((k)=>k.toLowerCase());
20
21
}
21
22
23
+
// Calcul du score de similarité entre le message de l'utilisateur et le contenu de la réponse
22
24
functioncalculateCosineSimilarityScore(
23
25
chatbot,
24
26
userInput,
@@ -32,6 +34,7 @@ function calculateCosineSimilarityScore(
32
34
returncosSim ? cosSim+0.5 : 0;
33
35
}
34
36
37
+
// Ajustement du score final en fonction des scores de distance, de match, et des directives !Next
35
38
functionadjustScore(
36
39
response,
37
40
matchScore,
@@ -40,15 +43,17 @@ function adjustScore(
40
43
next,
41
44
yaml,
42
45
){
43
-
// si on a un score de distance négatif, c'est qu'il y avait des keywords négatifs : donc le matchscore doit être égal à 0
46
+
// Si on a un score de distance négatif, c'est qu'il y avait des keywords négatifs : donc le matchscore doit être égal à 0
44
47
if(distanceScore<0){
45
48
matchScore=0;
46
49
}
50
+
51
+
// Si on n'a pas eu de matchScore (identité stricte) mais qu'on a un score de distance (similarité) : on l'ajoute au matchScore
52
+
// Sauf si utilise la directive !Next : dans ce cas, on doit absolument avoir un matchScore > 0 (identité stricte) pour passer à la réponse suivante
47
53
if(
48
54
(matchScore==0||(yaml&&yaml.searchInContent))&&
49
55
!next.needsProcessing
50
56
){
51
-
// En cas de simple similarité : on monte quand même le score. Mais si on est dans le mode où on va directement à une réponse en testant la présence de keywords, la correspondance doit être stricte, on ne fait pas de calcul de similarité
52
57
if(distanceScore>bestDistanceScore){
53
58
matchScore=matchScore+distanceScore;
54
59
bestDistanceScore=distanceScore;
@@ -61,6 +66,7 @@ function adjustScore(
61
66
return{ matchScore, bestDistanceScore };
62
67
}
63
68
69
+
// Calcul du score total d'une réponse en fonction du message de l'utilisateur et des keywords de la réponse
64
70
exportfunctioncomputeResponseScore({
65
71
chatbot,
66
72
userInput,
@@ -104,6 +110,7 @@ export function computeResponseScore({
0 commit comments