Files
OSGKeyboard/ModelTraining/ClipboardSemantics/baselines/2026-08-22-six-model/evaluation-report.json
T
2026-08-27 18:01:46 +08:00

840 lines
31 KiB
JSON

{
"classifiers" : [
{
"candidates" : [
{
"acceptedForAutomaticRouting" : true,
"algorithm" : "maxEnt",
"balancedTrainingCount" : 1440,
"balancedValidationCount" : 360,
"binaryByLanguage" : {
"en" : {
"accuracy" : 0.9619,
"f1" : 0.8462,
"falseNegative" : 24,
"falsePositive" : 0,
"precision" : 1,
"recall" : 0.7333,
"total" : 630,
"trueNegative" : 540,
"truePositive" : 66
},
"zh-Hans" : {
"accuracy" : 0.9968,
"f1" : 0.9888,
"falseNegative" : 2,
"falsePositive" : 0,
"precision" : 1,
"recall" : 0.9778,
"total" : 630,
"trueNegative" : 540,
"truePositive" : 88
}
},
"goldenBinary" : {
"accuracy" : 0.9239,
"f1" : 0.6667,
"falseNegative" : 7,
"falsePositive" : 0,
"precision" : 1,
"recall" : 0.5,
"total" : 92,
"trueNegative" : 78,
"truePositive" : 7
},
"goldenFalseNegativeExamples" : [
"[en] Alex owns the meeting notes and should post them in the project channel today. (score=0.5481)",
"[en] Remember to correct the invoice name and submit it again. (score=0.3677)",
"[en] Would you book a meeting room for Wednesday afternoon? (score=0.4118)",
"[zh-Hans] 记得把发票抬头改好以后重新提交。 (score=0.4999)",
"[zh-Hans] 下一步先联系客户确认交付地址,再更新订单。 (score=0.1536)",
"[zh-Hans] 方便帮我约一下周三下午的会议室吗? (score=0.2326)",
"[zh-Hans] 这些材料可以在月底前准备好吗? (score=0.5621)"
],
"goldenFalsePositiveExamples" : [
],
"modelBytes" : 17299,
"runtimeAssetIndependent" : true,
"testBinary" : {
"accuracy" : 0.9794,
"f1" : 0.9222,
"falseNegative" : 26,
"falsePositive" : 0,
"precision" : 1,
"recall" : 0.8556,
"total" : 1260,
"trueNegative" : 1080,
"truePositive" : 154
},
"testFalseNegativeExamples" : [
"[en] The deadline is by the end of the month; make sure you complete the risk register. (score=0.2401)",
"[en] The deadline is by Friday; make sure you confirm the project timeline. (score=0.4156)",
"[en] The deadline is by Friday; make sure you contact the client. (score=0.3509)",
"[en] The deadline is after you receive this message; make sure you check the invoice details. (score=0.385)",
"[en] The deadline is before 3 PM; make sure you contact the client. (score=0.2883)",
"[en] The deadline is after you receive this message; make sure you send the meeting notes. (score=0.3594)",
"[en] The deadline is by Friday; make sure you summarize the test results. (score=0.3174)",
"[en] The deadline is this week; make sure you share the delivery plan. (score=0.0888)",
"[en] The deadline is tomorrow morning; make sure you share the delivery plan. (score=0.1542)",
"[en] The deadline is this week; make sure you update the quotation. (score=0.1379)",
"[en] The deadline is by the end of the month; make sure you update the quotation. (score=0.2238)",
"[en] The deadline is this week; make sure you confirm the project timeline. (score=0.1903)"
],
"testFalsePositiveExamples" : [
],
"threshold" : 0.6,
"validationBinary" : {
"accuracy" : 0.973,
"f1" : 0.8963,
"falseNegative" : 33,
"falsePositive" : 1,
"precision" : 0.9932,
"recall" : 0.8167,
"total" : 1260,
"trueNegative" : 1079,
"truePositive" : 147
}
}
],
"id" : "task",
"labels" : [
"notTask",
"task"
],
"positiveLabel" : "task",
"selectedAlgorithm" : "maxEnt",
"selectedModelFile" : "TaskIntentClassifier.mlmodel"
},
{
"candidates" : [
{
"acceptedForAutomaticRouting" : true,
"algorithm" : "maxEnt",
"balancedTrainingCount" : 2880,
"balancedValidationCount" : 720,
"binaryByLanguage" : {
"en" : {
"accuracy" : 1,
"f1" : 1,
"falseNegative" : 0,
"falsePositive" : 0,
"precision" : 1,
"recall" : 1,
"total" : 630,
"trueNegative" : 450,
"truePositive" : 180
},
"zh-Hans" : {
"accuracy" : 0.9841,
"f1" : 0.9714,
"falseNegative" : 10,
"falsePositive" : 0,
"precision" : 1,
"recall" : 0.9444,
"total" : 630,
"trueNegative" : 450,
"truePositive" : 170
}
},
"goldenBinary" : {
"accuracy" : 0.9891,
"f1" : 0.9767,
"falseNegative" : 1,
"falsePositive" : 0,
"precision" : 1,
"recall" : 0.9545,
"total" : 92,
"trueNegative" : 70,
"truePositive" : 21
},
"goldenFalseNegativeExamples" : [
"[en] Support has not replied for three days. When will this be handled? (score=0.5261)"
],
"goldenFalsePositiveExamples" : [
],
"modelBytes" : 20231,
"runtimeAssetIndependent" : true,
"testBinary" : {
"accuracy" : 0.9921,
"f1" : 0.9859,
"falseNegative" : 10,
"falsePositive" : 0,
"precision" : 1,
"recall" : 0.9722,
"total" : 1260,
"trueNegative" : 900,
"truePositive" : 350
},
"testFalseNegativeExamples" : [
"[zh-Hans] 我需要明确答复:文件无法打开,你们准备如何解决? (score=0.5267)",
"[zh-Hans] 我需要明确答复:订单被重复扣款,你们准备如何解决? (score=0.5534)",
"[zh-Hans] 我需要明确答复:预约记录消失了,你们准备如何解决? (score=0.3034)",
"[zh-Hans] 我需要明确答复:消息始终发不出去,你们准备如何解决? (score=0.556)",
"[zh-Hans] 我需要明确答复:收到的商品有破损,你们准备如何解决? (score=0.5209)",
"[zh-Hans] 我需要明确答复:页面加载特别慢,你们准备如何解决? (score=0.5228)",
"[zh-Hans] 我需要明确答复:账号突然被锁定,你们准备如何解决? (score=0.4902)",
"[zh-Hans] 我需要明确答复:应用一直闪退,你们准备如何解决? (score=0.5513)",
"[zh-Hans] 我需要明确答复:数据同步失败,你们准备如何解决? (score=0.4913)",
"[zh-Hans] 我需要明确答复:发票信息写错了,你们准备如何解决? (score=0.3555)"
],
"testFalsePositiveExamples" : [
],
"threshold" : 0.6,
"validationBinary" : {
"accuracy" : 0.9794,
"f1" : 0.9632,
"falseNegative" : 20,
"falsePositive" : 6,
"precision" : 0.9827,
"recall" : 0.9444,
"total" : 1260,
"trueNegative" : 894,
"truePositive" : 340
}
}
],
"id" : "question",
"labels" : [
"notQuestion",
"question"
],
"positiveLabel" : "question",
"selectedAlgorithm" : "maxEnt",
"selectedModelFile" : "QuestionIntentClassifier.mlmodel"
},
{
"candidates" : [
{
"acceptedForAutomaticRouting" : true,
"algorithm" : "maxEnt",
"balancedTrainingCount" : 720,
"balancedValidationCount" : 180,
"binaryByLanguage" : {
"en" : {
"accuracy" : 0.9571,
"f1" : 0.5714,
"falseNegative" : 27,
"falsePositive" : 0,
"precision" : 1,
"recall" : 0.4,
"total" : 630,
"trueNegative" : 585,
"truePositive" : 18
},
"zh-Hans" : {
"accuracy" : 0.9952,
"f1" : 0.9663,
"falseNegative" : 2,
"falsePositive" : 1,
"precision" : 0.9773,
"recall" : 0.9556,
"total" : 630,
"trueNegative" : 584,
"truePositive" : 43
}
},
"goldenBinary" : {
"accuracy" : 0.9783,
"f1" : 0.8571,
"falseNegative" : 2,
"falsePositive" : 0,
"precision" : 1,
"recall" : 0.75,
"total" : 92,
"trueNegative" : 84,
"truePositive" : 6
},
"goldenFalseNegativeExamples" : [
"[en] I'd like to invite you to Monday's project kickoff. Are you available? (score=0.284)",
"[zh-Hans] 周末一起去爬山怎么样?早上九点地铁站见。 (score=0.7468)"
],
"goldenFalsePositiveExamples" : [
],
"modelBytes" : 14987,
"runtimeAssetIndependent" : true,
"testBinary" : {
"accuracy" : 0.9762,
"f1" : 0.8026,
"falseNegative" : 29,
"falsePositive" : 1,
"precision" : 0.9839,
"recall" : 0.6778,
"total" : 1260,
"trueNegative" : 1169,
"truePositive" : 61
},
"testFalseNegativeExamples" : [
"[en] I saved you a spot to meet this weekend after work at the campus cafe. How does that sound? (score=0.366)",
"[en] I saved you a spot to have a quick call next Monday at noon at the station. How does that sound? (score=0.5668)",
"[en] I saved you a spot to visit the client at seven tonight at the Wangjing branch. How does that sound? (score=0.5685)",
"[en] I saved you a spot to have dinner this weekend at the campus cafe. How does that sound? (score=0.4259)",
"[en] I saved you a spot to watch a movie before the end of the month at the campus cafe. How does that sound? (score=0.3009)",
"[en] I saved you a spot to attend the design review Friday morning at Meeting Room 5. How does that sound? (score=0.4253)",
"[en] I saved you a spot to watch a movie Friday morning at the station. How does that sound? (score=0.4304)",
"[en] I saved you a spot to visit the client after work at the station. How does that sound? (score=0.3609)",
"[en] I saved you a spot to have dinner this weekend at the station. How does that sound? (score=0.4006)",
"[en] I saved you a spot to attend the design review Wednesday evening at the online meeting room. How does that sound? (score=0.4223)",
"[en] I saved you a spot to get coffee before the end of the month at Meeting Room 5. How does that sound? (score=0.2489)",
"[en] I saved you a spot to get coffee after work at the Wangjing branch. How does that sound? (score=0.3714)"
],
"testFalsePositiveExamples" : [
"[zh-Hans] 文档记载的喝咖啡定于周三晚上在线上会议室进行。 (score=0.8353)"
],
"threshold" : 0.77,
"validationBinary" : {
"accuracy" : 0.9817,
"f1" : 0.8571,
"falseNegative" : 21,
"falsePositive" : 2,
"precision" : 0.9718,
"recall" : 0.7667,
"total" : 1260,
"trueNegative" : 1168,
"truePositive" : 69
}
}
],
"id" : "invitation",
"labels" : [
"notInvitation",
"invitation"
],
"positiveLabel" : "invitation",
"selectedAlgorithm" : "maxEnt",
"selectedModelFile" : "InvitationIntentClassifier.mlmodel"
},
{
"candidates" : [
{
"acceptedForAutomaticRouting" : true,
"algorithm" : "maxEnt",
"balancedTrainingCount" : 1440,
"balancedValidationCount" : 360,
"binaryByLanguage" : {
"en" : {
"accuracy" : 0.9508,
"f1" : 0.7919,
"falseNegative" : 31,
"falsePositive" : 0,
"precision" : 1,
"recall" : 0.6556,
"total" : 630,
"trueNegative" : 540,
"truePositive" : 59
},
"zh-Hans" : {
"accuracy" : 0.9841,
"f1" : 0.9419,
"falseNegative" : 9,
"falsePositive" : 1,
"precision" : 0.9878,
"recall" : 0.9,
"total" : 630,
"trueNegative" : 539,
"truePositive" : 81
}
},
"goldenBinary" : {
"accuracy" : 0.9239,
"f1" : 0.5882,
"falseNegative" : 7,
"falsePositive" : 0,
"precision" : 1,
"recall" : 0.4167,
"total" : 92,
"trueNegative" : 80,
"truePositive" : 5
},
"goldenFalseNegativeExamples" : [
"[en] The app has crashed constantly since the update, and I lost important data. (score=0.5909)",
"[en] I was charged twice for the same order and still have not received a refund. (score=0.4438)",
"[en] The package arrived damaged and the cup inside was broken. (score=0.3134)",
"[en] My account was locked for no reason. Can you restore it today? (score=0.2417)",
"[en] Support has not replied for three days. When will this be handled? (score=0.3498)",
"[zh-Hans] 收到的商品外包装破损,里面的杯子也碎了。 (score=0.2457)",
"[zh-Hans] 客服已经三天没有回复了,请问什么时候能处理? (score=0.5563)"
],
"goldenFalsePositiveExamples" : [
],
"modelBytes" : 16850,
"runtimeAssetIndependent" : true,
"testBinary" : {
"accuracy" : 0.9675,
"f1" : 0.8723,
"falseNegative" : 40,
"falsePositive" : 1,
"precision" : 0.9929,
"recall" : 0.7778,
"total" : 1260,
"trueNegative" : 1079,
"truePositive" : 140
},
"testFalseNegativeExamples" : [
"[en] I need a clear answer: my reservation disappeared. How are you going to resolve it? (score=0.2123)",
"[en] I need a clear answer: the file will not open. How are you going to resolve it? (score=0.1792)",
"[en] I need a clear answer: the item arrived damaged. How are you going to resolve it? (score=0.202)",
"[en] I need a clear answer: the page loads extremely slowly. How are you going to resolve it? (score=0.21)",
"[en] I need a clear answer: the order was charged twice. How are you going to resolve it? (score=0.186)",
"[en] I need a clear answer: the invoice information is wrong. How are you going to resolve it? (score=0.2094)",
"[en] I need a clear answer: messages never send. How are you going to resolve it? (score=0.1964)",
"[en] I need a clear answer: data synchronization fails. How are you going to resolve it? (score=0.2338)",
"[en] I need a clear answer: my account was suddenly locked. How are you going to resolve it? (score=0.3079)",
"[en] This is not the first time that the file will not open; now support has not resolved it. (score=0.5497)",
"[en] This is not the first time that messages never send; now today's delivery is now at risk. (score=0.4564)",
"[en] This is not the first time that data synchronization fails; now the issue remains after several attempts. (score=0.599)"
],
"testFalsePositiveExamples" : [
"[zh-Hans] 对于订单状态,这次有没有明确答案? (score=0.7457)"
],
"threshold" : 0.68,
"validationBinary" : {
"accuracy" : 1,
"f1" : 1,
"falseNegative" : 0,
"falsePositive" : 0,
"precision" : 1,
"recall" : 1,
"total" : 1260,
"trueNegative" : 1080,
"truePositive" : 180
}
}
],
"id" : "complaint",
"labels" : [
"notComplaint",
"complaint"
],
"positiveLabel" : "complaint",
"selectedAlgorithm" : "maxEnt",
"selectedModelFile" : "ComplaintIntentClassifier.mlmodel"
},
{
"candidates" : [
{
"acceptedForAutomaticRouting" : true,
"algorithm" : "maxEnt",
"balancedTrainingCount" : 3560,
"balancedValidationCount" : 1080,
"binaryByLanguage" : {
"en" : {
"accuracy" : 0.9381,
"f1" : 0.9427,
"falseNegative" : 39,
"falsePositive" : 0,
"precision" : 1,
"recall" : 0.8917,
"total" : 630,
"trueNegative" : 270,
"truePositive" : 321
},
"zh-Hans" : {
"accuracy" : 1,
"f1" : 1,
"falseNegative" : 0,
"falsePositive" : 0,
"precision" : 1,
"recall" : 1,
"total" : 630,
"trueNegative" : 270,
"truePositive" : 360
}
},
"goldenBinary" : {
"accuracy" : 0.9239,
"f1" : 0.932,
"falseNegative" : 6,
"falsePositive" : 1,
"precision" : 0.9796,
"recall" : 0.8889,
"total" : 92,
"trueNegative" : 37,
"truePositive" : 48
},
"goldenFalseNegativeExamples" : [
"[en] Alex owns the meeting notes and should post them in the project channel today. (score=0.4433)",
"[en] First confirm the delivery address with the client, then update the order. (score=0.4795)",
"[en] Why is the order still marked as under review? (score=0.4847)",
"[zh-Hans] 记得把发票抬头改好以后重新提交。 (score=0.0669)",
"[zh-Hans] 下一步先联系客户确认交付地址,再更新订单。 (score=0.0634)",
"[zh-Hans] 这些材料可以在月底前准备好吗? (score=0.1104)"
],
"goldenFalsePositiveExamples" : [
"[zh-Hans] 明天我要去财务核对发票,不用你帮忙。 (score=0.9516)"
],
"modelBytes" : 19623,
"runtimeAssetIndependent" : true,
"testBinary" : {
"accuracy" : 0.969,
"f1" : 0.9722,
"falseNegative" : 39,
"falsePositive" : 0,
"precision" : 1,
"recall" : 0.9458,
"total" : 1260,
"trueNegative" : 540,
"truePositive" : 681
},
"testFalseNegativeExamples" : [
"[en] This is not the first time that the file will not open; now the issue remains after several attempts. (score=0.4887)",
"[en] A positive review: The keyboard experience solved the problem. Keep it up. (score=0.5028)",
"[en] A positive review: The support response is much more accurate. Keep it up. (score=0.5665)",
"[en] A positive review: This update is easier to use. Keep it up. (score=0.5908)",
"[en] A positive review: The new speech recognition exceeded my expectations. Keep it up. (score=0.4991)",
"[en] A positive review: The latest fix works very smoothly. Keep it up. (score=0.5422)",
"[en] A positive review: The keyboard experience is noticeably more stable. Keep it up. (score=0.5804)",
"[en] A positive review: The interface change is easier to use. Keep it up. (score=0.3015)",
"[en] A positive review: The new speech recognition is much more accurate. Keep it up. (score=0.5761)",
"[en] A positive review: The latest fix solved the problem. Keep it up. (score=0.43)",
"[en] A positive review: The sync speed solved the problem. Keep it up. (score=0.4013)",
"[en] A positive review: The translation result is noticeably more stable. Keep it up. (score=0.5841)"
],
"testFalsePositiveExamples" : [
],
"threshold" : 0.6,
"validationBinary" : {
"accuracy" : 0.95,
"f1" : 0.9555,
"falseNegative" : 43,
"falsePositive" : 20,
"precision" : 0.9713,
"recall" : 0.9403,
"total" : 1260,
"trueNegative" : 520,
"truePositive" : 677
}
}
],
"id" : "replyableMessage",
"labels" : [
"notReplyableMessage",
"replyableMessage"
],
"positiveLabel" : "replyableMessage",
"selectedAlgorithm" : "maxEnt",
"selectedModelFile" : "ConversationalReplyIntentClassifier.mlmodel"
},
{
"candidates" : [
{
"acceptedForAutomaticRouting" : true,
"algorithm" : "maxEnt",
"balancedTrainingCount" : 1080,
"balancedValidationCount" : 270,
"goldenMulticlass" : {
"accuracy" : 0.8913,
"confusion" : {
"negative" : {
"negative" : 13,
"neutral" : 4,
"positive" : 1
},
"neutral" : {
"negative" : 3,
"neutral" : 64,
"positive" : 1
},
"positive" : {
"negative" : 1,
"neutral" : 0,
"positive" : 5
}
},
"macroF1" : 0.8178,
"perLabel" : {
"negative" : {
"accuracy" : 0.9022,
"f1" : 0.7429,
"falseNegative" : 5,
"falsePositive" : 4,
"precision" : 0.7647,
"recall" : 0.7222,
"total" : 92,
"trueNegative" : 70,
"truePositive" : 13
},
"neutral" : {
"accuracy" : 0.913,
"f1" : 0.9412,
"falseNegative" : 4,
"falsePositive" : 4,
"precision" : 0.9412,
"recall" : 0.9412,
"total" : 92,
"trueNegative" : 20,
"truePositive" : 64
},
"positive" : {
"accuracy" : 0.9674,
"f1" : 0.7692,
"falseNegative" : 1,
"falsePositive" : 2,
"precision" : 0.7143,
"recall" : 0.8333,
"total" : 92,
"trueNegative" : 84,
"truePositive" : 5
}
},
"total" : 92
},
"modelBytes" : 16629,
"multiclassByLanguage" : {
"en" : {
"accuracy" : 0.9778,
"confusion" : {
"negative" : {
"negative" : 121,
"neutral" : 14,
"positive" : 0
},
"neutral" : {
"negative" : 0,
"neutral" : 450,
"positive" : 0
},
"positive" : {
"negative" : 0,
"neutral" : 0,
"positive" : 45
}
},
"macroF1" : 0.9767,
"perLabel" : {
"negative" : {
"accuracy" : 0.9778,
"f1" : 0.9453,
"falseNegative" : 14,
"falsePositive" : 0,
"precision" : 1,
"recall" : 0.8963,
"total" : 630,
"trueNegative" : 495,
"truePositive" : 121
},
"neutral" : {
"accuracy" : 0.9778,
"f1" : 0.9847,
"falseNegative" : 0,
"falsePositive" : 14,
"precision" : 0.9698,
"recall" : 1,
"total" : 630,
"trueNegative" : 166,
"truePositive" : 450
},
"positive" : {
"accuracy" : 1,
"f1" : 1,
"falseNegative" : 0,
"falsePositive" : 0,
"precision" : 1,
"recall" : 1,
"total" : 630,
"trueNegative" : 585,
"truePositive" : 45
}
},
"total" : 630
},
"zh-Hans" : {
"accuracy" : 0.9746,
"confusion" : {
"negative" : {
"negative" : 126,
"neutral" : 9,
"positive" : 0
},
"neutral" : {
"negative" : 3,
"neutral" : 443,
"positive" : 4
},
"positive" : {
"negative" : 0,
"neutral" : 0,
"positive" : 45
}
},
"macroF1" : 0.9647,
"perLabel" : {
"negative" : {
"accuracy" : 0.981,
"f1" : 0.9545,
"falseNegative" : 9,
"falsePositive" : 3,
"precision" : 0.9767,
"recall" : 0.9333,
"total" : 630,
"trueNegative" : 492,
"truePositive" : 126
},
"neutral" : {
"accuracy" : 0.9746,
"f1" : 0.9823,
"falseNegative" : 7,
"falsePositive" : 9,
"precision" : 0.9801,
"recall" : 0.9844,
"total" : 630,
"trueNegative" : 171,
"truePositive" : 443
},
"positive" : {
"accuracy" : 0.9937,
"f1" : 0.9574,
"falseNegative" : 0,
"falsePositive" : 4,
"precision" : 0.9184,
"recall" : 1,
"total" : 630,
"trueNegative" : 581,
"truePositive" : 45
}
},
"total" : 630
}
},
"runtimeAssetIndependent" : true,
"testMulticlass" : {
"accuracy" : 0.9762,
"confusion" : {
"negative" : {
"negative" : 247,
"neutral" : 23,
"positive" : 0
},
"neutral" : {
"negative" : 3,
"neutral" : 893,
"positive" : 4
},
"positive" : {
"negative" : 0,
"neutral" : 0,
"positive" : 90
}
},
"macroF1" : 0.9706,
"perLabel" : {
"negative" : {
"accuracy" : 0.9794,
"f1" : 0.95,
"falseNegative" : 23,
"falsePositive" : 3,
"precision" : 0.988,
"recall" : 0.9148,
"total" : 1260,
"trueNegative" : 987,
"truePositive" : 247
},
"neutral" : {
"accuracy" : 0.9762,
"f1" : 0.9835,
"falseNegative" : 7,
"falsePositive" : 23,
"precision" : 0.9749,
"recall" : 0.9922,
"total" : 1260,
"trueNegative" : 337,
"truePositive" : 893
},
"positive" : {
"accuracy" : 0.9968,
"f1" : 0.9783,
"falseNegative" : 0,
"falsePositive" : 4,
"precision" : 0.9574,
"recall" : 1,
"total" : 1260,
"trueNegative" : 1166,
"truePositive" : 90
}
},
"total" : 1260
},
"validationMulticlass" : {
"accuracy" : 0.9754,
"confusion" : {
"negative" : {
"negative" : 262,
"neutral" : 8,
"positive" : 0
},
"neutral" : {
"negative" : 19,
"neutral" : 877,
"positive" : 4
},
"positive" : {
"negative" : 0,
"neutral" : 0,
"positive" : 90
}
},
"macroF1" : 0.9706,
"perLabel" : {
"negative" : {
"accuracy" : 0.9786,
"f1" : 0.951,
"falseNegative" : 8,
"falsePositive" : 19,
"precision" : 0.9324,
"recall" : 0.9704,
"total" : 1260,
"trueNegative" : 971,
"truePositive" : 262
},
"neutral" : {
"accuracy" : 0.9754,
"f1" : 0.9826,
"falseNegative" : 23,
"falsePositive" : 8,
"precision" : 0.991,
"recall" : 0.9744,
"total" : 1260,
"trueNegative" : 352,
"truePositive" : 877
},
"positive" : {
"accuracy" : 0.9968,
"f1" : 0.9783,
"falseNegative" : 0,
"falsePositive" : 4,
"precision" : 0.9574,
"recall" : 1,
"total" : 1260,
"trueNegative" : 1166,
"truePositive" : 90
}
},
"total" : 1260
}
}
],
"id" : "sentiment",
"labels" : [
"negative",
"neutral",
"positive"
],
"selectedAlgorithm" : "maxEnt",
"selectedModelFile" : "SentimentClassifier.mlmodel"
}
],
"corpusCount" : 7272,
"corpusPath" : "ModelTraining/ClipboardSemantics/clipboard_semantic_corpus.jsonl",
"generatedAt" : "2026-08-22T09:30:13Z",
"goldenCount" : 92,
"selectionPolicy" : "Validation only: binary models require precision >= 0.97, then maximize recall; sentiment prioritizes macro-F1. Automatic routing also requires a self-contained maxEnt model because BERT embedding assets are not guaranteed in extensions. Test and golden data gate deployment but never tune model weights.",
"testCount" : 1260,
"trainingCount" : 4660,
"validationCount" : 1260
}