]> source.dussan.org Git - rspamd.git/commitdiff
[Project] Neural: Start PCA implementation
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 27 Aug 2020 14:06:02 +0000 (15:06 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 27 Aug 2020 14:06:02 +0000 (15:06 +0100)
src/plugins/lua/neural.lua

index 9df2f1c55126f7d27434ac93c59c5bdbd009324b..a3027662c43c1f3c93db544b430b34832abdc025 100644 (file)
@@ -24,6 +24,7 @@ local rspamd_util = require "rspamd_util"
 local rspamd_kann = require "rspamd_kann"
 local lua_redis = require "lua_redis"
 local lua_util = require "lua_util"
+local rspamd_tensor = require "rspamd_tensor"
 local fun = require "fun"
 local lua_settings = require "lua_settings"
 local meta_functions = require "lua_meta"
@@ -58,6 +59,7 @@ local default_options = {
   hidden_layer_mult = 1.5, -- number of neurons in the hidden layer
   symbol_spam = 'NEURAL_SPAM',
   symbol_ham = 'NEURAL_HAM',
+  max_inputs = nil, -- when PCA is used
 }
 
 local redis_profile_schema = ts.shape{
@@ -68,6 +70,8 @@ local redis_profile_schema = ts.shape{
   distance = ts.number:is_optional(),
 }
 
+local has_blas = rspamd_tensor.has_blas()
+
 -- Rule structure:
 -- * static config fields (see `default_options`)
 -- * prefix - name or defined prefix
@@ -1488,6 +1492,12 @@ for k,r in pairs(rules) do
 
   if not rule_elt.profile then rule_elt.profile = {} end
 
+  if rule_elt.max_inputs and not has_blas then
+    rspamd_logger.errx('cannot set max inputs to %s as BLAS is not compiled in',
+        rule_elt.name, rule_elt.max_inputs)
+    rule_elt.max_inputs = nil
+  end
+
   rspamd_logger.infox(rspamd_config, "register ann rule %s", k)
   settings.rules[k] = rule_elt
   rspamd_config:set_metric_symbol({