ai大模型

BLOOM

BLOOM,HuggingFace推出的大型语言模型(LLM)

标签:ai大模型

BLOOM官网,HuggingFace推出的大型语言模型(LLM)

什么是BLOOM?

人人都能用的多语种大模型来了!支持59种语言,参数1760亿,1000名科学家联合发起! 一直以来,很多大模型都由造它们出来的大型私营科技公司垄断着。比如GPT-3等,对于普通人来说,再香也只能眼巴巴看着。不过现在,为了给你解馋,由近1000名科学家联合发起的一个志愿项目,耗时一年多炼出了一个号称和GPT-3一样强大的语言模型。它的名字叫BLOOM,参数1760亿,不光支持英文或者中文,连西班牙语、法语等59种语言都支持,是目前最大的多语言开源语言模型。是的,从现在起,从代码到数据集,BLOOM全部对外开放,所有人都可使用。

BLOOM官网: https://huggingface.co/bigscience/bloom

BLOOM参考文档: 

https://huggingface.co/docs/transformers/model_doc/bloom

BLOOM

动用法国超算、花费384块A100

BLOOM是一个BigScience项目,去年5月启动,由Hugging Face主导,收到了700万美元的公共捐款。共有来自全球60个国家、超过250个机构,以及超过1000名研究人员参与其中,其中包括以个人名义参加的Meta、谷歌等大厂员工。它的训练在法国超级计算机Jean Zay上进行,共花费了384块A100 GPU,其中每块有80 GB内存,训练吞吐量约150 TFLOP(该超算由低碳的核能提供动力,释放的热量还用来给学校供暖)。

BLOOM

BLOOM优势

然而,直到达到102%的时候,BLOOM才正式停止训练。在经过耗时117天的训练后,BLOOM在预定计划时间内顺利完成。

最终,BLOOM具备以下特点:

  • 参数数量达到了1760亿,比GPT-3还多10亿。
  • 模型包含70层,每层具有112个注意力头。
  • Token序列长度为2048。
  • 采用了GeLU激活函数。
  • 使用了总计3416亿条token(1.5TB文本数据)的数据集进行训练。
  • 支持13种编程语言和46种自然语言。

值得一提的是,对于许多语言而言,如法语、西班牙语和阿拉伯语等,这是首次拥有自己的开源模型(尽管目前尚不支持日语,一些网友已经发现了这一点)。

此外,为了尽量减少生成结果中的偏见,参与项目的人员还经过了一轮人工过滤,对抓取到的数据进行了筛选。

目前,BLOOM的训练对硬件设备有一定要求:

为了保证最佳效果,最好配备8块80GB的A100显卡或16块40GB的A100显卡。

这意味着只有规模稍大的团队才能承担这样的训练需求。

当然,也可以选择在云平台上进行训练,每小时最高费用为40美元。

最后,BLOOM表示将降低使用门槛,并计划开发一个分布式系统,允许实验室之间共享模型。

BLOOM将成为一个不断发展的模型家族,而非一劳永逸的项目。

BLOOM

BLOOM模型已通过 BigScience Workshop 提出了各种版本。BigScience 受到其他开放科学计划的启发,在这些计划中,研究人员汇集了他们的时间和资源,共同实现更高的影响。 BLOOM 的架构本质上类似于 GPT3(用于下一个令牌预测的自回归模型),但已经在 46 种不同的语言和 13 种编程语言上进行了训练。 模型的几个较小版本已在同一数据集上进行了训练。BLOOM 有以下版本:

  • 绽放-560m
  • 绽放-1B1
  • 布鲁姆-1B7
  • 布鲁姆-3B
  • 布鲁姆-7B1
  • 绽放 (176B 参数)

资源

官方拥抱面孔和社区(由 表示)🌎资源列表,可帮助您开始使用 BLOOM。如果您有兴趣提交要包含在此处的资源,请随时打开拉取请求,我们将对其进行审核!理想情况下,资源应演示新内容,而不是复制现有资源。

文本生成
  • BloomForCausalLM 由此 因果语言建模示例脚本 和 笔记本 支持。

另请参阅:

  • 因果语言建模任务指南
  • 文本分类任务指南
  • 令牌分类任务指南
  • 问答任务指南

⚡️ 推理

  • 关于 优化故事的博客:绽放推理 。
  • 一篇关于 DeepSpeed和Accelerate的令人难以置信的快速BLOOM推理的 博客。

⚙️ 训练

  • 关于 BLOOM 培训背后的技术的 博客。

布隆配置

变压器。 布隆配置

< >

vocab_size = 250880 hidden_size = 64 n_layer = 2 n_head = 8 layer_norm_epsilon = 1e-05 initializer_range = 0.0 = 0.02 use_cache = 真 bos_token_id = 1 eos_token_id = 2 apply_residual_connection_post_layernorm = 假 hidden_dropout = 0.0attention_dropout = 0.0 pretraining_tp = 1 slow_but_exact = 假 **kwargs

参数

  • vocab_size int ,可选 ,默认为 250880) — 布鲁姆模型的词汇大小。定义可以表示的不同令牌的最大数量 由 inputs_ids 时通过 调用 BloomModel 。检查 这个 讨论 如何 vocab_size 已定义。
  • hidden_size int ,可选 ,默认为 64) — 嵌入和隐藏状态的维度。
  • n_layer int ,可选 ,默认为 2) — 变压器编码器中的隐藏层数。
  • n_head int ,可选 ,默认为 8) — 转换器编码器中每个注意层的注意头数。
  • layer_norm_epsilon float ,可选 ,默认为 1e-5) — 要在图层归一化图层中使用的 epsilon。
  • initializer_range float ,可选 ,默认为 0.02) — 初始化所有权重矩阵的truncated_normal_initializer的标准偏差。
  • apply_residual_connection_post_layernorm bool ,可选 ,默认为 False) — 如果启用,则使用隐藏状态的层范数作为变压器块中的残差
  • hidden_dropout float ,可选 ,默认为 0.1) — 偏置压差上辍学函数的压差率。
  • attention_dropout float ,可选 ,默认为 0.1) — 应用于注意力概率的辍学率
  • use_cache bool ,可选 ,默认为 True) — 模型是否应返回最后一个键/值注意(并非所有模型都使用)。
  • pretraining_tp int ,可选 ,默认为 1) — 实验功能。威震天预训练期间使用的张量并行秩。请参考 这里 文档 以了解有关它的更多信息。此值为 有必要确保预训练结果的精确可重复性。请参考 这里 问题 。另请注意,仅当 slow_but_exact=True.
  • slow_but_exact bool ,可选 ,默认为 False) — 实验功能。是否使用缓慢但精确的注意力机制实现。而 合并 TP 秩张量,由于切片操作,结果可能略有不同 模型在威震天和我们的模型上训练。请参考 这里 问题 。获得更准确结果的解决方案是 启用此功能。启用此功能将损害推理的计算时间。可能会 在主模型被微调后解决 TP_rank=1。

这是用于存储 BloomModel 配置的配置类。它用于实例化一个绽放 根据指定的参数建模,定义模型体系结构。使用 默认值将产生与 Bloom 架构类似的配置 大科学/绽放 。

配置对象继承自 预训练配置 ,可用于控制模型输出。阅读 来自 PretrainedConfig 的文档以获取更多信息。

例:


from从变压器 导入 BloomConfig,BloomModel

 
# 初始化一个布隆 
配置 = BloomConfig()

 
# 从配置初始化模型(使用随机权重 
模型 = BloomModel(配置)

 
# 访问模型 
配置 = model.config 

绽放模型

变压器。 绽放模型

< >

配置 :BloomConfig

参数

  • config ( BloomConfig ) — 包含模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型关联的权重,只会加载 配置。查看 from_pretrained() 加载模型权重的

裸露的Bloom模型变压器输出原始隐藏状态,顶部没有任何特定的磁头。

此模型继承自 预训练模型 。检查超类文档以了解泛型方法 库实现其所有模型(例如下载或保存,调整输入嵌入的大小等)

这个模型也是一个 PyTorch torch.nn.Module 子类。 将其用作常规的 PyTorch 模块,并参考 PyTorch 文档了解与一般用法相关的所有事项 和行为。

向前

< >

input_ids :打字。可选[火炬。LongTensor] = 无 past_key_values :打字。联合[打字。元组[键入。元组[火炬。张量,火炬。Tensor], …], NoneType] = None attention_mask : typeping.可选[火炬。张量] = 无 head_mask :打字。可选[火炬。LongTensor] = 无 inputs_embeds :打字。可选[火炬。LongTensor] = 无 use_cache :打字。可选[bool] = 无 output_attentions :键入。可选[bool] = 无 output_hidden_states :键入。可选[bool] = 无 return_dict :键入。可选[bool] = 无 **deprecated_arguments transformers.modeling_outputs。BaseModelOutputWithPastAndCrossAttentions or tuple(torch.FloatTensor)

参数

  • input_ids torch.LongTensor 形状 (batch_size, input_ids_length)) — input_ids_length = sequence_length 如果 past_key_valuesNonepast_key_values[0][0].shape[2] ( sequence_length 的输入过去的键值状态)。词汇表中输入序列标记的索引。 

    如果 past_key_values仅使用,仅 input_ids 没有计算过去应该传递为 input_ids.

    获取索引 可以使用自动标记器 。请参阅 PreTrainedTokenizer.encode() 和 预训练分词器。 call () 了解详细信息。

    什么是输入 ID?

  • past_key_values Tuple[Tuple[torch.Tensor]] 长度 config.n_layers) — 包含模型计算的预先计算的隐藏状态(注意块中的键和值)(请参阅 past_key_values 输出如下)。可用于加快顺序解码。这 input_ids 其中有 他们给予这个模型的过去不应该被当作 input_ids 因为它们已经被计算出来了。每个元素 past_key_values 是一个元组(past_key,past_value):
    • past_key: [batch_size * num_heads, head_dim, kv_length]
    • past_value: [batch_size * num_heads, kv_length, head_dim]
  • attention_mask torch.FloatTensor 形状 (batch_size, sequence_length)可选 ) — 掩码以避免对填充令牌索引执行注意。在中选择的掩码值 [0, 1]
    • 1 表示 未屏蔽 的令牌,
    • 0 表示屏蔽的令牌 masked

    什么是注意力面膜?

  • head_mask torch.FloatTensor 形状 (num_heads,)(num_layers, num_heads)可选 ) — 遮罩以消除自我注意模块的选定头部。在中选择的掩码值 [0, 1]
    • 1 表示头部未 遮盖
    • 0 表示头部已 遮罩
  • inputs_embeds torch.FloatTensor 形状 (batch_size, sequence_length, hidden_size)可选 ) — (可选)而不是传递 input_ids 您可以选择直接传递嵌入式表示。这 如果您想更好地控制如何转换,则很有用 input_ids 索引到关联的向量比 模型的内部嵌入查找矩阵。如果 past_key_values使用,可以选择仅使用最后一个 inputs_embeds 必须输入(请参阅 past_key_values)。
  • use_cache bool可选 ) — 如果设置为 Truepast_key_values 返回键值状态,可用于加快解码速度(请参阅 past_key_values)。
  • output_attentions bool可选 ) — 是否返回所有注意力层的注意力张量。看 attentions 在返回下 张量以获取更多详细信息。
  • output_hidden_states bool可选 ) — 是否返回所有图层的隐藏状态。看 hidden_states 在返回的张量下 更多细节。
  • return_dict bool可选 ) — 是否返回 模型输出 而不是普通元组。

返回

transformers.modeling_outputs。BaseModelOutputWithPastAndCrossAttentions or tuple(torch.FloatTensor)

一个 transformers.modeling_outputs。BaseModelOutputWithPastAndCrossAttentions 或元组 torch.FloatTensor (如果 return_dict=False 已通过或何时 config.return_dict=False) 包括各种 元素取决于配置( BloomConfig )和输入。

  • last_hidden_state torch.FloatTensor 形状 (batch_size, sequence_length, hidden_size)) — 模型最后一层输出处的隐藏状态序列。

    如果 past_key_values 仅用于形状序列的最后一个隐藏状态 (batch_size, 1, hidden_size) 是输出。

  • past_key_values tuple(tuple(torch.FloatTensor)) 、可选 、在以下情况下返回 use_cache=True 已通过或何时 config.use_cache=True) — 元组 tuple(torch.FloatTensor) 长度 config.n_layers,每个元组有 2 个形状的张量 (batch_size, num_heads, sequence_length, embed_size_per_head)) 和可选的如果 config.is_encoder_decoder=True 2 个额外的形状张量 (batch_size, num_heads, encoder_sequence_length, embed_size_per_head).

    包含预先计算的隐藏状态(自注意块中的键和值,如果 config.is_encoder_decoder=True 在交叉注意力块中)可以使用(参见 past_key_values 输入)以加快顺序解码。

  • hidden_states tuple(torch.FloatTensor) 、可选 、在以下情况下返回 output_hidden_states=True 已通过或何时 config.output_hidden_states=True) — 元组 torch.FloatTensor (一个用于嵌入的输出,如果模型有嵌入层,+ 一个用于每层的输出)的形状 (batch_size, sequence_length, hidden_size).

    模型在每层输出处的隐藏状态加上可选的初始嵌入输出。

  • 注意 tuple(torch.FloatTensor) 、可选 、在以下情况下返回 output_attentions=True 已通过或何时 config.output_attentions=True) — 元组 torch.FloatTensor (每层一个)形状 (batch_size, num_heads, sequence_length, sequence_length).

    注意力软最大值之后的注意力权重,用于计算自我注意力中的加权平均值 头。

  • cross_attentions tuple(torch.FloatTensor) 、可选 、在以下情况下返回 output_attentions=Trueconfig.add_cross_attention=True 已通过或何时 config.output_attentions=True) — 元组 torch.FloatTensor (每层一个)形状 (batch_size, num_heads, sequence_length, sequence_length).

    解码器交叉注意力层的注意力权重,在注意力软最大值之后,用于计算 交叉注意力头部的加权平均值。

BloomModel 转发方法覆盖 __call__ 特殊方法。

尽管需要在此函数中定义前向传递的配方,但应该调用 Module 实例之后而不是这个,因为前者负责运行预处理和后处理步骤,而 后者默默地无视他们。

例:


from从变压器 导入 自动标记器,BloomModel
 
进口 火炬

 
tokenizer = AutoTokenizer.from_pretrained( “bigscience/bloom-560m” 
模型 = BloomModel.from_pretrained( “大科学/布鲁姆-560m”) 

 
输入 = 分词器( “你好,我的狗很可爱 ”,return_tensors= “pt” 
输出 = 模型(**输入)

 
last_hidden_states = outputs.last_hidden_state 

BloomTokenizerFast

变压器。 BloomTokenizerFast

< >

vocab_file = 无 merges_file = 无 tokenizer_file = 无 unk_token = ‘<unk>’bos_token = ‘<s>’eos_token = ‘</s >’pad_token = ‘<pad>’ add_prefix_space = 假 = 假 clean_up_tokenization_spaces = False**夸格斯

参数

  • vocab_file str) — 词汇文件的路径。
  • merges_file str) — 合并文件的路径。
  • 错误 str ,可选 ,默认为 "replace") — 将字节解码为 UTF-8 时要遵循的范例。看 bytes.decode 了解更多信息。
  • unk_token str ,可选 ,默认为 <|endoftext|>) — 未知令牌。不在词汇表中的标记无法转换为 ID,并设置为此 令牌代替。
  • bos_token str ,可选 ,默认为 <|endoftext|>) — 序列标记的开头。
  • eos_token str ,可选 ,默认为 <|endoftext|>) — 序列标记的结束。
  • add_prefix_space bool ,可选 ,默认为 False) — 是否向输入添加初始空格。这允许像对待任何前导词一样对待前导词 其他词。(布隆标记器通过前面的空格检测单词的开头)。
  • trim_offsets bool ,可选 ,默认为 True) — 后处理步骤是否应修剪偏移以避免包含空格。

构建一个“快速”的 Bloom 标记器(由 HuggingFace 的标记器库支持 tokenizers )。基于字节级 字节对编码。

这个分词器经过训练,可以将空格视为标记的一部分(有点像句子),所以一个单词会

无论是否在句子的开头(没有空格),编码方式都不同:


from从变压器 导入 BloomTokenizerFast

 
tokenizer = BloomTokenizerFast.from_pretrained( “bigscience/bloom” 
分词器( “你好世界”) [ “input_ids” ]
[ 59414 8876 ]

 
分词器( “你好世界”) [ “input_ids” ]
[ 86153 8876 ] 

您可以通过传递来绕过该行为 add_prefix_space=True 实例化此分词器时,但自 模型不是以这种方式预训练的,它可能会导致性能下降。

当与 is_split_into_words=True,此分词器需要实例化 add_prefix_space=True.

这个分词器继承自 PreTrainedTokenizerFast ,其中包含大多数主要方法。用户应 有关这些方法的详细信息,请参阅此超类。

BloomForCausalLM

变压器。 BloomForCausalLM

< >

配置 :BloomConfig

参数

  • config ( BloomConfig ) — 包含模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型关联的权重,只会加载 配置。查看 from_pretrained() 加载模型权重的

Bloom 模型转换器,顶部有一个语言建模头(线性层,权重与输入绑定 嵌入)。

此模型继承自 预训练模型 。检查超类文档以了解泛型方法 库实现其所有模型(例如下载或保存,调整输入嵌入的大小等)

这个模型也是一个 PyTorch torch.nn.Module 子类。 将其用作常规的 PyTorch 模块,并参考 PyTorch 文档了解与一般用法相关的所有事项 和行为。

向前

< >

input_ids :打字。可选[火炬。LongTensor] = 无 past_key_values :打字。联合[打字。元组[键入。元组[火炬。张量,火炬。Tensor], …], NoneType] = None attention_mask : typeping.可选[火炬。张量] = 无 head_mask :打字。可选[火炬。张量] = 无 inputs_embeds :打字。可选[火炬。张量] = 无 标签 :打字。可选[火炬。张量] = 无 use_cache :打字。可选[bool] = 无 output_attentions :键入。可选[bool] = 无 output_hidden_states :键入。可选[bool] = 无 return_dict :键入。可选[bool] = 无 **deprecated_arguments transformers.modeling_outputs。因果关系LMOutputWithCrossAttentions 或 tuple(torch.FloatTensor)

参数

  • input_ids torch.LongTensor 形状 (batch_size, input_ids_length)) — input_ids_length = sequence_length 如果 past_key_valuesNonepast_key_values[0][0].shape[2] ( sequence_length 的输入过去的键值状态)。词汇表中输入序列标记的索引。如果 past_key_values仅使用,仅 input_ids 没有计算过去应该传递为 input_ids.

    获取索引 可以使用自动标记器 。请参阅 PreTrainedTokenizer.encode() 和 预训练分词器。 call () 了解详细信息。

    什么是输入 ID?

  • past_key_values Tuple[Tuple[torch.Tensor]] 长度 config.n_layers) — 包含模型计算的预先计算的隐藏状态(注意块中的键和值)(请参阅 past_key_values 输出如下)。可用于加快顺序解码。这 input_ids 其中有 他们给予这个模型的过去不应该被当作 input_ids 因为它们已经被计算出来了。每个元素 past_key_values 是一个元组(past_key,past_value):
    • past_key: [batch_size * num_heads, head_dim, kv_length]
    • past_value: [batch_size * num_heads, kv_length, head_dim]
  • attention_mask torch.FloatTensor 形状 (batch_size, sequence_length)可选 ) — 掩码以避免对填充令牌索引执行注意。在中选择的掩码值 [0, 1]
    • 1 表示 未屏蔽 的令牌,
    • 0 表示屏蔽的令牌 masked

    什么是注意力面膜?

  • head_mask torch.FloatTensor 形状 (num_heads,)(num_layers, num_heads)可选 ) — 遮罩以消除自我注意模块的选定头部。在中选择的掩码值 [0, 1]
    • 1 表示头部未 遮盖
    • 0 表示头部已 遮罩
  • inputs_embeds torch.FloatTensor 形状 (batch_size, sequence_length, hidden_size)可选 ) — (可选)而不是传递 input_ids 您可以选择直接传递嵌入式表示。这 如果您想更好地控制如何转换,则很有用 input_ids 索引到关联的向量比 模型的内部嵌入查找矩阵。如果 past_key_values使用,可以选择仅使用最后一个 inputs_embeds 必须输入(请参阅 past_key_values)。
  • use_cache bool可选 ) — 如果设置为 Truepast_key_values 返回键值状态,可用于加快解码速度(请参阅 past_key_values
  • output_attentions bool可选 ) — 是否返回所有注意力层的注意力张量。看 attentions 在返回下 张量以获取更多详细信息。
  • output_hidden_states bool可选 ) — 是否返回所有图层的隐藏状态。看 hidden_states 在返回的张量下 更多细节。
  • return_dict bool可选 ) — 是否返回 模型输出 而不是普通元组。
  • 标签 torch.LongTensor 形状 (batch_size, sequence_length)可选 ) — 语言建模的标签。请注意,标签 模型内移动,即您可以设置 labels = input_ids 索引在 [-100, 0, ..., config.vocab_size] 所有标签都设置为 -100 被忽略(屏蔽),仅针对 [0, ..., config.vocab_size]

返回

transformers.modeling_outputs。因果关系LMOutputWithCrossAttentions 或 tuple(torch.FloatTensor)

一个 transformers.modeling_outputs。CausalLMOutputWithCrossAttentions 或 a tuple torch.FloatTensor (如果 return_dict=False 已通过或何时 config.return_dict=False) 包括各种 元素取决于配置( BloomConfig )和输入。

  • 损失 torch.FloatTensor 形状 (1,) 、可选 、在以下情况下返回 labels 提供) — 语言建模损失(用于下一个令牌预测)。
  • 对数 torch.FloatTensor 形状 (batch_size, sequence_length, config.vocab_size)) — 语言建模头的预测分数(SoftMax 之前每个词汇标记的分数)。
  • hidden_states tuple(torch.FloatTensor) 、可选 、在以下情况下返回 output_hidden_states=True 已通过或何时 config.output_hidden_states=True) — 元组 torch.FloatTensor (一个用于嵌入的输出,如果模型有嵌入层,+ 一个用于每层的输出)的形状 (batch_size, sequence_length, hidden_size).

    模型在每层输出处的隐藏状态加上可选的初始嵌入输出。

  • 注意 tuple(torch.FloatTensor) 、可选 、在以下情况下返回 output_attentions=True 已通过或何时 config.output_attentions=True) — 元组 torch.FloatTensor (每层一个)形状 (batch_size, num_heads, sequence_length, sequence_length).

    注意力软最大值之后的注意力权重,用于计算自我注意力中的加权平均值 头。

  • cross_attentions tuple(torch.FloatTensor) 、可选 、在以下情况下返回 output_attentions=True 已通过或何时 config.output_attentions=True) — 元组 torch.FloatTensor (每层一个)形状 (batch_size, num_heads, sequence_length, sequence_length).

    注意力softmax之后的交叉注意力权重,用于计算 交叉注意头。

  • past_key_values tuple(tuple(torch.FloatTensor)) 、可选 、在以下情况下返回 use_cache=True 已通过或何时 config.use_cache=True) — 元组 torch.FloatTensor 长度元组 config.n_layers,每个元组都包含缓存的键, 自注意层和交叉注意层的值状态(如果在编码器-解码器中使用模型) 设置。仅在以下情况下相关 config.is_decoder = True.

    包含可以使用的预先计算的隐藏状态(注意块中的键和值)(请参阅 past_key_values 输入)以加快顺序解码。

BloomForCausalLM 正向方法覆盖了 __call__ 特殊方法。

尽管需要在此函数中定义前向传递的配方,但应该调用 Module 实例之后而不是这个,因为前者负责运行预处理和后处理步骤,而 后者默默地无视他们。

例:

进口 割炬
 
变压器 导入 AutoTokenizer,BloomForCausalLM

 
tokenizer = AutoTokenizer.from_pretrained( “bigscience/bloom-560m” 
模型 = BloomForCausalLM.from_pretrained( “大科学/布鲁姆-560m”) 

 
输入 = 分词器( “你好,我的狗很可爱 ”,return_tensors= “pt” 
输出 = 模型(**输入,标签=输入[ “input_ids” ])
 
损失 = 输出。
 
logits = outputs.logits 

BloomForSequenceClassification

变压器。 BloomForSequenceClassification

< >

配置 :BloomConfig

参数

  • config ( BloomConfig ) — 包含模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型关联的权重,只会加载 配置。查看 from_pretrained() 加载模型权重的

顶部(线性层)具有序列分类头的布隆模型转换器。

BloomForSequenceClassification 使用最后一个标记来进行分类,就像其他因果模型一样 (例如 GPT-1)做。

由于它对最后一个令牌进行分类,因此需要知道最后一个令牌的位置。如果 pad_token_id在配置中定义,它会在每行中查找最后一个不是填充标记的标记。如果 不 pad_token_id 定义,它只是采用批处理的每一行中的最后一个值。由于它无法猜测 在以下情况下填充标记 inputs_embeds 被传递而不是 input_ids,它做同样的事情(取最后一个值 批次的每一行)。

此模型继承自 预训练模型 。检查超类文档以了解泛型方法 库实现其所有模型(例如下载或保存,调整输入嵌入的大小等)

这个模型也是一个 PyTorch torch.nn.Module 子类。 将其用作常规的 PyTorch 模块,并参考 PyTorch 文档了解与一般用法相关的所有事项 和行为。

向前

< >

input_ids :打字。可选[火炬。LongTensor] = 无 past_key_values :打字。联合[打字。元组[键入。元组[火炬。张量,火炬。Tensor], …], NoneType] = None attention_mask : typeping.可选[火炬。张量] = 无 head_mask :打字。可选[火炬。张量] = 无 inputs_embeds :打字。可选[火炬。张量] = 无 标签 :打字。可选[火炬。张量] = 无 use_cache :打字。可选[bool] = 无 output_attentions :键入。可选[bool] = 无 output_hidden_states :键入。可选[bool] = 无 return_dict :键入。可选[布尔值] = 无 **deprecated_arguments )→ transformers.modeling_outputs.SequenceClassifierOutputWithPasttuple(torch.FloatTensor)

参数

  • input_ids torch.LongTensor 形状 (batch_size, input_ids_length)) — input_ids_length = sequence_length 如果 past_key_valuesNonepast_key_values[0][0].shape[2] ( sequence_length 的输入过去的键值状态)。词汇表中输入序列标记的索引。如果 past_key_values仅使用,仅 input_ids 没有计算过去应该传递为 input_ids.

    获取索引 可以使用自动标记器 。请参阅 PreTrainedTokenizer.encode() 和 预训练分词器。 call () 了解详细信息。

    什么是输入 ID?

  • past_key_values Tuple[Tuple[torch.Tensor]] 长度 config.n_layers) — 包含模型计算的预先计算的隐藏状态(注意块中的键和值)(请参阅 past_key_values 输出如下)。可用于加快顺序解码。这 input_ids 其中有 他们给予这个模型的过去不应该被当作 input_ids 因为它们已经被计算出来了。每个元素 past_key_values 是一个元组(past_key,past_value):
    • past_key: [batch_size * num_heads, head_dim, kv_length]
    • past_value: [batch_size * num_heads, kv_length, head_dim]
  • attention_mask torch.FloatTensor 形状 (batch_size, sequence_length)可选 ) — 掩码以避免对填充令牌索引执行注意。在中选择的掩码值 [0, 1] 
    • 1 表示 未屏蔽 的令牌,
    • 0 表示屏蔽的令牌 masked

    什么是注意力面膜?

  • head_mask torch.FloatTensor 形状 (num_heads,)(num_layers, num_heads)可选 ) — 遮罩以消除自我注意模块的选定头部。在中选择的掩码值 [0, 1] 
    • 1 表示头部未 遮盖
    • 0 表示头部已 遮罩
  • inputs_embeds torch.FloatTensor 形状 (batch_size, sequence_length, hidden_size)可选 ) — (可选)而不是传递 input_ids 您可以选择直接传递嵌入式表示。这 如果您想更好地控制如何转换,则很有用 input_ids 索引到关联的向量比 模型的内部嵌入查找矩阵。如果 past_key_values使用,可以选择仅使用最后一个 inputs_embeds 必须输入(请参阅 past_key_values)。
  • use_cache bool可选 ) — 如果设置为 Truepast_key_values 返回键值状态,可用于加快解码速度(请参阅 past_key_values)。
  • output_attentions bool可选 ) — 是否返回所有注意力层的注意力张量。看 attentions 在返回下 张量以获取更多详细信息。
  • output_hidden_states bool可选 ) — 是否返回所有图层的隐藏状态。看 hidden_states 在返回的张量下 更多细节。
  • return_dict bool可选 ) — 是否返回 模型输出 而不是普通元组。
  • 标签 torch.LongTensor 形状 (batch_size,)可选 ) — 用于计算序列分类/回归损失的标签。索引应该在 [0, ..., config.num_labels - 1].如果 config.num_labels == 1 计算回归损失(均方损失),如果 config.num_labels > 1 计算分类损失(交叉熵)。

返回

transformers.modeling_outputs.SequenceClassifierOutputWithPasttuple(torch.FloatTensor)

一个 transformers.modeling_outputs.SequenceClassifierOutputWithPast 或元组 torch.FloatTensor (如果 return_dict=False 已通过或何时 config.return_dict=False) 包括各种 元素取决于配置( BloomConfig )和输入。

  • 损失 torch.FloatTensor 形状 (1,) 、可选 、在以下情况下返回 labels 提供) — 分类(如果config.num_labels==1,则回归)损失。
  • 对数 torch.FloatTensor 形状 (batch_size, config.num_labels)) — 分类(如果config.num_labels==1,则为回归)分数(在 SoftMax 之前)。
  • past_key_values tuple(tuple(torch.FloatTensor)) 、可选 、在以下情况下返回 use_cache=True 已通过或何时 config.use_cache=True) — 元组 tuple(torch.FloatTensor) 长度 config.n_layers,每个元组有 2 个形状的张量 (batch_size, num_heads, sequence_length, embed_size_per_head)

    包含可以使用的预先计算的隐藏状态(自注意力块中的键和值)(请参阅 past_key_values 输入)以加快顺序解码。

  • hidden_states tuple(torch.FloatTensor) 、可选 、在以下情况下返回 output_hidden_states=True 已通过或何时 config.output_hidden_states=True) — 元组 torch.FloatTensor (一个用于嵌入的输出,如果模型有嵌入层,+ 一个用于每层的输出)的形状 (batch_size, sequence_length, hidden_size).

    模型在每层输出处的隐藏状态加上可选的初始嵌入输出。

  • 注意 tuple(torch.FloatTensor) 、可选 、在以下情况下返回 output_attentions=True 已通过或何时 config.output_attentions=True) — 元组 torch.FloatTensor (每层一个)形状 (batch_size, num_heads, sequence_length, sequence_length).

    注意力软最大值之后的注意力权重,用于计算自我注意力中的加权平均值 头。

BloomForSequenceClassification 正向方法 __call__ 特殊方法。

尽管需要在此函数中定义前向传递的配方,但应该调用 Module 实例之后而不是这个,因为前者负责运行预处理和后处理步骤,而 后者默默地无视他们。

单标签分类示例:

进口 割炬
 
变压器 导入 自动标记器,BloomForSequenceClassification

tokenizer = AutoTokenizer.from_pretrained( “bigscience/bloom-560m” 
模型 = BloomForSequenceClassification.from_pretrained( “大科学/布鲁姆-560m”) 
输入 = 分词器( “你好,我的狗很可爱 ”,return_tensors= “pt” 
>>> torch.no_grad ():
 logits = model(**inputs).logits
predicted_class_id = logits.argmax().item()
# 要在 'num_labels' 类上训练模型,可以将 'num_labels=num_labels' 传递给 '.from_pretrained(...)' 
num_labels =  len (model.config.id2label)
模型 = BloomForSequenceClassification.from_pretrained( “bigscience/bloom-560m” , num_labels=num_labels)
标签 = torch.tensor([ 1 ])
损失 = 模型(**输入,标签=标签).损失 

多标签分类示例:

进口 割炬
变压器 导入 自动标记器,BloomForSequenceClassification
tokenizer = AutoTokenizer.from_pretrained( “bigscience/bloom-560m” 
模型 = BloomForSequenceClassification.from_pretrained( “bigscience/bloom-560m” , problem_type= “multi_label_classification”) 
输入 = 分词器( “你好,我的狗很可爱 ”,return_tensors= “pt” 
>>> torch.no_grad ():
 logits = model(**inputs).logits
predicted_class_ids = torch.arange 0, logits.shape[-(0, logits.shape[-1 ])[torch.sigmoid(logits).squeeze(dim= 0 ) >  0.5 ]
 # 要在“num_labels”类上训练模型,可以将“num_labels=num_labels”传递给“.from_pretrained(...)' 
num_labels =  len (model.config.id2label)
模型 = BloomForSequenceClassification.from_pretrained(
    “大科学/布鲁姆-560m” , num_labels=num_labels, problem_type= “multi_label_classification” 
标签=火炬。 总和 
 torch.nn.functional.one_hot(predicted_class_ids[ None , :].clone(), num_classes=num_labels), dim= 1 
).to(火炬。 浮点数 
损失 = 模型(**输入,标签=标签).损失

BloomForToken分类

变压器。 BloomForToken分类

< >

配置 :BloomConfig

参数

  • config ( BloomConfig ) — 包含模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型关联的权重,只会加载 配置。查看 from_pretrained() 加载模型权重的

布隆模型,顶部有一个令牌分类头(隐藏状态输出顶部的线性层),例如 命名实体识别 (NER) 任务。

此模型继承自 预训练模型 。检查超类文档以了解泛型方法 库实现其所有模型(例如下载或保存,调整输入嵌入的大小等)

这个模型也是一个 PyTorch torch.nn.Module 子类。 将其用作常规的 PyTorch 模块,并参考 PyTorch 文档了解与一般用法相关的所有事项 和行为。

向前

< >

input_ids :打字。可选[火炬。LongTensor] = 无 past_key_values :打字。联合[打字。元组[键入。元组[火炬。张量,火炬。Tensor], …], NoneType] = None attention_mask : typeping.可选[火炬。张量] = 无 head_mask :打字。可选[火炬。张量] = 无 inputs_embeds :打字。可选[火炬。张量] = 无 标签 :打字。可选[火炬。张量] = 无 use_cache :打字。可选[bool] = 无 output_attentions :键入。可选[bool] = 无 output_hidden_states :键入。可选[bool] = 无 return_dict :键入。可选[bool] = 无 **deprecated_arguments transformers.modeling_outputs。令牌分类器输出 或 tuple(torch.FloatTensor)

参数

  • input_ids torch.LongTensor 形状 (batch_size, input_ids_length)) — input_ids_length = sequence_length 如果 past_key_valuesNonepast_key_values[0][0].shape[2] ( sequence_length 的输入过去的键值状态)。词汇表中输入序列标记的索引。如果 past_key_values仅使用,仅 input_ids 没有计算过去应该传递为 input_ids.

    获取索引 可以使用自动标记器 。请参阅 PreTrainedTokenizer.encode() 和 预训练分词器。 call () 了解详细信息。

    什么是输入 ID?

  • past_key_values Tuple[Tuple[torch.Tensor]] 长度 config.n_layers) — 包含模型计算的预先计算的隐藏状态(注意块中的键和值)(请参阅 past_key_values 输出如下)。可用于加快顺序解码。这 input_ids 其中有 他们给予这个模型的过去不应该被当作 input_ids 因为它们已经被计算出来了。每个元素 past_key_values 是一个元组(past_key,past_value):
    • past_key: [batch_size * num_heads, head_dim, kv_length]
    • past_value: [batch_size * num_heads, kv_length, head_dim]
  • attention_mask torch.FloatTensor 形状 (batch_size, sequence_length)可选 ) — 掩码以避免对填充令牌索引执行注意。在中选择的掩码值 [0, 1]
    • 1 表示 未屏蔽 的令牌,
    • 0 表示屏蔽的令牌 masked

    什么是注意力面膜?

  • head_mask torch.FloatTensor 形状 (num_heads,)(num_layers, num_heads)可选 ) — 遮罩以消除自我注意模块的选定头部。在中选择的掩码值 [0, 1]
    • 1 表示头部未 遮盖
    • 0 表示头部已 遮罩
  • inputs_embeds torch.FloatTensor 形状 (batch_size, sequence_length, hidden_size)可选 ) — (可选)而不是传递 input_ids 您可以选择直接传递嵌入式表示。这 如果您想更好地控制如何转换,则很有用 input_ids 索引到关联的向量比 模型的内部嵌入查找矩阵。如果 past_key_values使用,可以选择仅使用最后一个 inputs_embeds 必须输入(请参阅 past_key_values)。
  • use_cache bool可选 ) — 如果设置为 Truepast_key_values 返回键值状态,可用于加快解码速度(请参阅 past_key_values)。
  • output_attentions bool可选 ) — 是否返回所有注意力层的注意力张量。看 attentions 在返回下 张量以获取更多详细信息。
  • output_hidden_states bool可选 ) — 是否返回所有图层的隐藏状态。看 hidden_states 在返回的张量下 更多细节。
  • return_dict bool可选 ) — 是否返回 模型输出 而不是普通元组。
  • 标签 torch.LongTensor 形状 (batch_size,)可选 ) — 用于计算序列分类/回归损失的标签。索引应该在 [0, ..., config.num_labels - 1].如果 config.num_labels == 1 计算回归损失(均方损失),如果 config.num_labels > 1 计算分类损失(交叉熵)。

返回

transformers.modeling_outputs。令牌分类器输出 或 tuple(torch.FloatTensor)

一个 transformers.modeling_outputs。令牌分类器输出 或元组 torch.FloatTensor (如果 return_dict=False 已通过或何时 config.return_dict=False) 包括各种 元素取决于配置( BloomConfig )和输入。

  • 损失 torch.FloatTensor 形状 (1,) 、可选 、在以下情况下返回 labels 提供)— 分类丢失。
  • 对数 torch.FloatTensor 形状 (batch_size, sequence_length, config.num_labels)) — 分类分数(在 SoftMax 之前)。
  • hidden_states tuple(torch.FloatTensor) 、可选 、在以下情况下返回 output_hidden_states=True 已通过或何时 config.output_hidden_states=True) — 元组 torch.FloatTensor (一个用于嵌入的输出,如果模型有嵌入层,+ 一个用于每层的输出)的形状 (batch_size, sequence_length, hidden_size).

    模型在每层输出处的隐藏状态加上可选的初始嵌入输出。

  • 注意 tuple(torch.FloatTensor) 、可选 、在以下情况下返回 output_attentions=True 已通过或何时 config.output_attentions=True) — 元组 torch.FloatTensor (每层一个)形状 (batch_size, num_heads, sequence_length, sequence_length).

    注意力软最大值之后的注意力权重,用于计算自我注意力中的加权平均值 头。

 

BloomForTokenClassification 转发方法覆盖了 __call__ 特殊方法。

尽管需要在此函数中定义前向传递的配方,但应该调用 Module 实例之后而不是这个,因为前者负责运行预处理和后处理步骤,而 后者默默地无视他们。

例:

from从变压器 导入 自动标记器,BloomForTokenClassification
 
进口 火炬

tokenizer = AutoTokenizer.from_pretrained( “bigscience/bloom-560m” 
模型 = BloomForTokenClassification.from_pretrained( “大科学/布鲁姆-560m”) 
输入 = 分词器(
    “HuggingFace是一家位于巴黎和纽约的公司 ”,add_special_tokens =False ,return_tensors= “pt” 
torch.no_grad ():
 logits = model(**inputs).logits

 
predicted_token_class_ids = logits.argmax(- 1 
 # 请注意,标记是分类的,而不是输入 
# 预测的标记类可能比单词多。 
# 多个标记类可能占同一个单词>>> 
predicted_tokens_classes = [model.config.id2label[t.item() ] for  t  in in  predicted_token_class_ids[ 0 ]]
标签 = predicted_token_class_ids
 
损失 = 模型(**输入,标签=标签).损失 

绽放问答

变压器。 绽放问答

< >

配置

参数

  • config ( BloomConfig ) — 包含模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型关联的权重,只会加载 配置。查看 from_pretrained() 加载模型权重的

BLOOM 型号变压器顶部带有跨度分类头,用于抽取式问答任务,例如 SQuAD(隐藏状态输出之上的线性层进行计算 span start logitsspan end logits)。

此模型继承自 预训练模型 。检查超类文档以了解泛型方法 库实现其所有模型(例如下载或保存,调整输入嵌入的大小等)

这个模型也是一个 PyTorch torch.nn.Module 子类。 将其用作常规的 PyTorch 模块,并参考 PyTorch 文档了解与一般用法相关的所有事项 和行为。

向前

< >

input_ids :打字。可选[火炬。LongTensor] = 无 attention_mask :打字。可选[火炬。FloatTensor] = 无 position_ids :打字。可选[火炬。LongTensor] = 无 head_mask :打字。可选[火炬。FloatTensor] = None inputs_embeds :打字。可选[火炬。FloatTensor] = None start_positions :打字。可选[火炬。LongTensor] = 无 end_positions :打字。可选[火炬。LongTensor] = 无 output_attentions :打字。可选[bool] = 无 output_hidden_states :键入。可选[bool] = 无 return_dict :键入。可选[布尔值] = 无

参数

  • input_ids torch.LongTensor 形状 (batch_size, input_ids_length)) — input_ids_length = sequence_length 如果 past_key_valuesNonepast_key_values[0][0].shape[2] ( sequence_length 的输入过去的键值状态)。词汇表中输入序列标记的索引。如果 past_key_values仅使用,仅 input_ids 没有计算过去应该传递为 input_ids.

    获取索引 可以使用自动标记器 。请参阅 PreTrainedTokenizer.encode() 和 预训练分词器。 call () 了解详细信息。

    什么是输入 ID?

  • past_key_values Tuple[Tuple[torch.Tensor]] 长度 config.n_layers) — 包含模型计算的预先计算的隐藏状态(注意块中的键和值)(请参阅 past_key_values 输出如下)。可用于加快顺序解码。这 input_ids 其中有 他们给予这个模型的过去不应该被当作 input_ids 因为它们已经被计算出来了。每个元素 past_key_values 是一个元组(past_key,past_value):
    • past_key: [batch_size * num_heads, head_dim, kv_length]
    • past_value: [batch_size * num_heads, kv_length, head_dim]
  • attention_mask torch.FloatTensor 形状 (batch_size, sequence_length)可选 ) — 掩码以避免对填充令牌索引执行注意。在中选择的掩码值 [0, 1]
    • 1 表示 未屏蔽 的令牌,
    • 0 表示屏蔽的令牌 masked

    什么是注意力面膜?

  • head_mask torch.FloatTensor 形状 (num_heads,)(num_layers, num_heads)可选 ) — 遮罩以消除自我注意模块的选定头部。在中选择的掩码值 [0, 1]
    • 1 表示头部未 遮盖
    • 0 表示头部已 遮罩
  • inputs_embeds torch.FloatTensor 形状 (batch_size, sequence_length, hidden_size)可选 ) — (可选)而不是传递 input_ids 您可以选择直接传递嵌入式表示。这 如果您想更好地控制如何转换,则很有用 input_ids 索引到关联的向量比 模型的内部嵌入查找矩阵。如果 past_key_values使用,可以选择仅使用最后一个 inputs_embeds 必须输入(请参阅 past_key_values)。
  • use_cache bool可选 ) — 如果设置为 Truepast_key_values 返回键值状态,可用于加快解码速度(请参阅 past_key_values)。
  • output_attentions bool可选 ) — 是否返回所有注意力层的注意力张量。看 attentions 在返回下 张量以获取更多详细信息。
  • output_hidden_states bool可选 ) — 是否返回所有图层的隐藏状态。看 hidden_states 在返回的张量下 更多细节。
  • return_dict bool可选 ) — 是否返回 模型输出 而不是普通元组。
  • start_positions torch.LongTensor 形状 (batch_size,)可选 ) — 标签用于标记跨度开始的位置(索引),用于计算令牌分类损失。 位置被夹紧到序列的长度( sequence_length)。序列外的位置 在计算损失时不考虑在内。
  • end_positions torch.LongTensor 形状 (batch_size,)可选 ) — 标签用于标记跨度末端的位置(索引),用于计算令牌分类损失。 位置被夹紧到序列的长度( sequence_length)。序列外的位置 在计算损失时不考虑在内。

将 BloomForQuestionAnswer 转发方法 __call__ 特殊方法。

尽管需要在此函数中定义前向传递的配方,但应该调用 Module 实例之后而不是这个,因为前者负责运行预处理和后处理步骤,而 后者默默地无视他们。

数据评估

BLOOM浏览人数已经达到461,如你需要查询该站的相关权重信息,可以点击"5118数据""爱站数据""Chinaz数据"进入;以目前的网站数据参考,建议大家请以爱站数据为准,更多网站价值评估因素如:BLOOM的访问速度、搜索引擎收录以及索引量、用户体验等;当然要评估一个站的价值,最主要还是需要根据您自身的需求以及需要,一些确切的数据则需要找BLOOM的站长进行洽谈提供。如该站的IP、PV、跳出率等!

关于BLOOM特别声明

本站ai导航提供的BLOOM都来源于网络,不保证外部链接的准确性和完整性,同时,对于该外部链接的指向,不由ai导航实际控制,在2023年6月10日 下午7:26收录时,该网页上的内容,都属于合规合法,后期网页的内容如出现违规,可以直接联系网站管理员进行删除,ai导航不承担任何责任。

相关导航

暂无评论

暂无评论...