]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Filter NaN values when storing training data
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 4 Oct 2017 19:27:01 +0000 (20:27 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 4 Oct 2017 19:27:01 +0000 (20:27 +0100)
src/plugins/lua/fann_redis.lua

index 42e05f1acbbc721bce2a1e8c11de58b4ccc545da..cf65555581a89b5f3d3191a5d9989179fe391cc4 100644 (file)
@@ -566,17 +566,24 @@ local function fann_train_callback(rule, task, score, required_score, id)
         local mt = meta_functions.rspamd_gen_metatokens(task)
         -- Add filtered meta tokens
         fun.each(function(e) table.insert(fann_data, e) end, mt)
-        local str = rspamd_util.zstd_compress(table.concat(fann_data, ';'))
-        vec_len = #str
+        -- Check NaNs in train data
+        if fun.all(function(e) return e == e end, fann_data) then
+          local str = rspamd_util.zstd_compress(table.concat(fann_data, ';'))
+          vec_len = #str
+
+          rspamd_redis.redis_make_request(task,
+            rule.redis,
+            nil,
+            true, -- is write
+            learn_vec_cb, --callback
+            'LPUSH', -- command
+            {fname .. '_' .. k, str} -- arguments
+          )
+        else
+          rspamd_logger.errx(task, "do not store learn vector as it contains %s NaN values",
+            fun.length(fun.filter(function(e) return e ~= e end, fann_data)))
+        end
 
-        rspamd_redis.redis_make_request(task,
-          rule.redis,
-          nil,
-          true, -- is write
-          learn_vec_cb, --callback
-          'LPUSH', -- command
-          {fname .. '_' .. k, str} -- arguments
-        )
       else
         if err then
           rspamd_logger.errx(task, 'cannot check if we can train %s: %s', fname, err)