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
實例之后而不是这个,因為前者负责運行预處理和后處理步驟,而 后者默默地無視他们。
数据评估
本站ai工具百寶箱提供的BLOOM都来源于网络,不保证外部链接的准确性和完整性,同时,对于该外部链接的指向,不由ai工具百寶箱实际控制,在2024年12月9日 上午12:11收录时,该网页上的内容,都属于合规合法,后期网页的内容如出现违规,可以直接联系网站管理员进行删除,ai工具百寶箱不承担任何责任。