背景介绍
随着LLM应用的广泛普及,用户对数据隐私的担忧日益增加。这些担忧主要源于用户与云端大型模型交互的提示词(Prompts)中可能泄露的个人或企业的隐私敏感信息。 多数场景下用户并不需要保护所有提示词信息,而仅需要保护提示词中的隐私实体不被泄漏。
以微软的数据隐私保护 Presidio为代表的隐私实体匿名化技术为解决这一问题提供了一种相对MPC更高效的匿名化脱敏方案。然而这种传统的匿名化处理方法无法在LLM生成的结果中还原出被替换的隐私敏感信息,从而限制了其可用性及准确性。
大模型提示词(Prompts)信息加密的常见方式:
- 掩盖重要信息:微软的 Presidio 隐私实体匿名化技术,无法在LLM生成的结果中还原出被替换的隐私敏感信息。
- 替换重要信息:Hide and Seek 方案,可以在LLM生成的结果中还原出被替换的隐私敏感信息。
一、大模型隐私保护解决方案
该方案在正常调用LLM服务流程中插入了两个执行的步骤:
1)平行替换隐私实体以实现隐私敏感信息的脱敏(Hide)
2)还原LLM输出中的隐私实体以恢复可用性(Seek)
二、脱敏还原模型的使用效果
由于机器学习环境配置复杂耗时,我提供了一个colab notebook用于demo演示,供您参考。
使用HaS模型执行摘要任务的代码示例:
from hideAndSeek import *
tokenizer = AutoTokenizer.from_pretrained("SecurityXuanwuLab/HaS-820m")
model = AutoModelForCausalLM.from_pretrained("SecurityXuanwuLab/HaS-820m")
# 阶段1:信息匿名
original_input = f"欢迎关注FasterAI公众号,FasterAI让每个人的AI学习之路走的更容易些!来自北京大学的青松老师,前中国电信大模型算法专家,结合多年的学习积累和超过200多场的招聘经验,历时六个多月精心整理了这份大模型学习清单。期望能为你前行的道路增添一丝轻松(*^▽^*)"
hide_input = hide(original_input, model, tokenizer)
# 阶段2:LLM 交互
prompt = f"原文:%s\n\n一句话简要概括上述文本:" % hide_input
hide_output = llm.invoke(prompt)
# 阶段3:信息还原
original_output = seek(hide_input, hide_output, original_input, model, tokenizer)
print(">"*100)
print(f"原始输入:\n{original_input}\n")
print(f"脱敏输入:\n{hide_input}\n")
print(f"脱敏输出:\n{hide_output}\n")
print(f"还原输出:\n{original_output}\n")
print("<"*100)
使用HaS模型执行文本摘要任务的示例:
可以看到,原始输入中的敏感信息在送到大模型之前进行了脱敏处理,在大模型处理后,被脱敏替换的内容又被还原成了原始信息
- 目前HaS原生支持的NLP任务类型有:润色,摘要,翻译,阅读理解和文本分类
- HaS 模型的方案的核心思想是使用生成式的方式实现脱敏和还原。
三、与同类型解决方案对比
Presidio方案
微软开源的数据脱敏与隐私保护SDK Presidio采用了正则匹配结合本地命名实体识别小模型(NER Model)识别隐私词,并采用全Lable标签对隐私词进行替换。其工作流程如下图所示:
从工作流程分析来看,Presidio方案不支持匿名信息的还原,也无法进行指代消解。因为采用了全标签替换的方法,导致其对原始文本中提示词的语言表达能力较弱,这可能对云端的大型语言模型的性能产生负面影响。再者,Presidio在识别隐私信息时需要依赖复杂的正则表达式匹配规则,这使得维护工作变得更加困难。
四、脱敏还原模型的训练和推理步骤
训练阶段
步骤1:训练Hide-Model
- 使用大模型构造匿名化训练数据
- 使用构造的匿名化数据训练小的隐藏模型(Hide-Model)
- 步骤2:使用大模型根据Hide-Model的结果执行相关任务
步骤2:训练Seek-Model
- 基于大模型构造去匿名化训练数据
- 使用构造的去匿名化数据训练小的还原模型(Seek-Model)
推理阶段
- 部署训练好的Hide-Model和Seek-Model
- 本地脱敏和还原:原始文本 → 实体替换 → LLM → 处理结果 → 实体还原
基本思想:将云端大模型的脱敏和还原的能力进行知识蒸馏,形成更小规模的生成式语言模型。
Tips备注:Hide-Model 和 Seek-Model 是同一个模型。
五、脱敏还原模型的训练过程
5.1 训练 Hide-Model
使用大模型构造匿名化训练数据
# 生成数据的提示词模板 Prompt for guiding LLM to perform anonymization. Substitute given words in the text into other random words. Text: {input_text} Given words: private_entities Substituted text: {task_type}
匿名化训练数据示例:
Input text c: The FBI (Federal Bureau of Investigation) is currently investigating a cyber attack on a major corporation that occurred on August 10, 2023. The breach took place in the company’s headquarters located in Washington DC. The FBI suspects that the attack was carried out by a foreign government.
Private entities P(c): [‘FBI’, ‘August 10, 2023’, ‘Washington DC’]
Substituted text s: The CIA (Central Intelligence Agency) is currently investigating a cyber attack on a major corpora- tion that occurred on September 15, 2025. The breach oc- curred in the company’s headquarters located in New York City. The CIA suspects that the attack was carried out by a foreign government.
使用构造的匿名化数据训练小的隐藏模型(Hide-Model):基于第一步标注的数据,使用lora或qlora方法基于bloomz来微调得到Hide Model。
# 微调Hide Model的数据样例 Substitute given words in the text into other random words. Text: c Given words: P(c) Substituted text: s
5.2 训练 Seek-Model
使用大模型构造反匿名化训练数据
# 生成数据的提示词模板 Input: {obscured_text} {task_type}: {obscured_api_response} Input: {input_text} {task_type}:
使用构造的反匿名化数据训练小的还原模型(Seek-Model):bloomz模型微调
# 微调Seek Model的数据样例 Input: e Translate: l Input: c Translate: r
六、方案的优势
此方案采用大量端到端标注数据基于开源模型Bloom训练了一个集隐私词发现和替换功能于一体的且支持隐私词还原的微调模型。
此方案支持匿名信息还原,也支持指代消解,由于采用标签和同近义词相混合的掩码方式从而最大限度保留了原提示词中的语义信息。最后,我们的方案不需要维护任何正则匹配规则,维护工作简单。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。