当前位置:   article > 正文

开源模型应用落地-chatglm3-6b-模型输出违禁词检测(九)_这个查下是否违规的功能有没有开源模型

这个查下是否违规的功能有没有开源模型

 一、前言

    受限于模型本身的一些缺陷,任何模型均可能会生成一些不正确的输出。如何通过技术的手段去规避模型潜在的风险,提升推理质量是需要持续探究的过程。

    如何利用第三方内容安全审核服务去检测模型输出内容的合规性,请查看:开源模型应用落地-安全合规篇-模型输出合规性检测(三)


二、术语

2.1、违禁词

    是指在特定环境或上下文中被禁止使用的词语或短语。这些词汇通常包含敏感、冒犯、侮辱、不雅或违法的内容,可能会引起争议、伤害他人或违反相关规定。

    违禁词的范围因文化、社会、国家和机构的差异而异。例如,在社交媒体平台或在线论坛上,违禁词可能包括种族歧视、仇恨言论、色情、暴力、恶意攻击等内容。在法律层面,违禁词可能包括诽谤、诅咒、威胁、侵犯他人隐私或煽动暴力等。


三、前置条件

3.1. windows or linux操作系统均可

3.2. 下载chatglm3-6b模型

从huggingface下载:https://huggingface.co/THUDM/chatglm3-6b/tree/main

从魔搭下载:魔搭社区汇聚各领域最先进的机器学习模型,提供模型探索体验、推理、训练、部署和应用的一站式服务。https://www.modelscope.cn/models/ZhipuAI/chatglm3-6b/fileshttps://www.modelscope.cn/models/ZhipuAI/chatglm3-6b/files

 3.3. 创建虚拟环境&安装依赖

  1. conda create --name chatglm3 python=3.10
  2. conda activate chatglm3
  3. pip install protobuf transformers==4.39.3 cpm_kernels torch>=2.0 sentencepiece accelerate

四、技术实现

4.1.示例代码

  1. # -*- coding = utf-8 -*-
  2. from transformers import AutoTokenizer, AutoModelForCausalLM
  3. modelPath = "/model/chatglm3-6b"
  4. def loadTokenizer():
  5. tokenizer = AutoTokenizer.from_pretrained(modelPath, use_fast=False, trust_remote_code=True)
  6. return tokenizer
  7. def loadModel():
  8. model = AutoModelForCausalLM.from_pretrained(modelPath, device_map="auto", trust_remote_code=True).cuda()
  9. model = model.eval()
  10. return model
  11. def main(prompt):
  12. past_key_values, history = None, []
  13. try:
  14. print("\nChatGLM:", end="")
  15. current_length = 0
  16. response_generated = False
  17. for response, history, past_key_values in model.stream_chat(
  18. tokenizer, prompt, history=history, top_p=1,
  19. temperature=0.01,
  20. past_key_values=past_key_values,
  21. return_past_key_values=True,
  22. bad_words_ids=bad_word_ids
  23. ):
  24. response_generated = True
  25. print(response[current_length:], end="", flush=True)
  26. current_length = len(response)
  27. if not response_generated:
  28. print("没有生成任何回答。")
  29. except RuntimeError as e:
  30. print(f"生成文本时发生错误:{e},这可能是涉及到设定的敏感词汇")
  31. if __name__ == "__main__":
  32. model = loadModel()
  33. tokenizer = loadTokenizer()
  34. bad_words = ["陈家祠", "白云山"]
  35. bad_word_ids = [tokenizer.encode(bad_word, add_special_tokens=False) for bad_word in bad_words]
  36. prompt = '我家在广州,你能给我推荐一些我家的特色景点吗?'
  37. main(prompt)

为了确保测试效果,上述代码使用了两个语义上属于合规的词汇作为测试。实际业务上,应该替换成有实际意义的违禁词。

4.2.启动命令

python -u chatglm3_bad_word_ids.py

调用结果:

结论是:命中了敏感词“陈家祠”,模型推理中断。


五、附带说明

5.1. 不带违禁词识别的完整代码及执行效果

  1. # -*- coding = utf-8 -*-
  2. from transformers import AutoTokenizer, AutoModelForCausalLM
  3. modelPath = "/model/chatglm3-6b"
  4. def loadTokenizer():
  5. tokenizer = AutoTokenizer.from_pretrained(modelPath, use_fast=False, trust_remote_code=True)
  6. return tokenizer
  7. def loadModel():
  8. model = AutoModelForCausalLM.from_pretrained(modelPath, device_map="auto", trust_remote_code=True).cuda()
  9. model = model.eval()
  10. return model
  11. def main(prompt):
  12. past_key_values, history = None, []
  13. try:
  14. print("\nChatGLM:", end="")
  15. current_length = 0
  16. response_generated = False
  17. for response, history, past_key_values in model.stream_chat(
  18. tokenizer, prompt, history=history, top_p=1,
  19. temperature=0.01,
  20. past_key_values=past_key_values,
  21. return_past_key_values=True
  22. ):
  23. response_generated = True
  24. print(response[current_length:], end="", flush=True)
  25. current_length = len(response)
  26. if not response_generated:
  27. print("没有生成任何回答。")
  28. except RuntimeError as e:
  29. print(f"生成文本时发生错误:{e},这可能是涉及到设定的敏感词汇")
  30. if __name__ == "__main__":
  31. model = loadModel()
  32. tokenizer = loadTokenizer()
  33. prompt = '我家在广州,你能给我推荐一些我家的特色景点吗?'
  34. main(prompt)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/901165
推荐阅读
相关标签
  

闽ICP备14008679号