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
动用法国超算、花费384块A100
BLOOM是一个BigScience项目,去年5月启动,由Hugging Face主导,收到了700万美元的公共捐款。共有来自全球60个国家、超过250个机构,以及超过1000名研究人员参与其中,其中包括以个人名义参加的Meta、谷歌等大厂员工。它的训练在法国超级计算机Jean Zay上进行,共花费了384块A100 GPU,其中每块有80 GB内存,训练吞吐量约150 TFLOP(该超算由低碳的核能提供动力,释放的热量还用来给学校供暖)。
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模型已通过 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_values
是None
还past_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
, 可选 ) — 如果设置为True
,past_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=True
和config.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_values
是None
还past_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
, 可选 ) — 如果设置为True
,past_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.SequenceClassifierOutputWithPast
或 tuple(torch.FloatTensor)
参数
- input_ids (
torch.LongTensor
形状(batch_size, input_ids_length)
) —input_ids_length
=sequence_length
如果past_key_values
是None
还past_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
, 可选 ) — 如果设置为True
,past_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.SequenceClassifierOutputWithPast
或 tuple(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_values
是None
还past_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
, 可选 ) — 如果设置为True
,past_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 logits
和 span 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_values
是None
还past_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
, 可选 ) — 如果设置为True
,past_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都来源于网络,不保证外部链接的准确性和完整性,同时,对于该外部链接的指向,不由别摸鱼导航实际控制,在2023年6月10日 下午7:26收录时,该网页上的内容,都属于合规合法,后期网页的内容如出现违规,可以直接联系网站管理员进行删除,别摸鱼导航不承担任何责任。