LLM大模型学习:AI时代,敏感词过滤,如何精准且高效,方法+代码实现

前言

自从我开始搞大模型应用,就一直有一个头疼的问题困扰着我的团队,那就是避免敏感信息

传统的做法是通过一些匹配算法,过滤掉敏感词,这个后面我们再讲。

但大模型的对话中,想要防止他做一些不合法的事情,就比较困难了。

传统做法&代码实现

原理

比较经典的算法有kmp 字典树,ac自动机,或者配合起来使用。

我们这里用一种字节树(我起的名)的方法。就是将所有敏感词,构建成一颗树,如下图:

image.png

需要对一段文本过滤时,则将文本依次从左向右,在这颗树中匹配。

代码实现

github 传送门

树节点的结构:

pub struct Node<V>{key:u8,data:Option<V>,next:Vec<Node<V>>
}

敏感词的抽象:

pub trait AsBytes{fn as_byte(&self)-> &[u8];
}

功能实现:

impl<V> ByteMap<V>
{pub fn new()->Self{ByteMap{root:Node::default(0)}}pub fn insert<K:AsBytes>(&mut self,key:&K,value:V){let keys = key.as_byte().to_vec();self.root.insert(keys.into_iter(),value);}pub fn get<K:AsBytes>(&self,key:K)->Option<&V>{let keys = key.as_byte();self.root.get(keys.iter())}// 找到第一个匹配的项pub fn match_first<K:AsBytes>(&self,keys:K) ->Option<&V>{let keys = keys.as_byte();return self.root.match_first(keys.iter())}// 匹配所有子集pub fn match_all<'a, K: AsBytes>(&'a self, keys:&'a K) ->Vec<&'a V> {let path = keys.as_byte();let vals = vec![];return self.root.match_all(path.iter(),vals);}pub fn remove<K:AsBytes>(&mut self, key:K) ->Option<V>{let keys = key.as_byte();self.root.remove(keys.iter())}
}

敏感词抽象的默认实现

我们需要给各种类型实现AsByte的默认实现,方便后续使用。

// 数值类型,节省代码
macro_rules! number_default_for_as_bytes {($($b:tt,$n:tt);*) => {$(impl AsBytes for $b{fn as_byte(&self) -> &[u8] {unsafe {&*(self as *const $b as *const [u8;$n])}}})*};
}
number_default_for_as_bytes!(u8,1;u16,2;u32,4;u64,8;u128,16;i8,1;i16,2;i32,4;i64,8;i128,16);// 对usize 和isize的特殊处理,略,详细请看上面github传送门// 对u8 list的一系列实现// char的实现,方便中文的处理
impl AsBytes for &[char]{fn as_byte(&self) -> &[u8] {unsafe {std::mem::transmute(*self)}}
}
impl AsBytes for Vec<char>{fn as_byte(&self) -> &[u8] {let cs = self.as_slice();unsafe {std::mem::transmute(cs)}}
}// 编译器不保证所有情况都解引用,我们给引用类型也加一个自实现
impl<T> AsBytes for &T
where T: AsBytes
{fn as_byte(&self) -> &[u8] {(*self).as_byte()}
}

注意: 在rust中想按中文字符切割,需要转成charchar长度是4 固定的,表示utf8时不会压缩空间。

使用

#[test]
fn byte_map_chinese(){let mut map = ByteMap::new();map.insert(&("你好".chars().collect::<Vec<char>>()),"你好");map.insert(&("hello".chars().collect::<Vec<char>>()),"hello");map.insert(&("123".chars().collect::<Vec<char>>()),"123");let target = "飞流123hello你好飞流直下三千尺".chars().collect::<Vec<char>>();for i in 0..target.len(){if let Some(s) = map.match_first(&target[i..]){println!("match ok ---> {}",s);}}
}

ai 相关的思考

分词

上面的匹配方式过于死板,随便加个符号,都能够轻松的被绕开。

为了加快速度和准确程度,我们可以对输入文本先过滤,再分词,再匹配。类似下面的方式

import jieba
import reinput = "我来-到北京a清华大*学"
input = re.sub(r'[-a*]','',input)seg_list = jieba.cut(input, cut_all=True)
print("Full Mode: " + "/ ".join(seg_list)) #> 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学

语法纠正

因为汉语言的博大精深,有些话词序颠倒,正常人也能够理解,但是想找出他们,殊为不易。

这种情况,需要先做词法纠正,如纠正错别字,纠正字序错误,再找敏感词。

这种方法不常用,方案复杂,收益低,缺点明显。

机器学习

利用一些传统的机器学习算法,做分类。

对一段文本进行分类,存在敏感词or不存在敏感词

这种方式需要衡量准确度,既容易误伤,又容易遗漏

NLP

利用NLP处理。

举个简单的思路:分词之后,计算目标词的向量,然后召回敏感词。

如果最相近敏感词和目标词的相似度超过某个阈值,则视为存在敏感信息。

也可以训练一个分类器 进行辨别。

这种方法速度稍慢,容易误伤。

集成

实际工程上,通常的做法是多个方法结合在一起使用。针对自己的业务,衡量耗时 效果 成本 等等因素,灵活的变通才是王道。

AIGC & 大模型

上面提到的过滤方法,都建立在你已知有哪些敏感词,有哪些敏感场景的情况下,进行防御的。

而现在的时代是,ai是生产者,ai是创造者,ai是消费者等等 多身份于一体的,那敏感信息,不合法的信息就更加难以防御。

看一下GPT是如何犯罪的。

如果你直接问它,如下图:

image.png

但咱们可以迂回一下:

image.png

看到这里,你大概是否理解了,我在前言中提到的头疼的问题,尤其是我们所处的互联网环境更加严格。

敏感词拦截

我们还是可以用传统的方式拦截,但有几个问题。

  1. 文本是流式的,那个要求过滤方式也是流式的。

    • 看到这,就解释了,有那么多现成的库,为啥我们要自己实现一套byte式的过滤方法。
    • 基于上面的我们的代码,你能否封装成一个流式处理库?
  2. 因为回复是实时模式,也就是你发现敏感词的时候,人已经看到了前面的内容,这种情况又要如何处理?

    • 数据加密,本文不讨论,以后再说

大模型安全

解决问题的最好方法,就是铲除源头。不要让模型产出有危害的信息是最好的方式。

这好像已经脱离了敏感词的范畴,以后我们单开一篇讲。

在这里插入图片描述

如何学习AI大模型?

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

在这里插入图片描述

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

在这里插入图片描述

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/416485.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文速读|重新审视奖励设计与评估:用于强健人型机器人站立与行走控制的方法

论文地址&#xff1a;https://arxiv.org/pdf/2404.19173 这篇论文为类人机器人站立和行走&#xff08;SaW&#xff09;控制器的持续可衡量改进奠定了基础。通过引入一套定量实际基准测试方法&#xff0c;作者展示了现有控制器的优缺点&#xff0c;并通过基准测试指导新控制器的…

Linux malloc内存分配实现原理

目录 一、用户进程虚拟内存空间布局 二、malloc工作原理 2.1 malloc实现流程 2.1.1 brk方式申请内存 2.1.2 mmap方式分配内存 2.2 核心代码 2.3 malloc分配物理内存的时机 2.4 malloc分配的实际内存大小 三、虚拟内存与物理内存 3.1 如何建立映射 3.2 分配物理内存 …

大数据采集与分析实训室解决方案

随着信息技术的飞速发展&#xff0c;大数据已成为推动产业升级、社会进步的重要力量。为了培养适应未来社会需求的大数据专业人才&#xff0c;构建一套科学、先进的大数据采集与分析实训室解决方案显得尤为重要。为此&#xff0c;唯众特推出全面升级的大数据采集与分析实训室解…

使用实例:xxl-job应用在spring cloud微服务下

1、首先下载&#xff0c;从github上下载&#xff0c;选择zip然后直接解压 https://github.com/xuxueli/xxl-job/releases 2、解压完后用idea启动。 启动这个启动类&#xff0c;然后按照路径访问 http://localhost:8080/xxl-job-admin/ 3、在你的项目里编写一个单独的微服务&a…

mac的使用

mac使用python的问题 对于python的虚拟环境&#xff0c;其实是基于已经安装到本地的python来安装不同的包。&#xff08;之前我的mac上只安装了python3.9.6 &#xff0c;安装的位置为/usr/bin/python3&#xff09;然后我在vscode里怎么找都找不到如何弄一个python3.7.6 的版本…

Nginx部署前端vue项目操作步骤和方法~小皮

部署前端Vue.js项目到Nginx上&#xff0c;是开发流程中至关重要的一步&#xff0c;它意味着将静态文件托管在Web服务器上&#xff0c;使应用程序能够被用户访问和交互。下面将详细介绍如何使用Nginx部署前端Vue项目的操作步骤和方法&#xff1a; 准备构建Vue项目 安装Node.js和…

k8s集群环境搭建(一主二从--kubeadm安装)

前置条件 版本&#xff1a;CentOS Linux release 7.5.1804 (Core) 内存&#xff1a;2G CPU&#xff1a;2 主机名解析 vim /etc/hosts 192.168.109.100 master 192.168.109.101 node1 192.168.109.102 node2时间同步&#xff0c;这里直接使用chronyd服务从网络同步时间syste…

2024.9.2

还没写完 #include <iostream> #include <cstring> using namespace std;class myString { private:char *str; //字符串int size; //实际字符长度int len; //字符串容量 public:myString():size(10) //无参构造函数{len siz…

ES6语法详解

以下是ES6常用的一些语法和特性&#xff1a; 声明变量的关键字变化&#xff1a;使用let和const、var来声明变量。 箭头函数&#xff1a;使用箭头&#xff08;>&#xff09;定义函数&#xff0c;简化函数的写法。 模板字符串&#xff1a;使用反引号&#xff08;&#xff0…

学习大数据DAY52 Docker中的Mysql主从配置

Mysql 数据库主从同步 上机练习 1 容器生成命令 压缩包获取镜像 docker image load -i /root/mysql.tar 创建并开启两个镜像&#xff1a; docker run --name mysql1 -d -p 3333:3306 \ -v /opt/mysql1/conf:/etc/mysql/conf.d/ \ -v /opt/mysql1/data:/var/lib/mysql \…

★ 算法OJ题 ★ 力扣1089 - 复写零

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将和大家一起做一道双指针算法题--复写零~ 目录 一 题目 二 算法解析 2.1 算法思路 2.2 算法流程 三 编写算法 一 题目 1089. 复写零 - 力扣&#xff08;LeetCode&#xff09; 二 算法解析 2.1 算法思路 …

国内独家首发 | OpenCSG开源中文版fineweb edu数据集

01 背景 近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术&#xff0c;特别是自然语言处理&#xff08;NLP&#xff09;的飞速发展深刻影响着各个行业。从智能客服到内容生成&#xff0c;从语音识别到翻译工具&#xff0c;NLP的应用已经无处不在。在这一领域中&…

【Datawhale X 李宏毅苹果书 AI夏令营】深度学习自适应学习率(AdaGrad/RMSProp/Adam)及其调度

1、自适应学习率 理论上&#xff1a;在训练一个网络&#xff0c;训练到现在参数在临界点附近&#xff0c;再根据特征值的正负号判断该 临界点是鞍点还是局部最小值实际上&#xff1a;①在训练的时候&#xff0c;要走到鞍点或局部最小值非常困难&#xff1b;②多数还未走到临界…

一次性了解Neo4j图形数据库

Neo4j高性能的NoSQL图形数据库 它将结构化数据存储在网络&#xff08;从数学角度叫做图&#xff09;上而不是传统的表格中。 Neo4j是一个嵌入式的、基于磁盘的、具备完全事务特性的Java持久化引擎。 但它在数据表示上采用了图形模型&#xff0c;即数据以节点&#xff08;Nod…

基于Yolov5_6.1、LPRNet、PySide6开发的车牌识别系统

项目概述 项目背景 随着车辆数量的不断增加&#xff0c;车牌识别系统在交通管理、停车场自动化等领域变得越来越重要。本项目利用先进的深度学习技术和现代图形用户界面框架来实现高效的车牌识别功能。 项目特点 高效识别&#xff1a;采用 YOLOv5_6.1 进行车牌定位&#xff…

【Day08】

目录 MySQL-多表查询-概述 MySQL-多表查询-内连接 MySQL-多表查询-外连接 MySQL-多表查询-[标量、列]子查询 MySQL-多表查询-[行、表]子查询 MySQL-多表查询-案例 MySQL-事务-介绍与操作 MySQL-事务-四大特性 MySQL-索引-介绍 MySQL-索引-结构 MySQL-索引-操作语法 …

Datawhale X 李宏毅苹果书 AI夏令营-深度学习入门task3:实践方法论

在应用机器学习算法时&#xff0c;实践方法论能够帮助我们更好地训练模型。 1.模型偏差 模型偏差可能会影响模型训练。举个例子&#xff0c;假设模型过于简单&#xff0c;即使找到的最好的函数也不能满足需求。这种情况就是想要在大海里面捞针&#xff08;一个损失低的函数&am…

2023 ICPC 江西省赛K. Split

K. Split time limit per test: 3 seconds memory limit per test: 512 megabytes You are given a positive integer n and a non-increasing sequence ai of length n , satisfying ∀i∈[1,n−1],. Then, you are given a positive integer m, which represents the tot…

传统CV算法——背景建模算法介绍

帧差法 由于场景中的目标在运动&#xff0c;目标的影像在不同图像帧中的位置不同。该类算法对时间上连续的两帧图像进行差分运算&#xff0c;不同帧对应的像素点相减&#xff0c;判断灰度差的绝对值&#xff0c;当绝对值超过一定阈值时&#xff0c;即可判断为运动目标&#xf…

HarmonyOS开发实战( Beta5版)小程序场景性能优化开发指导

简介 小程序是一种轻量级的应用&#xff0c;它不需要下载、安装即可使用&#xff0c;用户可以通过扫描二维码或者搜索直接打开使用。小程序运行在特定的平台上&#xff0c;平台提供了小程序的运行环境&#xff08;运行容器&#xff09;和一些基础服务&#xff08;小程序API&am…