Bladeren bron

[Feature] Allow to load and use dynamic ANNs with torch

tags/1.7.0
Vsevolod Stakhov 6 jaren geleden
bovenliggende
commit
0b37952e90
7 gewijzigde bestanden met toevoegingen van 164 en 1 verwijderingen
  1. 16
    0
      lualib/global_functions.lua
  2. 80
    0
      lualib/lua_nn.lua
  3. 16
    0
      lualib/lua_redis.lua
  4. 16
    0
      lualib/lua_util.lua
  5. 16
    0
      lualib/maps.lua
  6. 16
    0
      lualib/meta_functions.lua
  7. 4
    1
      rules/rspamd.lua

+ 16
- 0
lualib/global_functions.lua Bestand weergeven

@@ -1,3 +1,19 @@
--[[
Copyright (c) 2017, Vsevolod Stakhov <vsevolod@highsecure.ru>

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
]]--

local logger = require "rspamd_logger"
local lua_util = require "lua_util"
local lua_redis = require "lua_redis"

+ 80
- 0
lualib/lua_nn.lua Bestand weergeven

@@ -0,0 +1,80 @@
--[[
Copyright (c) 2017, Vsevolod Stakhov <vsevolod@highsecure.ru>

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
]]--

local rspamd_util = require "rspamd_util"
local torch
local nn
local exports = {}

local lua_nn_models = {}

if rspamd_config:has_torch() then
torch = require "torch"
nn = require "nn"
end

if torch then
exports.load_rspamd_nn = function()
local function gen_process_callback(name)
return function(str)
if str then
local f = torch.MemoryFile(torch.CharStorage():string(str))
local ret, tnn_or_err = pcall(function() f:readObject() end)
if not ret then
rspamd_logger.errx(rspamd_config, "cannot load neural net model %s: %s",
name, tnn_or_err)
else
rspamd_logger.infox(rspamd_config, "loaded NN model %s: %s bytes",
name, #str)
lua_nn_models[name] = tnn_or_err
end
end
end
end
local section = rspamd_config:get_all_opts("nn_models")

if section and type(section) == 'table' then
for k,v in pairs(section) do
if not rspamd_config:add_map(v, "nn map " .. k, gen_process_callback(k)) then
rspamd_logger.warnx(rspamd_config, 'cannot load NN map %1', k)
end
end
end
end
exports.try_rspamd_nn = function(name, input)
if not lua_nn_models.name then
return false, 0.0
else
local ret, res_or_err = pcall(function() lua_nn_models.name:forward(input) end)
if not ret then
rspamd_logger.errx(rspamd_config, "cannot run neural net model %s: %s",
name, res_or_err)
else
return true, tonumber(res_or_err)
end
end

return false, 0.0
end
else
exports.load_rspamd_nn = function()
end
exports.try_rspamd_nn = function(name, input)
return false,0.0
end
end

return exports

+ 16
- 0
lualib/lua_redis.lua Bestand weergeven

@@ -1,3 +1,19 @@
--[[
Copyright (c) 2017, Vsevolod Stakhov <vsevolod@highsecure.ru>

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
]]--

local logger = require "rspamd_logger"

local exports = {}

+ 16
- 0
lualib/lua_util.lua Bestand weergeven

@@ -1,3 +1,19 @@
--[[
Copyright (c) 2017, Vsevolod Stakhov <vsevolod@highsecure.ru>

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
]]--

local exports = {}
local lpeg = require 'lpeg'


+ 16
- 0
lualib/maps.lua Bestand weergeven

@@ -1,3 +1,19 @@
--[[
Copyright (c) 2017, Vsevolod Stakhov <vsevolod@highsecure.ru>

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
]]--

local exports = {}

local function rspamd_map_add(mname, optname, mtype, description)

+ 16
- 0
lualib/meta_functions.lua Bestand weergeven

@@ -1,3 +1,19 @@
--[[
Copyright (c) 2017, Vsevolod Stakhov <vsevolod@highsecure.ru>

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
]]--

local exports = {}

-- Metafunctions

+ 4
- 1
rules/rspamd.lua Bestand weergeven

@@ -71,4 +71,7 @@ if rmaps and type(rmaps) == 'table' then
rspamd_maps[k] = map_or_err
end
end
end
end

local rspamd_nn = require "lua_nn"
rspamd_nn.load_rspamd_nn() -- Load defined models

Laden…
Annuleren
Opslaan