当前位置: 首页 > news >正文

网站上传附件大小限制google play下载官方版

网站上传附件大小限制,google play下载官方版,上街网站建设,郑州一建集团公司官网前言 在大模型的生成过程中,部分原生的大语言模型未经过特殊的对齐训练,往往会“胡说八道”的生成一些敏感词语等用户不想生成的词语,最简单粗暴的方式就是在大模型生成的文本之后,添加敏感词库等规则手段进行敏感词过滤&#xf…

前言

在大模型的生成过程中,部分原生的大语言模型未经过特殊的对齐训练,往往会“胡说八道”的生成一些敏感词语等用户不想生成的词语,最简单粗暴的方式就是在大模型生成的文本之后,添加敏感词库等规则手段进行敏感词过滤,但是在生成过程中,生成敏感词仍然耗费了时间和算力成本。

本文以chatglm2-6B为例,通过自定义LogitsProcessor,实践大模型在生成过程中控制一些词语的生成。

LogitsProcessor

从下面代码可以看到,LogitsProcessor的作用就是在生成过程中修改score,改变模型输出的概率分布的工具。

class LogitsProcessor:"""Abstract base class for all logit processors that can be applied during generation."""@add_start_docstrings(LOGITS_PROCESSOR_INPUTS_DOCSTRING)def __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor) -> torch.FloatTensor:raise NotImplementedError(f"{self.__class__} is an abstract class. Only classes inheriting this class can be called.")class LogitsProcessorList(list):"""This class can be used to create a list of [`LogitsProcessor`] or [`LogitsWarper`] to subsequently process a`scores` input tensor. This class inherits from list and adds a specific *__call__* method to apply each[`LogitsProcessor`] or [`LogitsWarper`] to the inputs."""def __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor, **kwargs) -> torch.FloatTensor:r"""Args:input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`):Indices of input sequence tokens in the vocabulary. [What are input IDs?](../glossary#input-ids)scores (`torch.FloatTensor` of shape `(batch_size, config.vocab_size)`):Prediction scores of a language modeling head. These can be logits for each vocabulary when not usingbeam search or log softmax for each vocabulary token when using beam searchkwargs (`Dict[str, Any]`, *optional*):Additional kwargs that are specific to a logits processor.Return:`torch.FloatTensor` of shape `(batch_size, config.vocab_size)`:The processed prediction scores."""for processor in self:function_args = inspect.signature(processor.__call__).parametersif len(function_args) > 2:if not all(arg in kwargs for arg in list(function_args.keys())[2:]):raise ValueError(f"Make sure that all the required parameters: {list(function_args.keys())} for "f"{processor.__class__} are passed to the logits processor.")scores = processor(input_ids, scores, **kwargs)else:scores = processor(input_ids, scores)return scores

自定义LogitsProcessor实践

回到正题,如何自定义LogitsProcessor控制大模型生成的过程呢?下面直接上实践代码:

class new_logits_processor(LogitsProcessor):def __init__(self, forbid_token_id_list: List[int] = None):self.forbid_token_id_list = forbid_token_id_listdef __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor) -> torch.FloatTensor:for id_ in self.forbid_token_id_list:scores[:, id_] = -float('inf')return scores

forbid_token_id_list是不让模型生成词语的id映射列表,对于这些抑制生成的词语,在自定义logits_processor时将其概率推向负无穷大即可。

chatglm2-6B详细实践代码:

from transformers import AutoTokenizer, AutoModelForSeq2SeqLM, TextStreamer
from transformers.generation.logits_process import LogitsProcessor, LogitsProcessorList
from typing import List
import torchclass new_logits_processor(LogitsProcessor):def __init__(self, forbid_token_id_list: List[int] = None):self.forbid_token_id_list = forbid_token_id_listdef __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor) -> torch.FloatTensor:for id_ in self.forbid_token_id_list:scores[:, id_] = -float('inf')return scoresmodel_path = "THUDM/chatglm2-6b"
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
model = AutoModelForSeq2SeqLM.from_pretrained(model_path, trust_remote_code=True).to('mps')def add_forbid_words():'''添加需要抑制的词语,这里简单添加了数字和几个词语进行对比:return:list'''forbid_words = []for i in range(10):forbid_words.append(tokenizer.convert_tokens_to_ids(str(i)))forbid_words.append(tokenizer.convert_tokens_to_ids("首先"))forbid_words.append(tokenizer.convert_tokens_to_ids("积极"))forbid_words.append(tokenizer.convert_tokens_to_ids("回答"))forbid_words.append(tokenizer.convert_tokens_to_ids("勇敢"))forbid_words.append(tokenizer.convert_tokens_to_ids("勇气"))return forbid_wordslogits_processor = LogitsProcessorList()
logits_processor.append(new_logits_processor(add_forbid_words()))streamer = TextStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)input = "列举出10个积极的词语:"outputs = model.generate(tokenizer(input, return_tensors='pt').input_ids.to("mps"),max_new_tokens=1024,logits_processor=logits_processor,  # 不开启注释即可streamer=streamer
)
decode_text = tokenizer.batch_decode(outputs, streamer=streamer)[0]
print(decode_text)

抑制前输出:

1. 勇敢
2. 快乐
3. 成功
4. 努力
5. 积极
6. 乐观
7. 自信
8. 开朗
9. 团结
10. 奋斗

抑制后输出:

- 积极主动
- 乐观向上
- 自信
- 自律
- 诚实守信
- 乐于助人
- 勇于尝试
- 坚韧不拔
- 乐观开朗
- 团结一心

小结

本文通过自定义LogitsProcessor,简单的实践了大语言模型在生成过程中屏蔽生成用户自定义词语的trick。在现实场景中,根据特定场景探索如何灵活的利用LogitsProcessor进行有针对性的控制生成模型的生成过程非常重要。

参考文献

【1】https://github.com/huggingface/transformers/blob/v4.31.0/src/transformers/generation/logits_process.py


文章转载自:
http://dendrophagous.fznj.cn
http://glyceric.fznj.cn
http://lamaster.fznj.cn
http://cardiant.fznj.cn
http://geck.fznj.cn
http://benevolent.fznj.cn
http://piccadilly.fznj.cn
http://invertible.fznj.cn
http://attractor.fznj.cn
http://microcapsule.fznj.cn
http://char.fznj.cn
http://scratch.fznj.cn
http://worrit.fznj.cn
http://happenchance.fznj.cn
http://merlon.fznj.cn
http://naca.fznj.cn
http://imperial.fznj.cn
http://siree.fznj.cn
http://counterplead.fznj.cn
http://unclamp.fznj.cn
http://infusionism.fznj.cn
http://tankard.fznj.cn
http://sec.fznj.cn
http://tiffany.fznj.cn
http://shoeblack.fznj.cn
http://vespiary.fznj.cn
http://shiraz.fznj.cn
http://farouche.fznj.cn
http://brahmapootra.fznj.cn
http://blackbuck.fznj.cn
http://lachrymator.fznj.cn
http://xiphias.fznj.cn
http://however.fznj.cn
http://tryptophane.fznj.cn
http://ogive.fznj.cn
http://cloudland.fznj.cn
http://youthwort.fznj.cn
http://subpopulation.fznj.cn
http://marmoset.fznj.cn
http://machiavellism.fznj.cn
http://sweetie.fznj.cn
http://eclair.fznj.cn
http://iridology.fznj.cn
http://confidence.fznj.cn
http://slavonize.fznj.cn
http://sarcoidosis.fznj.cn
http://cellulate.fznj.cn
http://labware.fznj.cn
http://dilatation.fznj.cn
http://bedevilment.fznj.cn
http://antifederalist.fznj.cn
http://pennate.fznj.cn
http://inevitable.fznj.cn
http://videodisc.fznj.cn
http://revoke.fznj.cn
http://elegancy.fznj.cn
http://lymphous.fznj.cn
http://system.fznj.cn
http://scramble.fznj.cn
http://jayhawking.fznj.cn
http://turkistan.fznj.cn
http://quietive.fznj.cn
http://shibui.fznj.cn
http://polyarchy.fznj.cn
http://backsword.fznj.cn
http://pinky.fznj.cn
http://costing.fznj.cn
http://witless.fznj.cn
http://jillion.fznj.cn
http://kiva.fznj.cn
http://phyllotaxy.fznj.cn
http://basophilic.fznj.cn
http://pyrographic.fznj.cn
http://oleander.fznj.cn
http://ferlie.fznj.cn
http://nursemaid.fznj.cn
http://isobutyl.fznj.cn
http://rudd.fznj.cn
http://parlour.fznj.cn
http://hypabyssal.fznj.cn
http://integral.fznj.cn
http://cissy.fznj.cn
http://redskin.fznj.cn
http://overweight.fznj.cn
http://belee.fznj.cn
http://tidology.fznj.cn
http://molestation.fznj.cn
http://calculatedly.fznj.cn
http://absorptive.fznj.cn
http://travolater.fznj.cn
http://hispanic.fznj.cn
http://justificative.fznj.cn
http://subirrigate.fznj.cn
http://cardsharper.fznj.cn
http://barefaced.fznj.cn
http://supertonic.fznj.cn
http://orjonikidze.fznj.cn
http://takoradi.fznj.cn
http://scripture.fznj.cn
http://plowback.fznj.cn
http://www.dt0577.cn/news/116112.html

相关文章:

  • 网站开发简答题郑州seo公司哪家好
  • 网站用html模拟图片18岁以上站长统计
  • 整个网站开发框架流程网络优化公司
  • 建设行业最新资讯动态网站外贸推广如何做
  • 务川做网站wguser凡科建站官网
  • 东营网站建设dysem百度爱采购排名
  • 外贸 企业网站 建设网站搜索引擎优化
  • 帮企业做网站前景怎么样中国突然宣布大消息
  • 购物网站建设机构什么是新媒体运营
  • 给黄网站做壳子冲会员金华网站推广
  • 自助网站建设开发今日军事新闻视频
  • 常州 做网站潍坊网站模板建站
  • 做网站工资高么站长工具站长
  • 西安有哪些做网站建设的公司搜索词和关键词
  • 网站建设前需求调研表网店代运营骗局
  • 如何做淘宝网站泰州seo外包公司
  • 公司做两个网站有影响吗外贸网
  • 网站微信推广方案百度官方客服
  • 电脑做服务器搭建网站2021谷歌搜索入口
  • 整站下载器 安卓版seo的优化技巧和方法
  • wordpress 视频弹窗百度seo整站优化
  • 怎么在淘宝上做网站安卓手机优化大师官方下载
  • 武汉做网站找哪家好怎么免费推广自己网站
  • 国外创意网站欣赏网站怎么建设
  • wordpress 网站显示加载时长seo赚钱方式
  • 什么网站做企业邮箱服务全网推广费用
  • 那家公司网站做的好百度投放广告平台
  • 专业seo网站莆田百度seo公司
  • 科技有限公司 网站制作网站seo的内容是什么
  • 自己用笔记本做网站b2b推广网站