@@ -367,16 +367,20 @@ impl SpamClassifier for Server {
367367
368368 match & task {
369369 TrainTask :: Fh { builder, .. } => {
370- builder. scale ( & mut tokens) ;
370+ if config. log_scale {
371+ builder. scale ( & mut tokens) ;
372+ }
371373 fh_samples. push ( Sample :: new (
372- builder. build ( & tokens, account_id) ,
374+ builder. build ( & tokens, account_id, config . l2_normalize ) ,
373375 sample. is_spam ,
374376 ) ) ;
375377 }
376378 TrainTask :: Ccfh { builder, .. } => {
377- builder. scale ( & mut tokens) ;
379+ if config. log_scale {
380+ builder. scale ( & mut tokens) ;
381+ }
378382 ccfh_samples. push ( Sample :: new (
379- builder. build ( & tokens, account_id) ,
383+ builder. build ( & tokens, account_id, config . l2_normalize ) ,
380384 sample. is_spam ,
381385 ) ) ;
382386 }
@@ -558,6 +562,9 @@ impl SpamClassifier for Server {
558562
559563 async fn spam_classify ( & self , ctx : & mut SpamFilterContext < ' _ > ) -> trc:: Result < ( ) > {
560564 let classifier = self . inner . data . spam_classifier . load_full ( ) ;
565+ let Some ( config) = & self . core . spam . classifier else {
566+ return Ok ( ( ) ) ;
567+ } ;
561568
562569 let started = Instant :: now ( ) ;
563570 match classifier. as_ref ( ) {
@@ -566,7 +573,9 @@ impl SpamClassifier for Server {
566573 let mut has_prediction = false ;
567574 let mut tokens = self . spam_build_tokens ( ctx) . await . 0 ;
568575 let feature_builder = classifier. feature_builder ( ) ;
569- feature_builder. scale ( & mut tokens) ;
576+ if config. log_scale {
577+ feature_builder. scale ( & mut tokens) ;
578+ }
570579
571580 for rcpt in & ctx. input . env_rcpt_to {
572581 let prediction = if let Some ( account_id) = self
@@ -577,9 +586,11 @@ impl SpamClassifier for Server {
577586 {
578587 has_prediction = true ;
579588 classifier
580- . predict_proba_sample (
581- & feature_builder. build ( & tokens, account_id. into ( ) ) ,
582- )
589+ . predict_proba_sample ( & feature_builder. build (
590+ & tokens,
591+ account_id. into ( ) ,
592+ config. l2_normalize ,
593+ ) )
583594 . into ( )
584595 } else {
585596 None
@@ -591,8 +602,11 @@ impl SpamClassifier for Server {
591602 ctx. result . classifier_confidence = classifier_confidence;
592603 } else {
593604 // None of the recipients are local, default to global model prediction
594- let prediction =
595- classifier. predict_proba_sample ( & feature_builder. build ( & tokens, None ) ) ;
605+ let prediction = classifier. predict_proba_sample ( & feature_builder. build (
606+ & tokens,
607+ None ,
608+ config. l2_normalize ,
609+ ) ) ;
596610 ctx. result . classifier_confidence =
597611 vec ! [ prediction. into( ) ; ctx. input. env_rcpt_to. len( ) ] ;
598612 }
@@ -602,7 +616,9 @@ impl SpamClassifier for Server {
602616 let mut has_prediction = false ;
603617 let mut tokens = self . spam_build_tokens ( ctx) . await . 0 ;
604618 let feature_builder = classifier. feature_builder ( ) ;
605- feature_builder. scale ( & mut tokens) ;
619+ if config. log_scale {
620+ feature_builder. scale ( & mut tokens) ;
621+ }
606622
607623 for rcpt in & ctx. input . env_rcpt_to {
608624 let prediction = if let Some ( account_id) = self
@@ -613,9 +629,11 @@ impl SpamClassifier for Server {
613629 {
614630 has_prediction = true ;
615631 classifier
616- . predict_proba_sample (
617- & feature_builder. build ( & tokens, account_id. into ( ) ) ,
618- )
632+ . predict_proba_sample ( & feature_builder. build (
633+ & tokens,
634+ account_id. into ( ) ,
635+ config. l2_normalize ,
636+ ) )
619637 . into ( )
620638 } else {
621639 None
@@ -627,8 +645,11 @@ impl SpamClassifier for Server {
627645 ctx. result . classifier_confidence = classifier_confidence;
628646 } else {
629647 // None of the recipients are local, default to global model prediction
630- let prediction =
631- classifier. predict_proba_sample ( & feature_builder. build ( & tokens, None ) ) ;
648+ let prediction = classifier. predict_proba_sample ( & feature_builder. build (
649+ & tokens,
650+ None ,
651+ config. l2_normalize ,
652+ ) ) ;
632653 ctx. result . classifier_confidence =
633654 vec ! [ prediction. into( ) ; ctx. input. env_rcpt_to. len( ) ] ;
634655 }
0 commit comments