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

音频网站模板湖南省城乡建设厅网站

音频网站模板,湖南省城乡建设厅网站,郑州做网站的大公司有哪些,徐州网站设计制作建设随着计算资源和大规模数据集的发展,大语言模型因其庞大的参数量和训练数据,在各项任务中表现极其优异,但是模型在面临代码生成、结构化数据输出等场景时会存在非法输出,这就需要对模型解码过程进行有效干预。 文章目录1.背景2.前缀…

随着计算资源和大规模数据集的发展,大语言模型因其庞大的参数量和训练数据,在各项任务中表现极其优异,但是模型在面临代码生成、结构化数据输出等场景时会存在非法输出,这就需要对模型解码过程进行有效干预。

文章目录

    • 1.背景
    • 2.前缀树
      • 2.1前缀树的构建
      • 2.2前缀树的插入
      • 2.3前缀树的查找
    • 3.前缀树约束解码
      • 3.1约束解码逻辑
      • 3.2约束解码实现
    • 4.总结

1.背景

随着计算资源和大规模数据集的发展,大语言模型因其庞大的参数量和训练数据,在各项任务中表现极其优异,但是模型在面临代码生成、结构化数据输出等场景时会存在非法输出,这就需要对模型解码过程进行有效干预。

2.前缀树

前缀树(字典树)是一种树结构,每一个节点代表一个字符串前缀,每个节点可以连接多个节点(N叉树形式),子节点代表字符串是由当前节点和通往该节点路径的所有字符组成的。
那么前缀树的构建、插入、查找就成为了较为重要的前置基础,因此下文将会对前缀树的各项操作进行说明。

注:为了巩固练习,可以做下leetcode的这道题目:前缀树练习.

2.1前缀树的构建

对于树的初始化,首先需要给定一个根节点,前缀树的根可以用一个空的哈希表来初始化。

def __init__(self):self.root = {}

2.2前缀树的插入

对于前缀树的插入,需要从根节点开始遍历,若找到前缀树中存在对应字符,则继续在当前节点的孩子节点进行查找,直到找不到对应字符;若前缀树中未出现对应字符,则在当前节点挂载该字符,并未其创建一个空哈希表,已被挂载其孩子节点。

def insert(self, word):cur = self.rootfor w in word:if w not in cur:cur[w] = {}cur = cur[w]cur['#'] = True

2.3前缀树的查找

对于前缀树的查找,本质与插入的思想一致,从根节点开始遍历,若未找到相应字符返回False,若找到相应字符则在其孩子节点中继续查找剩余字符。

def startsWith(self, prefix):cur = self.rootfor w in prefix:if w not in cur:return Falsecur = cur[w]return True

3.前缀树约束解码

有了前缀树的基础之后,那么我们可以来学习如何用前缀树来约束LLM解码。
LLM在解码最后阶段会计算词表中所有词的logit,然后进行softmax之后选择分数最高的词作为下一个token的输出(贪心解码策略),因此我们可以拿到模型计算的logit进行修改,将输出范围外的token设置为很大的负数,再返回给模型进行解码。

3.1约束解码逻辑

①设置last_token,从这个词之后要对解码过程进行约束,并找到这个词在序列中的索引。
②判断last_token之后的词是否符合前缀树中的路径。
③若合法,则获取最后一个词下面挂载的孩子节点,对孩子节点以外的字符进行屏蔽;若不合法,则终止序列生成。
④将logit传回LLM。

import itertools
import torch
from transformers import LogitsProcessorclass TrieLogitsProcessor(LogitsProcessor):def __init__(self, trie, tokenizer, num_beams, last_token=':'):self.trie = trieself.num_beams = num_beams # 候选序列的个数self.last_token = tokenizer(last_token)['input_ids'][1:][0] # 从这个词之后,要对解码进行约束self.eos_token_id = tokenizer.eos_token_id # 结束标志def __call__(self, input_ids, scores):mask = torch.ones_like(scores, dtype=torch.bool)for i, input_id in enumerate(input_ids):sequence = input_id.tolist()# 找到last_token在序列中的索引if self.last_token in sequence:index_from_end = len(sequence) - 1 - sequence[::-1].index(self.last_token)sub_sequence = sequence[index_from_end + 1:]cur = self.trie# 判断序列是否合法for s in sub_sequence:if s in cur.children:cur = cur.children[s]else:cur = Nonebreakif cur:next_states = cur.childrenelse: next_states = {self.eos_token_id}scores[i, list(next_states)] = -1e10valid_token_ids = list(next_states)# 对不合法的token进行屏蔽mask[i, valid_token_ids] = Falsescores[i] = scores[i].masked_fill(mask[i], -float(1e12))if len(next_states) < self.num_beams:complementary_ids = list(i for i in range(self.num_beams - len(next_states)))scores[i, list(complementary_ids)] = -1e10return scores

3.2约束解码实现

最后在model.generate中可以接收一个参数logits_processor,可以将上述约束解码策略传入。

outputs = model.generate(input_ids,logits_processor=logits_processor,max_length=50,num_beams=num_beams,num_return_sequences=num_beams,output_scores=True,return_dict_in_generate=True,early_stopping=True)

4.总结

通过构建一个包含所有有效输出模式的前缀树,我们在解码阶段动态地屏蔽那些不符合预定规则的token,从而显著提升模型在垂直领域或特定任务中的输出准确性和可靠性,减少不合法输出。

http://www.dtcms.com/a/402575.html

相关文章:

  • 有风格的网站东莞市网络seo推广平台
  • 企业网站一定要备案吗郑州重点工程建设项目
  • 用什么编程语言做网站好南京专门做网站
  • 专业进出口贸易网站光通信网站模板
  • 4k视频素材网站汕头网站建设推荐
  • 网站怎么验证用户是否登陆德州哪个做网站做得好
  • 网络优化有哪些主要流程站内seo的技巧
  • 昭通市有做网站的吗网站的后台是开发做的
  • 创网易邮箱账号哈尔滨seo
  • 平台建站上海网站开发报价
  • 建设一个网站需要哪些费用塘厦企业网站推广公司
  • 网站轮播图片怎么做的分销网站怎么做
  • 九江本土专业网站建设域名解析网站建设
  • 网站建站管理做网站材料
  • 网页建站费用专业定制网站
  • 网站建设经费预算表磁力猫搜索引擎入口官网
  • 求个网站好人有好报百度贴吧网络营销的功能是什么?
  • 免费发帖的网站比亚迪新能源车型及价格
  • 高台县建设局网站移动应用还是网站开发
  • 网站建设方案书安全性建设单位招聘用那个网站
  • 企业自助建站模板做网站需要哪些软件
  • 公司重名 做网站开发网站类型
  • 农药放行单在哪个网站做秦皇岛山海关电力工程招标
  • 联雅网站建设公司网页认证怎么认证
  • 自己做网站能做付费链接吗站外推广方式
  • 网站开发系统源代码网络平台怎么建立网站吗
  • 有哪些网站是cms山西孝义网站开发
  • 政务网站风格相册管理网站模板下载失败
  • 宁波应用多的建站行业超低价的锦州网站建设
  • 苏州科建设交通学院网站尚品网站建设