Transformers 4.37 中文文档(三十八)(2)https://developer.aliyun.com/article/1564687
GPTSanJapaneseForConditionalGeneration
class transformers.GPTSanJapaneseForConditionalGeneration
( config: GPTSanJapaneseConfig )
参数
config
(GPTSanJapaneseConfig)- 具有模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,只会加载配置。查看 from_pretrained()方法以加载模型权重。
具有语言建模头的裸 GPTSAN-japanese 模型。
GPTSAN-japanese模型是基于通用开关变压器的日语语言模型
此模型还是一个 PyTorch torch.nn.Module子类。将其用作常规的 PyTorch 模块,并参考 PyTorch 文档以获取与一般用法和行为相关的所有事项。
forward
( input_ids: Optional = None attention_mask: Optional = None token_type_ids: Optional = None spout: Optional = None past_key_values: Optional = None head_mask: Optional = None use_cache: Optional = False inputs_embeds: Optional = None decoder_inputs_embeds: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None output_router_logits: Optional = None labels: Optional = None )
参数
input_ids
(形状为(batch_size, sequence_length)
的torch.LongTensor
)- 词汇表中输入序列标记的索引。GPTSAN-japanese 是一个生成句子延续或预测掩码位置的标记的模型。输入模型所需的特殊标记会自动附加。attention_mask
(形状为(batch_size, sequence_length)
的torch.FloatTensor
,可选)- 用于避免在填充标记索引上执行注意力的掩码。掩码值选在[0, 1]
之间:
- 1 表示
未被掩码
的标记, - 0 表示
被掩码
的标记。
- 什么是注意力掩码?
token_type_ids
(形状为(batch_size, sequence_length)
的torch.FloatTensor
,可选)- 用于掩盖前缀-LM 输入中的前缀部分的输入。掩码值选在[0, 1]
之间:
- 1 表示
前缀
输入的标记, - 0 表示
非前缀
输入的标记。
spout
(形状为(batch_size, config.d_spout)
的torch.Tensor
)- 通过 8 层 FFN 转换的向量,可以用来替代past_key_values
。past_key_values
(长度为config.n_layers
的tuple(tuple(torch.FloatTensor))
,每个元组有 4 个形状为(batch_size, num_heads, sequence_length - 1, embed_size_per_head)
的张量)- 包含注意力块的预计算键和值隐藏状态。可用于加速解码。
如果使用past_key_values
,用户可以选择只输入最后一个形状为(batch_size, 1)
的decoder_input_ids
(那些没有将它们的过去键值状态提供给此模型的)而不是形状为(batch_size, sequence_length)
的所有decoder_input_ids
。head_mask
(形状为(num_heads,)
或(num_layers, num_heads)
的torch.FloatTensor
,可选)- 用于使自注意力模块的选定头部失效的掩码。掩码值选在[0, 1]
之间:use_cache
(bool
,可选)- 如果设置为True
,将返回past_key_values
键值状态,并可用于加速解码(参见past_key_values
)。inputs_embeds
(形状为(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
,可选)- 可选地,您可以选择直接传递嵌入表示,而不是传递input_ids
。如果您想要更多控制权来将input_ids
索引转换为相关向量,而不是使用模型的内部嵌入查找矩阵,这将非常有用。decoder_inputs_embeds
(形状为(batch_size, target_sequence_length, hidden_size)
的torch.FloatTensor
,可选)- 可选地,您可以选择直接传递嵌入表示,而不是传递decoder_input_ids
。如果使用past_key_values
,可以选择只输入最后一个decoder_inputs_embeds
(参见past_key_values
)。如果您想要更多控制权来将decoder_input_ids
索引转换为相关向量,而不是使用模型的内部嵌入查找矩阵,这将非常有用。output_attentions
(bool
,可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的attentions
。output_hidden_states
(bool
,可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states
。return_dict
(bool
,可选) — 是否返回一个 ModelOutput 而不是一个普通元组。router_logits
(tuple(torch.FloatTensor)
,可选,当传递output_router_logits=True
或config.add_router_probs=True
时返回) — 形状为(batch_size, sequence_length, num_experts)
的torch.FloatTensor
元组(每层一个)。解码器模型的路由器对数,用于计算混合专家模型的辅助损失。labels
(torch.LongTensor
,形状为(batch_size,)
,可选) — 用于计算序列分类损失的标签。索引应在[-100, 0, ..., config.vocab_size - 1]
中。所有设置为-100
的标签都被忽略(掩码),损失仅计算[0, ..., config.vocab_size]
中的标签
GPTSanJapaneseForConditionalGeneration 的前向方法,覆盖了 __call__
特殊方法。
虽然前向传递的步骤需要在此函数内定义,但应该在之后调用 Module
实例,而不是这个,因为前者会处理运行前后处理步骤,而后者会默默地忽略它们。
示例:
带有常规 LM 模型的文本生成
>>> from transformers import AutoModel, AutoTokenizer, trainer_utils >>> device = "cuda" >>> model = AutoModel.from_pretrained("Tanrei/GPTSAN-japanese").to(device) >>> tokenizer = AutoTokenizer.from_pretrained("Tanrei/GPTSAN-japanese") >>> x_token = tokenizer("織田信長は、", return_tensors="pt") >>> trainer_utils.set_seed(30) >>> input_ids = x_token.input_ids.to(device) >>> gen_token = model.generate(input_ids, max_new_tokens=50) >>> tokenizer.decode(gen_token[0]) "織田信長は、政治・軍事の中枢まで掌握した政治家であり、日本史上類を見ない驚異的な軍事侵攻を続け..."
带有前缀-LM 模型的文本生成
>>> from transformers import AutoModel, AutoTokenizer, trainer_utils >>> device = "cuda" >>> model = AutoModel.from_pretrained("Tanrei/GPTSAN-japanese").to(device) >>> tokenizer = AutoTokenizer.from_pretrained("Tanrei/GPTSAN-japanese") >>> x_token = tokenizer("", prefix_text="織田信長は、", return_tensors="pt") >>> trainer_utils.set_seed(30) >>> input_ids = x_token.input_ids.to(device) >>> token_type_ids = x_token.token_type_ids.to(device) >>> gen_token = model.generate(input_ids, token_type_ids=token_type_ids, max_new_tokens=50) >>> tokenizer.decode(gen_token[0]) "織田信長は、政治・外交で数々の戦果を上げるが、1568 年からは、いわゆる本能寺の変で細川晴元に暗殺される..."
同时进行文本生成和掩码语言模型
>>> from transformers import AutoModel, AutoTokenizer, trainer_utils >>> device = "cuda" >>> model = AutoModel.from_pretrained("Tanrei/GPTSAN-japanese").to(device) >>> tokenizer = AutoTokenizer.from_pretrained("Tanrei/GPTSAN-japanese") >>> masked_sentence = "武田信玄は、<|inputmask|>時代ファンならぜひ押さえ<|inputmask|>きたい名将の一人。" >>> x_token = tokenizer("", prefix_text=masked_sentence, return_tensors="pt") >>> trainer_utils.set_seed(30) >>> input_ids = x_token.input_ids.to(device) >>> token_type_ids = x_token.token_type_ids.to(device) >>> out_lm_token = model.generate(input_ids, token_type_ids=token_type_ids, max_new_tokens=50) >>> out_mlm_token = model(input_ids, token_type_ids=token_type_ids).logits.argmax(axis=-1) >>> tokenizer.decode(out_mlm_token[0]) "武田信玄は、戦国時代ファンならぜひ押さえておきたい名将の一人。" >>> tokenizer.decode(out_lm_token[0][input_ids.shape[1] :]) "武田氏の三代に渡った武田家のひとり\n 甲斐市に住む、日本史上最大の戦国大名。..."
GPT-Sw3
原始文本:
huggingface.co/docs/transformers/v4.37.2/en/model_doc/gpt-sw3
概述
GPT-Sw3 模型首次提出于 Lessons Learned from GPT-SW3: Building the First Large-Scale Generative Language Model for Swedish 由 Ariel Ekgren, Amaru Cuba Gyllensten, Evangelia Gogoulou, Alice Heiman, Severine Verlinden, Joey Öhman, Fredrik Carlsson, Magnus Sahlgren 撰写。
自第一篇论文以来,作者已经扩展了他们的工作,并在他们的新 1.2TB 语料库上训练了新模型,名为 The Nordic Pile。
GPT-Sw3 是由 AI Sweden 与 RISE 和 WASP WARA for Media and Language 合作开发的一组大型仅解码器预训练的变压器语言模型。GPT-Sw3 在包含 320B 个瑞典语、挪威语、丹麦语、冰岛语、英语和编程代码的数据集上进行了训练。该模型使用了因果语言建模(CLM)目标进行预训练,利用了 NeMo Megatron GPT 实现。
此模型由 AI Sweden Models 贡献。
使用示例
>>> from transformers import AutoTokenizer, AutoModelForCausalLM >>> tokenizer = AutoTokenizer.from_pretrained("AI-Sweden-Models/gpt-sw3-356m") >>> model = AutoModelForCausalLM.from_pretrained("AI-Sweden-Models/gpt-sw3-356m") >>> input_ids = tokenizer("Träd är fina för att", return_tensors="pt")["input_ids"] >>> generated_token_ids = model.generate(inputs=input_ids, max_new_tokens=10, do_sample=True)[0] >>> print(tokenizer.decode(generated_token_ids)) Träd är fina för att de är färgstarka. Men ibland är det fint
资源
- 文本分类任务指南
- 标记分类任务指南
- 因果语言建模任务指南
该实现使用 GPT2Model
与我们的 GPTSw3Tokenizer
结合。请参考 GPT2Model 文档 获取 API 参考和示例。
请注意,使用我们的标记器需要 sentencepiece,并可通过 pip install transformers[sentencepiece]
或 pip install sentencepiece
进行安装。
GPTSw3Tokenizer
class transformers.GPTSw3Tokenizer
( vocab_file do_lower_case = False remove_space = False keep_accents = False pad_token = None unk_token = None eos_token = None bos_token = None sp_model_kwargs: Optional = None **kwargs )
参数
vocab_file
(str
) — 包含实例化标记器所需词汇表的 SentencePiece 文件(通常具有 .spm 扩展名)。do_lower_case
(bool
, optional, 默认为False
) — 在标记化时是否将输入转换为小写。remove_space
(bool
, optional, 默认为False
) — 在标记化时是否去除文本(删除字符串前后的多余空格)。keep_accents
(bool
, optional, 默认为False
) — 在标记化时是否保留重音。pad_token
(str
, optional) — 用于填充的标记,例如在批处理不同长度的序列时使用。如果未提供,默认为 ’’ 或 ’’,取决于模型大小。unk_token
(str
, optional) — 未知标记。词汇表中不存在的标记无法转换为 ID,而是设置为此标记。如果未提供,默认为 ’‘。eos_token
(str
,可选)–在预训练过程中看到的序列结束标记。如果未提供,则默认为<|endoftext|>
bos_token
(str
,optional)–可用于下游任务的序列标记的开头,在预训练过程中没有看到。如果未提供,将默认为~~
或<|endoftext|>
,具体取决于模型大小sp_model_kwargs
(dict
, optional) — 将传递给SentencePieceProcessor.__init__()
方法的参数。SentencePiece 的 Python 封装 可以用来设置:
enable_sampling
: 启用子词规范化。nbest_size
: unigram 的抽样参数。对于 BPE-Dropout 无效。
nbest_size = {0,1}
: 不执行抽样。nbest_size > 1
: 从 nbest_size 结果中进行抽样。nbest_size < 0
: 假设 nbest_size 为无限,并使用前向过滤和后向抽样算法从所有假设(格)中进行抽样。
alpha
: unigram 抽样的平滑参数,以及 BPE-Dropout 合并操作的丢弃概率。
sp_model
(SentencePieceProcessor
) — 用于每次转换(字符串、标记和 ID)的 SentencePiece 处理器。whitespaces
(set
) — 在预处理中进行空格规范化时替换的空格。non_printing_characters_re
(Pattern
) — 编译后的正则表达式,用于在预处理中删除非打印字符。
构建一个 GPTSw3 分词器。基于 SentencePiece。
这个分词器继承自 PreTrainedTokenizer,其中包含大多数主要方法。用户应参考这个超类以获取有关这些方法的更多信息。
示例用法:
>>> from transformers import GPTSw3Tokenizer >>> tokenizer = GPTSw3Tokenizer.from_pretrained("AI-Sweden-Models/gpt-sw3-126m") >>> tokenizer("Svenska är kul!")["input_ids"] [1814, 377, 3617, 63504]
save_vocabulary
( save_directory: str filename_prefix: Optional = None )
HerBERT
原始文本:
huggingface.co/docs/transformers/v4.37.2/en/model_doc/herbert
概述
HerBERT 模型是由 Piotr Rybak、Robert Mroczkowski、Janusz Tracz 和 Ireneusz Gawlik 在波兰语理解全面基准 KLEJ中提出的。它是一个基于 BERT 的语言模型,仅使用 MLM 目标在波兰语语料库上训练,动态屏蔽整个单词。
论文摘要如下:
近年来,一系列基于 Transformer 的模型在一般自然语言理解(NLU)任务中取得了重大进展。这样快速的研究进展不可能没有一般 NLU 基准,这些基准允许对所提出的方法进行公平比较。然而,这样的基准仅适用于少数几种语言。为了缓解这个问题,我们引入了一个全面的波兰语理解多任务基准,并附带在线排行榜。它包括一系列多样的任务,从现有的命名实体识别、问答、文本蕴涵等数据集中采用。我们还为电子商务领域引入了一个新的情感分析任务,名为 Allegro Reviews(AR)。为了确保一个共同的评估方案,并促进能够泛化到不同 NLU 任务的模型,该基准包括来自不同领域和应用的数据集。此外,我们发布了 HerBERT,这是一个专门为波兰语训练的基于 Transformer 的模型,它在平均性能方面表现最佳,并在九项任务中的三项中取得最佳结果。最后,我们提供了广泛的评估,包括几个标准基线和最近提出的多语言 Transformer 模型。
这个模型是由rmroczkowski贡献的。原始代码可以在这里找到。
用法示例
>>> from transformers import HerbertTokenizer, RobertaModel >>> tokenizer = HerbertTokenizer.from_pretrained("allegro/herbert-klej-cased-tokenizer-v1") >>> model = RobertaModel.from_pretrained("allegro/herbert-klej-cased-v1") >>> encoded_input = tokenizer.encode("Kto ma lepszą sztukę, ma lepszy rząd – to jasne.", return_tensors="pt") >>> outputs = model(encoded_input) >>> # HerBERT can also be loaded using AutoTokenizer and AutoModel: >>> import torch >>> from transformers import AutoModel, AutoTokenizer >>> tokenizer = AutoTokenizer.from_pretrained("allegro/herbert-klej-cased-tokenizer-v1") >>> model = AutoModel.from_pretrained("allegro/herbert-klej-cased-v1")
Herbert 的实现与BERT
相同,除了分词方法。有关 API 参考和示例,请参考 BERT 文档。
HerbertTokenizer
class transformers.HerbertTokenizer
( vocab_file merges_file tokenizer_file = None cls_token = '<s>' unk_token = '<unk>' pad_token = '<pad>' mask_token = '<mask>' sep_token = '</s>' bos_token = '<s>' do_lowercase_and_remove_accent = False additional_special_tokens = ['<special0>', '<special1>', '<special2>', '<special3>', '<special4>', '<special5>', '<special6>', '<special7>', '<special8>', '<special9>'] lang2id = None id2lang = None **kwargs )
构建 HerBERT 的 BPE 分词器。
特点:
- 使用 BERT 的预分词器:BaseTokenizer 在空格上分割标记,也在标点上分割。每个标点字符的出现将被单独处理。
- 这种预分词输入是 BPE 子标记化的
这个分词器继承自 XLMTokenizer,其中包含大部分方法。用户应参考超类以获取有关方法的更多信息。
build_inputs_with_special_tokens
( token_ids_0: List token_ids_1: Optional = None ) → export const metadata = 'undefined';List[int]
参数
token_ids_0
(List[int]
) — 要添加特殊标记的 ID 列表。token_ids_1
(List[int]
, 可选) — 序列对的可选第二个 ID 列表。
返回
List[int]
带有适当特殊标记的 input IDs 列表。
通过连接和添加特殊标记,为序列分类任务构建模型输入的序列或序列对。XLM 序列的格式如下:
- 单个序列:
X - 序列对:
AB
convert_tokens_to_string
( tokens )
将一系列标记(字符串)转换为单个字符串。
create_token_type_ids_from_sequences
( token_ids_0: List token_ids_1: Optional = None ) → export const metadata = 'undefined';List[int]
参数
token_ids_0
(List[int]
) — ID 列表。token_ids_1
(List[int]
, 可选) — 序列对的可选第二个 ID 列表。
返回
List[int]
根据给定序列的标记类型 ID 列表。
从传递的两个序列创建一个用于序列对分类任务的掩码。一个 XLM 序列
序列对掩码具有以下格式:
0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 | first sequence | second sequence |
如果token_ids_1
为None
,则此方法仅返回掩码的第一部分(0)。
get_special_tokens_mask
( token_ids_0: List token_ids_1: Optional = None already_has_special_tokens: bool = False ) → export const metadata = 'undefined';List[int]
参数
token_ids_0
(List[int]
) — ID 列表。token_ids_1
(List[int]
, 可选) — 序列对的可选第二个 ID 列表。already_has_special_tokens
(bool
, 可选, 默认为False
) — 标记列表是否已经为模型格式化了特殊标记。
返回
List[int]
一个整数列表,范围为[0, 1]:1 表示特殊标记,0 表示序列标记。
从没有添加特殊标记的标记列表中检索序列 ID。在使用标记器的prepare_for_model
方法添加特殊标记时调用此方法。
HerbertTokenizerFast
class transformers.HerbertTokenizerFast
( vocab_file = None merges_file = None tokenizer_file = None cls_token = '<s>' unk_token = '<unk>' pad_token = '<pad>' mask_token = '<mask>' sep_token = '</s>' **kwargs )
参数
vocab_file
(str
) — 词汇文件的路径。merges_file
(str
) — 合并文件的路径。
为 HerBERT 构建一个“快速”BPE 标记器(由 HuggingFace 的tokenizers库支持)。
特殊之处:
- 使用 BERT 的预标记器:BertPreTokenizer 在空格上分割标记,也在标点上分割。每个标点字符的出现将被单独处理。
此标记器继承自 PreTrainedTokenizer,其中包含大多数方法。用户应参考超类以获取有关方法的更多信息。
build_inputs_with_special_tokens
( token_ids_0: List token_ids_1: Optional = None ) → export const metadata = 'undefined';List[int]
参数
token_ids_0
(List[int]
) — 将添加特殊标记的 ID 列表。token_ids_1
(List[int]
, 可选) — 序列对的可选第二个 ID 列表。
返回
List[int]
具有适当特殊标记的输入 ID 列表。
通过连接和添加特殊标记从序列或序列对构建用于序列分类任务的模型输入。HerBERT,如 BERT 序列具有以下格式:
- 单个序列:
X - 序列对:
AB
create_token_type_ids_from_sequences
( token_ids_0: List token_ids_1: Optional = None ) → export const metadata = 'undefined';List[int]
参数
token_ids_0
(List[int]
) — ID 列表。token_ids_1
(List[int]
, 可选) — 序列对的可选第二个 ID 列表。
返回
List[int]
根据给定序列的标记类型 ID 列表。
从传递的两个序列创建一个用于序列对分类任务的掩码。HerBERT,如
BERT 序列对掩码具有以下格式:
0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 | first sequence | second sequence |
get_special_tokens_mask
( token_ids_0: List token_ids_1: Optional = None already_has_special_tokens: bool = False ) → export const metadata = 'undefined';List[int]
参数
token_ids_0
(List[int]
) — ID 列表。token_ids_1
(List[int]
, 可选) — 序列对的可选第二个 ID 列表。already_has_special_tokens
(bool
, 可选, 默认为False
) — 标记列表是否已经为模型格式化了特殊标记。
返回
List[int]
一个整数列表,范围为[0, 1]:1 表示特殊标记,0 表示序列标记。
从没有添加特殊标记的令牌列表中检索序列标识。在使用分词器的prepare_for_model
方法添加特殊标记时调用此方法。
Transformers 4.37 中文文档(三十八)(4)https://developer.aliyun.com/article/1564694