并获得增强的文档体验
开始使用
分词器 (Tokenizer)
分词器负责为模型准备输入。该库包含了适用于所有模型的分词器。大多数分词器有两种版本:一种是纯 Python 实现,另一种是基于 Rust 库 🤗 Tokenizers 的“快速 (Fast)”实现。“快速”实现支持
- 显著的提速,特别是在进行批量分词时;以及
- 提供额外的映射方法,用于在原始字符串(字符和词)与分词空间之间进行转换(例如,获取给定字符对应的分词索引,或给定分词对应的字符范围)。
基类 PreTrainedTokenizer 和 PreTrainedTokenizerFast 实现了将字符串输入编码为模型输入(见下文)的通用方法,并支持从本地文件或目录,或从库提供的预训练分词器(从 HuggingFace 的 AWS S3 存储库下载)实例化/保存 Python 和“快速”分词器。它们都依赖于包含通用方法的 PreTrainedTokenizerBase。
PreTrainedTokenizer 和 PreTrainedTokenizerFast 因此实现了使用所有分词器的主要方法:
- 分词(将字符串拆分为子词 Token 字符串)、转换 Token 字符串到 ID(反之亦然),以及编码/解码(即分词并转换为整数)。
- 以独立于底层结构(BPE、SentencePiece 等)的方式向词汇表添加新 Token。
- 管理特殊 Token(如掩码、句首标识等):添加它们,将它们分配给分词器属性以便轻松访问,并确保它们在分词过程中不会被拆分。
BatchEncoding 持有 PreTrainedTokenizerBase 编码方法(__call__、encode_plus 和 batch_encode_plus)的输出,它派生自 Python 字典。当分词器是纯 Python 分词器时,此类表现得就像标准的 Python 字典,并包含这些方法计算出的各种模型输入(input_ids、attention_mask 等)。当分词器是“快速”分词器(即由 HuggingFace tokenizers 库 支持)时,该类还额外提供了几种高级对齐方法,可用于在原始字符串(字符和词)与分词空间之间进行映射(例如,获取给定字符对应的分词索引,或给定分词对应的字符范围)。
多模态分词器 (Multimodal Tokenizer)
除此之外,每个分词器都可以是“多模态”分词器,这意味着分词器将把所有相关的特殊 Token 作为分词器属性的一部分,以便于访问。例如,如果分词器是从 LLaVA 这样的视觉语言模型加载的,你将能够通过 tokenizer.image_token_id 访问并获取用作占位符的特殊图像 Token。
若要为任何类型的分词器启用额外的特殊 Token,你需要添加以下几行代码并保存分词器。额外的特殊 Token 不一定要与模态相关,可以是模型经常需要访问的任何内容。在下面的代码中,位于 output_dir 的分词器将能够直接访问另外三个特殊 Token。
vision_tokenizer = AutoTokenizer.from_pretrained(
"llava-hf/llava-1.5-7b-hf",
extra_special_tokens={"image_token": "<image>", "boi_token": "<image_start>", "eoi_token": "<image_end>"}
)
print(vision_tokenizer.image_token, vision_tokenizer.image_token_id)
("<image>", 32000)PreTrainedTokenizer
class transformers.PythonBackend
< 源代码 >( **kwargs )
参数
- model_max_length (
int, 可选) — Transformer 模型输入的最大长度(以 Token 数量计)。当通过 from_pretrained() 加载分词器时,该值将被设置为关联模型在max_model_input_sizes中存储的值(见上文)。如果未提供值,则默认为极大整数(int(1e30))。 - padding_side (
str, 可选) — 模型应在其上应用填充 (padding) 的一侧。应从 ['right', 'left'] 中选择。默认值取自同名的类属性。 - truncation_side (
str, 可选) — 模型应在其上应用截断 (truncation) 的一侧。应从 ['right', 'left'] 中选择。默认值取自同名的类属性。 - chat_template (
str, 可选) — 用于格式化聊天消息列表的 Jinja 模板字符串。请参阅 https://huggingface.co/docs/transformers/chat_templating 获取完整描述。 - model_input_names (
list[string], 可选) — 模型前向传播所接受的输入列表(如"token_type_ids"或"attention_mask")。默认值取自同名的类属性。 - bos_token (
str或tokenizers.AddedToken, 可选) — 表示句首的特殊 Token。 - eos_token (
str或tokenizers.AddedToken, 可选) — 表示句末的特殊 Token。 - unk_token (
str或tokenizers.AddedToken, 可选) — 表示词汇表外 Token 的特殊 Token。 - sep_token (
str或tokenizers.AddedToken, 可选) — 用于分隔同一输入中两个不同句子的特殊 Token(例如 BERT 所使用)。 - pad_token (
str或tokenizers.AddedToken, 可选) — 用于将 Token 数组调整为相同大小以进行批处理的特殊 Token。随后将被注意力机制或损失计算忽略。 - cls_token (
str或tokenizers.AddedToken, 可选) — 表示输入类别的特殊 Token(例如 BERT 所使用)。 - mask_token (
str或tokenizers.AddedToken, 可选) — 表示被掩码 Token 的特殊 Token(用于掩码语言建模预训练目标,如 BERT)。将与self.mask_token和self.mask_token_id关联。 - extra_special_tokens (
str或tokenizers.AddedToken的列表, 可选) — 额外的模型特定特殊 Token 列表。在此处添加它们可确保在设置skip_special_tokens=True进行解码时将其跳过。如果它们不属于词汇表,则会被添加到词汇表的末尾。 - split_special_tokens (
bool, 可选, 默认为False) — 是否在分词过程中拆分特殊 Token。传递该参数将影响分词器的内部状态。默认行为是不拆分特殊 Token。这意味着如果<s>是bos_token,则tokenizer.tokenize("<s>") = ['<s>']。否则,如果split_special_tokens=True,则tokenizer.tokenize("<s>")将产生['<', 's', '>']。
所有慢速分词器的基类。
处理所有分词和特殊 Token 的共享方法,以及下载/缓存/加载预训练分词器以及向词汇表添加 Token 的方法。
该类还以统一方式包含所有分词器之上的已添加 Token,因此我们不必处理各种底层字典结构(BPE、sentencepiece 等)特定的词汇表扩充方法。
类属性(由派生类覆盖)
- vocab_files_names (
dict[str, str]) — 一个字典,其键是模型所需的每个词汇表文件的__init__关键字名称,对应的值是保存相关文件时的文件名(字符串)。 - pretrained_vocab_files_map (
dict[str, dict[str, str]]) — 字典的字典,高层键是模型所需的每个词汇表文件的__init__关键字名称,底层键是预训练模型的short-cut-names,其值是关联的预训练词汇表文件的url。 - model_input_names (
list[str]) — 模型正向传播中预期的输入列表。 - padding_side (
str) — 模型应该应用填充的侧面的默认值。应为'right'或'left'。 - truncation_side (
str) — 模型应该应用截断的侧面的默认值。应为'right'或'left'。
__call__
< 源代码 >( text: TextInput | PreTokenizedInput | list[TextInput] | list[PreTokenizedInput] | None = None text_pair: TextInput | PreTokenizedInput | list[TextInput] | list[PreTokenizedInput] | None = None text_target: TextInput | PreTokenizedInput | list[TextInput] | list[PreTokenizedInput] | None = None text_pair_target: TextInput | PreTokenizedInput | list[TextInput] | list[PreTokenizedInput] | None = None add_special_tokens: bool = True padding: bool | str | PaddingStrategy = False truncation: bool | str | TruncationStrategy | None = None max_length: int | None = None stride: int = 0 is_split_into_words: bool = False pad_to_multiple_of: int | None = None padding_side: str | None = None return_tensors: str | TensorType | None = None return_token_type_ids: bool | None = None return_attention_mask: bool | None = None return_overflowing_tokens: bool = False return_special_tokens_mask: bool = False return_offsets_mapping: bool = False return_length: bool = False verbose: bool = True tokenizer_kwargs: dict[str, Any] | None = None **kwargs ) → BatchEncoding
参数
- text (
str,list[str],list[list[str]], 可选) — 要编码的序列或序列批次。每个序列可以是一个字符串或字符串列表(预分词字符串)。如果序列以字符串列表(预分词)的形式提供,则必须将is_split_into_words=True设置为真(以消除与序列批次的歧义)。 - text_pair (
str,list[str],list[list[str]], 可选) — 要编码的序列或序列批次。每个序列可以是一个字符串或字符串列表(预分词字符串)。如果序列以字符串列表(预分词)的形式提供,则必须将is_split_into_words=True设置为真(以消除与序列批次的歧义)。 - text_target (
str,list[str],list[list[str]], 可选) — 要编码为目标文本的序列或序列批次。每个序列可以是一个字符串或字符串列表(预分词字符串)。如果序列以字符串列表(预分词)的形式提供,则必须将is_split_into_words=True设置为真(以消除与序列批次的歧义)。 - text_pair_target (
str,list[str],list[list[str]], 可选) — 要编码为目标文本的序列或序列批次。每个序列可以是一个字符串或字符串列表(预分词字符串)。如果序列以字符串列表(预分词)的形式提供,则必须将is_split_into_words=True设置为真(以消除与序列批次的歧义)。 - tokenizer_kwargs (
dict[str, Any], 可选) — 传递给分词器的附加关键字参数。这些参数将与显式参数和其他关键字参数合并,显式参数具有更高的优先级。 - add_special_tokens (
bool, 可选, 默认为True) — 在编码序列时是否添加特殊标记。这将使用底层的PretrainedTokenizerBase.build_inputs_with_special_tokens函数,该函数定义了自动添加到输入ID中的标记。如果你想自动添加bos或eos标记,这很有用。 - padding (
bool,str或 PaddingStrategy, 可选, 默认为False) — 激活并控制填充。接受以下值:True或'longest':填充到批次中最长的序列(如果仅提供单个序列,则不填充)。'max_length':填充到由参数max_length指定的最大长度,如果未提供该参数,则填充到模型可接受的最大输入长度。False或'do_not_pad'(默认):不填充(即,可以输出具有不同序列长度的批次)。
- truncation (
bool,str或 TruncationStrategy, 可选, 默认为False) — 激活并控制截断。接受以下值:True或'longest_first':截断至由参数max_length指定的最大长度,或如果未提供该参数,则截断至模型可接受的最大输入长度。这将逐个标记地进行截断,如果提供了序列对(或批次对),则从最长的序列中移除标记。'only_first':截断至由参数max_length指定的最大长度,或如果未提供该参数,则截断至模型可接受的最大输入长度。如果提供了序列对(或批次对),则仅截断第一个序列。'only_second':截断至由参数max_length指定的最大长度,或如果未提供该参数,则截断至模型可接受的最大输入长度。如果提供了序列对(或批次对),则仅截断第二个序列。False或'do_not_truncate'(默认):不截断(即,可以输出序列长度超过模型允许的最大输入大小的批次)。
- max_length (
int, 可选) — 控制截断/填充参数所使用的最大长度。如果未设置或设置为
None,当某个截断/填充参数需要最大长度时,将使用预定义的模型最大长度。如果模型没有特定的最大输入长度(如 XLNet),则将停用截断/填充至最大长度的功能。 - stride (
int, 可选, 默认为 0) — 如果与max_length一起设置为一个数字,那么当return_overflowing_tokens=True时返回的溢出标记将包含截断序列末尾的一些标记,以提供截断序列和溢出序列之间的一些重叠。此参数的值定义了重叠标记的数量。 - is_split_into_words (
bool, 可选, 默认为False) — 输入是否已经过预分词(例如,拆分为单词)。如果设置为True,分词器将假设输入已经拆分为单词(例如,通过在空格处拆分),并将对其进行分词。这对于命名实体识别 (NER) 或标记分类很有用。 - pad_to_multiple_of (
int, 可选) — 如果设置,将填充序列到提供值的倍数。要求padding已激活。这对于在具有计算能力>= 7.5(Volta) 的 NVIDIA 硬件上使用 Tensor Cores 特别有用。 - padding_side (
str, 可选) — 模型应在其上应用填充的一侧。应在 [‘right’, ‘left’] 之间选择。默认值取自同名的类属性。 - return_tensors (
str或 TensorType, 可选) — 如果设置,将返回张量而不是 Python 整数列表。可接受的值为:'pt':返回 PyTorchtorch.Tensor对象。'np':返回 Numpynp.ndarray对象。
- return_token_type_ids (
bool, 可选) — 是否返回标记类型 ID。如果保持默认,将根据特定分词器的默认设置(由return_outputs属性定义)返回标记类型 ID。 - return_attention_mask (
bool, 可选) — 是否返回注意力掩码。如果保持默认,将根据特定分词器的默认设置(由return_outputs属性定义)返回注意力掩码。 - return_overflowing_tokens (
bool, 可选, 默认为False) — 是否返回溢出的标记序列。如果提供了输入ID的序列对(或批次对),并设置了truncation_strategy = longest_first或True,则会引发错误,而不是返回溢出标记。 - return_special_tokens_mask (
bool, 可选, 默认为False) — 是否返回特殊标记掩码信息。 - return_offsets_mapping (
bool, 可选, 默认为False) — 是否为每个标记返回(char_start, char_end)。这仅在继承自 PreTrainedTokenizerFast 的快速分词器上可用。如果使用 Python 的分词器,此方法将引发
NotImplementedError。 - return_length (
bool, 可选, 默认为False) — 是否返回编码后输入的长度。 - verbose (
bool, 可选, 默认为True) — 是否打印更多信息和警告。 - **kwargs — 传递给
self.tokenize()方法
具有以下字段的 BatchEncoding
-
input_ids — 要输入到模型中的标记 ID 列表。
-
token_type_ids — 要输入到模型中的标记类型 ID 列表(当
return_token_type_ids=True或如果 *“token_type_ids”* 在self.model_input_names中时)。 -
attention_mask — 指定模型应关注哪些标记的索引列表(当
return_attention_mask=True或如果 *“attention_mask”* 在self.model_input_names中时)。 -
overflowing_tokens — 溢出标记序列列表(当指定
max_length且return_overflowing_tokens=True时)。 -
num_truncated_tokens — 截断标记的数量(当指定
max_length且return_overflowing_tokens=True时)。 -
special_tokens_mask — 0 和 1 的列表,其中 1 表示添加的特殊标记,0 表示常规序列标记(当
add_special_tokens=True且return_special_tokens_mask=True时)。 -
length — 输入的长度(当
return_length=True时)
将一个或多个序列或一对或多对序列标记化并准备用于模型的主要方法。
add_tokens
< 源代码 >( new_tokens: str | AddedToken | Sequence[str | AddedToken] special_tokens: bool = False ) → int
参数
- new_tokens (
str,tokenizers.AddedToken或 str 或tokenizers.AddedToken的序列) — 仅当标记尚未在词汇表中时才添加。tokenizers.AddedToken包装一个字符串标记以允许个性化其行为:该标记是否应该仅与单个单词匹配,该标记是否应该剥离左侧的所有潜在空格,该标记是否应该剥离右侧的所有潜在空格等等。 - special_tokens (
bool, 可选, 默认为False) — 指定该标记是否为特殊标记。这主要改变了归一化行为,有关详细信息,请参阅 HuggingFace 分词器库中tokenizers.AddedToken的说明。
返回
int
添加到词汇表中的标记数量。
#TODO 将此从此处删除!PreTrainedTokenizerBase 应该与 AddedToken 无关。
添加一组新标记。如果新标记不在词汇表中,它们将被添加到末尾。因此,添加的标记和来自分词算法词汇表的标记处理方式不同。
示例
# Let's see how to increase the vocabulary of Bert model and tokenizer
tokenizer = BertTokenizerFast.from_pretrained("google-bert/bert-base-uncased")
model = BertModel.from_pretrained("google-bert/bert-base-uncased")
num_added_toks = tokenizer.add_tokens(["new_tok1", "my_new-tok2"])
print("We have added", num_added_toks, "tokens")
# Notice: resize_token_embeddings expect to receive the full size of the new vocabulary, i.e., the length of the tokenizer.
model.resize_token_embeddings(len(tokenizer))add_special_tokens
< 源代码 >( special_tokens_dict: dict[str, str | AddedToken | Sequence[str | AddedToken]] replace_extra_special_tokens = True ) → int
参数
- special_tokens_dict (字典,映射 str 到 str、
tokenizers.AddedToken或Sequence[Union[str, AddedToken]]) — 键应包含在预定义的特殊属性列表中:[bos_token,eos_token,unk_token,sep_token,pad_token,cls_token,mask_token,extra_special_tokens]。仅当标记尚未存在于词汇表中时才会添加(通过检查分词器是否为其分配了
unk_token的索引进行测试)。 - replace_extra_special_tokens (
bool, 可选, 默认为True) — 如果为True,现有的额外特殊标记列表将被special_tokens_dict中提供的列表替换。否则,extra_special_tokens将被扩展。在前一种情况下,这些标记并不会从分词器的完整词汇表中移除——它们只是被标记为非特殊标记。请记住,这只会影响解码时跳过哪些标记,而不会影响added_tokens_encoder和added_tokens_decoder。这意味着之前的extra_special_tokens仍然是已添加的标记,并且不会被模型拆分。
返回
int
添加到词汇表中的标记数量。
将特殊标记字典(eos、pad、cls 等)添加到编码器并将其链接到类属性。如果特殊标记不在词汇表中,它们将被添加到其中(索引从当前词汇表的最后一个索引开始)。
在向词汇表添加新标记时,您应该确保同时调整模型的标记嵌入矩阵,以便其嵌入矩阵与分词器匹配。
为此,请使用 resize_token_embeddings() 方法。
使用 add_special_tokens 将确保您的特殊标记可以通过多种方式使用
- 在使用
skip_special_tokens = True进行解码时,可以跳过特殊标记。 - 特殊标记由分词器进行仔细处理(它们永远不会被拆分),类似于
AddedTokens。 - 您可以轻松地使用分词器类属性(如
tokenizer.cls_token)来引用特殊标记。这使得开发与模型无关的训练和微调脚本变得容易。
在可能的情况下,预训练模型通常已经注册了特殊标记(例如 BertTokenizer 的 cls_token 已注册为 '[CLS]',而 XLM 的对应标记已注册为 '</s>')。
示例
# Let's see how to add a new classification token to GPT-2
tokenizer = GPT2Tokenizer.from_pretrained("openai-community/gpt2")
model = GPT2Model.from_pretrained("openai-community/gpt2")
special_tokens_dict = {"cls_token": "<CLS>"}
num_added_toks = tokenizer.add_special_tokens(special_tokens_dict)
print("We have added", num_added_toks, "tokens")
# Notice: resize_token_embeddings expect to receive the full size of the new vocabulary, i.e., the length of the tokenizer.
model.resize_token_embeddings(len(tokenizer))
assert tokenizer.cls_token == "<CLS>"apply_chat_template
< 源代码 >( conversation: list[dict[str, str]] | list[list[dict[str, str]]] tools: list[dict | Callable] | None = None documents: list[dict[str, str]] | None = None chat_template: str | None = None add_generation_prompt: bool = False continue_final_message: bool | str = False tokenize: bool = True padding: bool | str | PaddingStrategy = False truncation: bool = False max_length: int | None = None return_tensors: str | TensorType | None = None return_dict: bool = True return_assistant_tokens_mask: bool = False tokenizer_kwargs: dict[str, Any] | None = None **kwargs ) → Union[list[int], Dict]
参数
- conversation (Union[list[dict[str, str]], list[list[dict[str, str]]]]) — 包含“role”(角色)和“content”(内容)键的字典列表,表示迄今为止的对话历史。
- tools (
list[Union[Dict, Callable]], 可选) — 模型可访问的工具(可调用函数)列表。如果模板不支持函数调用,此参数将无效。每个工具都应作为 JSON 架构传递,提供工具的名称、描述和参数类型。有关更多信息,请参阅我们的 工具使用指南。 - documents (
list[dict[str, str]], 可选) — 表示如果模型执行 RAG(检索增强生成)时可访问的文档字典列表。如果模板不支持 RAG,此参数将无效。我们建议每个文档应为一个包含“title”(标题)和“text”(文本)键的字典。 - chat_template (
str, 可选) — 用于此转换的 Jinja 模板。通常不需要为此参数传递任何内容,因为默认情况下将使用模型的模板。 - add_generation_prompt (bool, 可选) — 如果设置此项,指示助手消息开始的标记将被追加到格式化的输出中。当您想要从模型生成响应时,这非常有用。请注意,此参数将被传递给聊天模板,因此必须在模板中支持该参数,它才能生效。
- continue_final_message (bool 或 str, 可选) — 如果设置此项,对话将以这种方式格式化:对话中的最后一条消息是开放式的,没有任何 EOS 标记。模型将继续此消息,而不是开始一条新消息。这允许您为模型“预填充”部分响应。如果传递了字符串,它将被用作要继续的字段的键(例如“reasoning_content”)。不能与
add_generation_prompt同时使用。 - tokenize (
bool, 默认为True) — 是否对输出进行分词。如果为False,输出将是一个字符串。 - padding (
bool,str或 PaddingStrategy, 可选, 默认为False) — 选择一种策略来填充返回的序列(根据模型的填充侧和填充索引),选项包括:True或'longest':填充到批次中最长的序列(如果仅提供单个序列,则不填充)。'max_length':填充到参数max_length指定的最大长度,如果未提供该参数,则填充到模型可接受的最大输入长度。False或'do_not_pad'(默认):不填充(即,可以输出不同长度序列的批次)。
- truncation (
bool, 默认为False) — 是否在最大长度处截断序列。如果 tokenize 为False,则无效。 - max_length (
int, 可选) — 用于填充或截断的最大长度(以标记为单位)。如果 tokenize 为False,则无效。如果未指定,将默认使用分词器的max_length属性。 - return_tensors (
str或 TensorType, 可选) — 如果设置,将返回特定框架的张量。如果 tokenize 为False,则无效。可接受的值为:'pt':返回 PyTorchtorch.Tensor对象。'np':返回 NumPynp.ndarray对象。
- return_dict (
bool, 默认为True) — 是否返回带有命名输出的字典。如果 tokenize 为False,则无效。 - tokenizer_kwargs (
dict[str -- Any], 可选):传递给分词器的附加关键字参数(kwargs)。 - return_assistant_tokens_mask (
bool, 默认为False) — 是否返回助手生成的标记掩码。对于助手生成的标记,掩码将包含 1。对于用户和系统标记,掩码将包含 0。此功能仅适用于通过{% generation %}关键字支持它的聊天模板。 - ***kwargs — 传递给模板渲染器的附加关键字参数。聊天模板将可以访问这些参数。
返回
Union[list[int], Dict]
表示迄今为止分词后对话的标记 ID 列表,包括控制标记。此输出已准备好直接传递给模型,或通过 generate() 等方法传递。如果设置了 return_dict,将返回分词器输出的字典。
将包含 "role" 和 "content" 键的字典列表转换为标记 ID 列表。此方法旨在与聊天模型一起使用,并将读取分词器的 chat_template 属性,以确定转换时要使用的格式和控制标记。
batch_decode
< 源代码 >( sequences: list[int] | list[list[int]] | np.ndarray | torch.Tensor skip_special_tokens: bool = False clean_up_tokenization_spaces: bool | None = None **kwargs ) → list[str]
参数
- sequences (
Union[list[int], list[list[int]], np.ndarray, torch.Tensor]) — 分词后的输入 ID 列表。可以使用__call__方法获得。 - skip_special_tokens (
bool, 可选, 默认为False) — 是否在解码时移除特殊标记。 - clean_up_tokenization_spaces (
bool, 可选) — 是否清理分词产生的空格。如果设为None,将默认使用self.clean_up_tokenization_spaces。 - kwargs (附加关键字参数, 可选) — 将传递给底层模型特定的解码方法。
返回
list[str]
解码后的句子列表。
通过调用 decode 将标记 ID 列表的列表转换为字符串列表。
此方法仅用于向后兼容。decode 方法现在支持批处理输入,因此您可以直接使用 decode 而不是 batch_decode。
decode
< 源代码 >( token_ids: int | list[int] | list[list[int]] | np.ndarray | torch.Tensor skip_special_tokens: bool = False **kwargs ) → Union[str, list[str]]
使用分词器和词汇表将 ID 序列转换为字符串,或将序列列表转换为字符串列表,并提供移除特殊标记和清理分词空格的选项。
类似于执行 self.convert_tokens_to_string(self.convert_ids_to_tokens(token_ids))。
编码
< 源代码 >( text: TextInput | PreTokenizedInput | EncodedInput text_pair: TextInput | PreTokenizedInput | EncodedInput | None = None add_special_tokens: bool = True padding: bool | str | PaddingStrategy = False truncation: bool | str | TruncationStrategy | None = None max_length: int | None = None stride: int = 0 padding_side: str | None = None return_tensors: str | TensorType | None = None **kwargs ) → list[int], torch.Tensor, 或 np.ndarray
参数
- text (
str,list[str]或list[int]) — 要编码的第一个序列。可以是字符串、字符串列表(使用tokenize方法进行分词)或整数列表(使用convert_tokens_to_ids方法进行转换)。 - text_pair (
str,list[str]或list[int], 可选) — 要编码的第二个可选序列。可以是字符串、字符串列表(使用tokenize方法进行分词)或整数列表(使用convert_tokens_to_ids方法进行转换)。 - add_special_tokens (
bool, 可选, 默认为True) — 在编码序列时是否添加特殊 token。这将使用底层PretrainedTokenizerBase.build_inputs_with_special_tokens函数,该函数定义了哪些 token 会被自动添加到输入 ID 中。如果你想自动添加bos或eostoken,此参数非常有用。 - padding (
bool,str或 PaddingStrategy, 可选, 默认为False) — 激活并控制填充。接受以下值:True或'longest':填充到批次中最长的序列(如果仅提供单个序列,则不进行填充)。'max_length':填充到max_length参数指定的最大长度,如果未提供该参数,则填充到模型可接受的最大输入长度。False或'do_not_pad'(默认):不进行填充(即可以输出包含长度不同序列的批次)。
- truncation (
bool,str或 TruncationStrategy, 可选, 默认为False) — 激活并控制截断。接受以下值:True或'longest_first':截断到max_length参数指定的最大长度,如果未提供该参数,则截断到模型可接受的最大输入长度。这将逐个 token 进行截断;如果提供了序列对(或批次对),则会从最长的序列中移除一个 token。'only_first':截断到max_length参数指定的最大长度,如果未提供该参数,则截断到模型可接受的最大输入长度。如果提供了序列对(或批次对),则只会截断第一个序列。'only_second':截断到max_length参数指定的最大长度,如果未提供该参数,则截断到模型可接受的最大输入长度。如果提供了序列对(或批次对),则只会截断第二个序列。False或'do_not_truncate'(默认):不进行截断(即可以输出超过模型最大允许输入长度的序列批次)。
- max_length (
int, 可选) — 控制截断/填充参数所使用的最大长度。如果留空或设置为
None,则在截断/填充参数需要最大长度时,将使用预定义的模型最大长度。如果模型没有特定的最大输入长度(如 XLNet),则截断/填充到最大长度的功能将被禁用。 - stride (
int, 可选, 默认为 0) — 如果与max_length一起设置一个数字,当return_overflowing_tokens=True时,返回的溢出 token 将包含被截断序列末尾的一些 token,以便在截断序列和溢出序列之间提供重叠。此参数的值定义了重叠 token 的数量。 - is_split_into_words (
bool, 可选, 默认为False) — 输入是否已预先分词(例如,已拆分为单词)。如果设为True,分词器将假定输入已拆分为单词(例如,通过空白字符拆分),并在此基础上进行分词。这对于 NER(命名实体识别)或 token 分类非常有用。 - pad_to_multiple_of (
int, 可选) — 如果设置,会将序列填充为提供值的倍数。要求激活padding。这对于在计算能力>= 7.5(Volta)的 NVIDIA 硬件上使用 Tensor Cores 特别有用。 - padding_side (
str, 可选) — 模型应用填充的一侧。应在 [‘right’, ‘left’] 之间选择。默认值取自同名的类属性。 - return_tensors (
str或 TensorType, 可选) — 如果设置,将返回 tensor 而不是 Python 整数列表。可接受的值为:'pt':返回 PyTorchtorch.Tensor对象。'np':返回 Numpynp.ndarray对象。
- **kwargs — 传递给
.tokenize()方法。
返回
list[int], torch.Tensor, 或 np.ndarray
文本的 tokenized ID。
使用分词器和词汇表将字符串转换为 ID 序列(整数)。
与执行 self.convert_tokens_to_ids(self.tokenize(text)) 相同。
push_to_hub
< 源代码 >( repo_id: str commit_message: str | None = None commit_description: str | None = None private: bool | None = None token: bool | str | None = None revision: str | None = None create_pr: bool = False max_shard_size: int | str | None = '50GB' tags: list[str] | None = None )
参数
- repo_id (
str) — 你想要将分词器推送到其中的仓库名称。推送到指定组织时,应包含组织名称。 - commit_message (
str, 可选) — 推送时的提交信息。默认为"Upload tokenizer"。 - commit_description (
str, 可选) — 将要创建的提交的描述信息。 - private (
bool, 可选) — 是否将仓库设为私有。如果为None(默认),则仓库将公开,除非组织的默认设置是私有。如果仓库已存在,此值将被忽略。 - token (
bool或str, 可选) — 用于远程文件 HTTP 持有者授权(Bearer Authorization)的 token。如果为True(默认),将使用运行hf auth login时生成的 token(存储在~/.huggingface中)。 - revision (
str, 可选) — 将上传文件推送到其中的分支。 - create_pr (
bool, 可选, 默认为False) — 是否创建一个包含上传文件的 PR,还是直接提交。 - max_shard_size (
int或str, 可选, 默认为"50GB") — 仅适用于模型。在进行分片(sharding)之前检查点的最大大小。检查点分片的大小将均小于此尺寸。如果以字符串形式表示,则需要是数字后跟一个单位(例如"5MB")。 - tags (
list[str], 可选) — 要推送到 Hub 的标签列表。
将分词器文件上传到 🤗 Model Hub。
示例
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("google-bert/bert-base-cased")
# Push the tokenizer to your namespace with the name "my-finetuned-bert".
tokenizer.push_to_hub("my-finetuned-bert")
# Push the tokenizer to an organization with the name "my-finetuned-bert".
tokenizer.push_to_hub("huggingface/my-finetuned-bert")build_inputs_with_special_tokens
< 源码 >( token_ids_0: list token_ids_1: list[int] | None = None ) → list[int]
通过添加特殊标记,从一个或一对序列构建模型输入。
此方法根据分词器的 special_tokens_pattern 动态构建输入
"none": 无特殊标记"cls_sep": [CLS] seq0 [SEP] 或 [CLS] seq0 [SEP] seq1 [SEP]"eos": seq0 [EOS] 或 seq0 [EOS] seq1 [EOS]"bos": [BOS] seq0 或 [BOS] seq0 [BOS] seq1"bos_eos": [BOS] seq0 [EOS] 或 [BOS] seq0 [EOS] seq1 [EOS]"cls_double_sep": [CLS] seq0 [SEP] 或 [CLS] seq0 [SEP][SEP] seq1 [SEP]"prefix_suffix":<prefix_tokens> seq0 [seq1] <suffix_tokens>(分词器上存储的自定义前缀/后缀)
create_token_type_ids_from_sequences
< 源码 >( token_ids_0: list token_ids_1: list[int] | None = None ) → list[int]
为用于序列对分类任务的两个序列创建一个掩码。
此方法根据分词器的配置属性动态构建 token 类型 ID
token_type_ids_pattern: 要使用的模式 ("all_zeros" 或 "bert_style")token_type_ids_include_special_tokens: 在长度计算中是否计入特殊标记
示例
# All zeros pattern (default, used by RoBERTa, BART, etc.)
tokenizer.token_type_ids_pattern = "all_zeros"
# Returns: [0, 0, 0, ...] for both sequences
# BERT-style pattern (first sequence gets 0s, second gets 1s)
tokenizer.token_type_ids_pattern = "bert_style"
# Returns: [0, 0, 0, ..., 1, 1, 1, ...] for sequence pairs返回词表中已添加的标记,以“标记到索引”的字典形式。结果可能与快速(fast)调用不同,因为目前我们总是添加这些标记,即使它们已经在词表中。这是我们应该改变的地方。
get_special_tokens_mask
< 源码 >( token_ids_0: list token_ids_1: list | None = None already_has_special_tokens: bool = False ) → A list of integers in the range [0, 1]
从未添加特殊令牌的令牌列表中检索序列 ID。使用分词器 prepare_for_model 或 encode_plus 方法添加特殊令牌时会调用此方法。
此方法根据分词器的 special_tokens_pattern 动态构建特殊标记掩码
"none": 无特殊标记 (默认,返回所有 0)"cls_sep": [CLS] seq0 [SEP] 或 [CLS] seq0 [SEP] seq1 [SEP]"eos": seq0 [EOS] 或 seq0 [EOS] seq1 [EOS]"bos": [BOS] seq0 或 [BOS] seq0 [BOS] seq1"bos_eos": [BOS] seq0 [EOS] 或 [BOS] seq0 [EOS] seq1 [EOS]"cls_double_sep": [CLS] seq0 [SEP] 或 [CLS] seq0 [SEP][SEP] seq1 [SEP]"prefix_suffix":<prefix_tokens> seq0 [seq1] <suffix_tokens>
num_special_tokens_to_add
< 源码 >( pair: bool = False ) → int
返回使用特殊标记编码序列时添加的标记数量。
此方法对一个虚拟输入进行编码,并检查添加的标记数量,因此效率不高。请勿将其放入您的训练循环中。
prepare_for_model
< 源码 >( ids: list pair_ids: list[int] | None = None add_special_tokens: bool = True padding: bool | str | transformers.utils.generic.PaddingStrategy = False truncation: bool | str | transformers.tokenization_utils_base.TruncationStrategy = False max_length: int | None = None stride: int = 0 pad_to_multiple_of: int | None = None padding_side: str | None = None return_tensors: str | transformers.utils.generic.TensorType | None = None return_token_type_ids: bool | None = None return_attention_mask: bool | None = None return_overflowing_tokens: bool = False return_special_tokens_mask: bool = False return_length: bool = False verbose: bool = True prepend_batch_axis: bool = False **kwargs )
为模型准备输入 ID 序列。包括添加特殊标记、截断和填充。
prepare_for_tokenization
< 源码 >( text: str is_split_into_words: bool = False **kwargs ) → tuple[str, dict[str, Any]]
在分词前执行任何必要的转换。
此方法应从 kwargs 中弹出参数,并返回剩余的 kwargs。我们在编码过程结束时测试 kwargs,以确保所有参数都已使用。
save_vocabulary
< 源码 >( save_directory: str filename_prefix: str | None = None ) → tuple[str, ...]
常见词汇表保存模式的默认实现。将 self.encoder/self.vocab 保存为 JSON,可选地包含 self.bpe_ranks 作为合并。如果没有词汇表,则返回空元组。
如果您的分词器需要自定义保存逻辑 (例如,SentencePiece 模型、多个词汇表文件或特殊文件格式),请重写此方法。
tokenize
< 源码 >( text: str **kwargs )
使用分词器将字符串转换为标记序列。
truncate_sequences
< 源码 >( ids: list pair_ids: list[int] | None = None num_tokens_to_remove: int = 0 truncation_strategy: str | transformers.tokenization_utils_base.TruncationStrategy = 'longest_first' stride: int = 0 )
根据指定的策略截断序列。
PreTrainedTokenizerFast
PreTrainedTokenizerFast 依赖于 tokenizers 库。从 🤗 tokenizers 库中获得的 tokenizer 可以非常简单地加载到 🤗 transformers 中。请查看 使用来自 🤗 tokenizers 的分词器 页面以了解具体操作方法。
class transformers.TokenizersBackend
< 源码 >( *args **kwargs )
参数
- model_max_length (
int, 可选) — Transformer 模型输入的序列最大长度(以 token 数量计)。当使用 from_pretrained() 加载 tokenizer 时,此值将被设置为与模型关联的max_model_input_sizes中存储的值(见上文)。如果未提供值,则默认为极大的整数 (int(1e30))。 - padding_side (
str, 可选) — 模型应应用填充(padding)的一侧。应在 ['right', 'left'] 之间选择。默认值取自同名的类属性。 - truncation_side (
str, 可选) — 模型应应用截断(truncation)的一侧。应在 ['right', 'left'] 之间选择。默认值取自同名的类属性。 - chat_template (
str, 可选) — 用于格式化聊天消息列表的 Jinja 模板字符串。有关完整描述,请参阅 https://huggingface.co/docs/transformers/chat_templating。 - model_input_names (
list[string], 可选) — 模型前向传递(forward pass)所接受的输入列表(如"token_type_ids"或"attention_mask")。默认值取自同名的类属性。 - bos_token (
str或tokenizers.AddedToken, 可选) — 表示句子开头的特殊 token。 - eos_token (
str或tokenizers.AddedToken, 可选) — 表示句子结尾的特殊 token。 - unk_token (
str或tokenizers.AddedToken, 可选) — 表示词汇表外(out-of-vocabulary)token 的特殊 token。 - sep_token (
str或tokenizers.AddedToken, 可选) — 在同一输入中分隔两个不同句子的特殊 token(例如 BERT 使用的)。 - pad_token (
str或tokenizers.AddedToken, 可选) — 用于使 token 数组大小一致以进行批处理(batching)的特殊 token。随后将被注意力机制或损失计算所忽略。 - cls_token (
str或tokenizers.AddedToken, 可选) — 表示输入类别的特殊 token(例如 BERT 使用的)。 - mask_token (
str或tokenizers.AddedToken, 可选) — 表示被掩码(masked)token 的特殊 token(用于掩码语言建模预训练目标,如 BERT)。将与self.mask_token和self.mask_token_id相关联。 - extra_special_tokens (
str或tokenizers.AddedToken的列表, 可选) — 额外的模型特定特殊 token 列表。在此添加它们以确保在设置skip_special_tokens=True进行解码时它们会被跳过。如果它们不在词汇表中,它们将被添加到词汇表的末尾。 - split_special_tokens (
bool, 可选, 默认为False) — 在分词过程中是否应拆分特殊 token。传入此参数将影响 tokenizer 的内部状态。默认行为是不拆分特殊 token。这意味着如果<s>是bos_token,则tokenizer.tokenize("<s>") = ['<s>']。反之,如果split_special_tokens=True,则tokenizer.tokenize("<s>")将得到['<', 's', '>']。 - tokenizer_object (
tokenizers.Tokenizer) — 一个用于实例化的 🤗 tokenizers 中的tokenizers.Tokenizer对象。更多信息请参阅 使用来自 🤗 tokenizers 的分词器。 - tokenizer_file (
str) — 指向一个本地 JSON 文件的路径,该文件表示一个先前已序列化的来自 🤗 tokenizers 的tokenizers.Tokenizer对象。
所有快速分词器(封装 HuggingFace tokenizers 库)的基类。
处理所有用于分词和特殊 token 的共享方法,以及用于下载/缓存/加载预训练分词器以及向词汇表添加 token 的方法。
此类还在所有分词器之上以统一的方式包含已添加的 token,因此我们不必处理各种底层字典结构(BPE, sentencepiece...)的特定词汇表扩充方法。
类属性(由派生类覆盖)
- vocab_files_names (
dict[str, str]) — 一个字典,其键是模型所需的每个词汇表文件的__init__关键字名称,对应的值是保存相关文件时的文件名(字符串)。 - pretrained_vocab_files_map (
dict[str, dict[str, str]]) — 字典的字典,高层键是模型所需的每个词汇表文件的__init__关键字名称,底层键是预训练模型的short-cut-names,其值是关联的预训练词汇表文件的url。 - model_input_names (
list[str]) — 模型正向传播中预期的输入列表。 - padding_side (
str) — 模型应该应用填充的侧面的默认值。应为'right'或'left'。 - truncation_side (
str) — 模型应该应用截断的侧面的默认值。应为'right'或'left'。
__call__
< 源码 >( text: TextInput | PreTokenizedInput | list[TextInput] | list[PreTokenizedInput] | None = None text_pair: TextInput | PreTokenizedInput | list[TextInput] | list[PreTokenizedInput] | None = None text_target: TextInput | PreTokenizedInput | list[TextInput] | list[PreTokenizedInput] | None = None text_pair_target: TextInput | PreTokenizedInput | list[TextInput] | list[PreTokenizedInput] | None = None add_special_tokens: bool = True padding: bool | str | PaddingStrategy = False truncation: bool | str | TruncationStrategy | None = None max_length: int | None = None stride: int = 0 is_split_into_words: bool = False pad_to_multiple_of: int | None = None padding_side: str | None = None return_tensors: str | TensorType | None = None return_token_type_ids: bool | None = None return_attention_mask: bool | None = None return_overflowing_tokens: bool = False return_special_tokens_mask: bool = False return_offsets_mapping: bool = False return_length: bool = False verbose: bool = True tokenizer_kwargs: dict[str, Any] | None = None **kwargs ) → BatchEncoding
参数
- text (
str,list[str],list[list[str]], 可选) — 要编码的序列或序列批次。每个序列可以是字符串或字符串列表(预分词字符串)。如果序列以字符串列表的形式提供(预分词),则必须设置is_split_into_words=True(以消除与序列批次的歧义)。 - text_pair (
str,list[str],list[list[str]], 可选) — 要编码的序列或序列批次。每个序列可以是字符串或字符串列表(预分词字符串)。如果序列以字符串列表的形式提供(预分词),则必须设置is_split_into_words=True(以消除与序列批次的歧义)。 - text_target (
str,list[str],list[list[str]], 可选) — 要编码为目标文本的序列或序列批次。每个序列可以是字符串或字符串列表(预分词字符串)。如果序列以字符串列表的形式提供(预分词),则必须设置is_split_into_words=True(以消除与序列批次的歧义)。 - text_pair_target (
str,list[str],list[list[str]], 可选) — 要编码为目标文本的序列或序列批次。每个序列可以是字符串或字符串列表(预分词字符串)。如果序列以字符串列表的形式提供(预分词),则必须设置is_split_into_words=True(以消除与序列批次的歧义)。 - tokenizer_kwargs (
dict[str, Any], 可选) — 传递给分词器的附加关键字参数。这些参数将与显式参数和其他关键字参数合并,其中显式参数具有最高优先级。 - add_special_tokens (
bool, 可选, 默认值为True) — 在对序列进行编码时是否添加特殊标记。这将使用底层的PretrainedTokenizerBase.build_inputs_with_special_tokens函数,该函数定义了哪些标记会自动添加到输入 ID 中。如果您希望自动添加bos或eos标记,此参数非常有用。 - padding (
bool,str或 PaddingStrategy, 可选, 默认值为False) — 激活并控制填充。接受以下值:True或'longest':填充至批次中最长的序列(如果仅提供单个序列,则不进行填充)。'max_length':填充至max_length参数指定的最大长度,如果未提供该参数,则填充至模型可接受的最大输入长度。False或'do_not_pad'(默认):不进行填充(即可以输出包含不同长度序列的批次)。
- truncation (
bool,str或 TruncationStrategy, 可选, 默认值为False) — 激活并控制截断。接受以下值:True或'longest_first':截断至max_length参数指定的最大长度,如果未提供该参数,则截断至模型可接受的最大输入长度。如果提供了序列对(或成对批次),这将逐个标记地进行截断,从最长的序列中移除一个标记。'only_first':截断至max_length参数指定的最大长度,如果未提供该参数,则截断至模型可接受的最大输入长度。如果提供了序列对(或成对批次),这只会截断第一个序列。'only_second':截断至max_length参数指定的最大长度,如果未提供该参数,则截断至模型可接受的最大输入长度。如果提供了序列对(或成对批次),这只会截断第二个序列。False或'do_not_truncate'(默认):不进行截断(即可以输出长度超过模型最大可接收输入大小的批次)。
- max_length (
int, 可选) — 控制截断/填充参数所使用的最大长度。如果未设置或设为
None,则在截断/填充参数需要时将使用模型预定义的最大长度。如果模型没有特定的最大输入长度(如 XLNet),则针对最大长度的截断/填充将被停用。 - stride (
int, 可选, 默认值为 0) — 如果与max_length一起设置,当return_overflowing_tokens=True时,返回的溢出标记将包含截断序列末尾的一些标记,以提供截断序列和溢出序列之间的重叠。此参数的值定义了重叠标记的数量。 - is_split_into_words (
bool, 可选, 默认值为False) — 输入是否已预分词(例如已拆分为单词)。如果设置为True,分词器将假定输入已拆分为单词(例如通过空格拆分),并对这些单词进行分词。这对于命名实体识别(NER)或标记分类任务非常有用。 - pad_to_multiple_of (
int, 可选) — 如果设置,将把序列填充至提供值的倍数。要求激活padding。这对于在计算能力>= 7.5(Volta)的 NVIDIA 硬件上启用 Tensor Cores 特别有用。 - padding_side (
str, 可选) — 模型应在其上应用填充的一侧。应在 ['right', 'left'] 之间进行选择。默认值取自同名的类属性。 - return_tensors (
str或 TensorType, 可选) — 如果设置,将返回张量而不是 Python 整数列表。可接受的值为:'pt':返回 PyTorchtorch.Tensor对象。'np':返回 Numpynp.ndarray对象。
- return_token_type_ids (
bool, 可选) — 是否返回标记类型 ID(token type IDs)。如果保持默认,将根据特定分词器的默认设置返回标记类型 ID,该默认值由return_outputs属性定义。 - return_attention_mask (
bool, 可选) — 是否返回注意力掩码(attention mask)。如果保持默认,将根据特定分词器的默认设置返回注意力掩码,该默认值由return_outputs属性定义。 - return_overflowing_tokens (
bool, 可选, 默认值为False) — 是否返回溢出标记序列。如果提供了输入 ID 的序列对(或成对批次)且使用了truncation_strategy = longest_first或True,则会引发错误,而不是返回溢出标记。 - return_special_tokens_mask (
bool, 可选, 默认值为False) — 是否返回特殊标记掩码信息。 - return_offsets_mapping (
bool, 可选, 默认值为False) — 是否为每个标记返回(char_start, char_end)。此功能仅适用于继承自 PreTrainedTokenizerFast 的快速分词器。如果使用 Python 的分词器,此方法将引发
NotImplementedError。 - return_length (
bool, 可选, 默认值为False) — 是否返回已编码输入的长度。 - verbose (
bool, 可选, 默认值为True) — 是否打印更多信息和警告。 - ***kwargs** — 传递给
self.tokenize()方法。
具有以下字段的 BatchEncoding
-
input_ids — 要输入到模型中的标记 ID 列表。
-
token_type_ids — 要输入到模型中的标记类型 ID 列表(当
return_token_type_ids=True或如果 *“token_type_ids”* 在self.model_input_names中时)。 -
attention_mask — 指定模型应关注哪些标记的索引列表(当
return_attention_mask=True或如果 *“attention_mask”* 在self.model_input_names中时)。 -
overflowing_tokens — 溢出标记序列列表(当指定
max_length且return_overflowing_tokens=True时)。 -
num_truncated_tokens — 截断标记的数量(当指定
max_length且return_overflowing_tokens=True时)。 -
special_tokens_mask — 0 和 1 的列表,其中 1 表示添加的特殊标记,0 表示常规序列标记(当
add_special_tokens=True且return_special_tokens_mask=True时)。 -
length — 输入的长度(当
return_length=True时)
将一个或多个序列或一对或多对序列标记化并准备用于模型的主要方法。
add_tokens
< source >( new_tokens: str | AddedToken | Sequence[str | AddedToken] special_tokens: bool = False ) → int
参数
- new_tokens (
str,tokenizers.AddedToken或 str 或tokenizers.AddedToken的序列) — 标记仅在它们不在词汇表中时才会被添加。tokenizers.AddedToken包装了一个字符串标记,允许您个性化其行为:该标记是否应仅匹配单个单词、是否应在左侧去除所有潜在的空格、是否应在右侧去除所有潜在的空格等。 - special_tokens (
bool, 可选, 默认值为False) — 指定该标记是否为特殊标记。这主要会改变归一化行为。请参阅 HuggingFace tokenizers 库中关于tokenizers.AddedToken的详细信息。
返回
int
添加到词汇表中的标记数量。
#TODO 将此从此处删除!PreTrainedTokenizerBase 应该与 AddedToken 无关。
添加一组新标记。如果新标记不在词汇表中,它们将被添加到末尾。因此,添加的标记和来自分词算法词汇表的标记处理方式不同。
示例
# Let's see how to increase the vocabulary of Bert model and tokenizer
tokenizer = BertTokenizerFast.from_pretrained("google-bert/bert-base-uncased")
model = BertModel.from_pretrained("google-bert/bert-base-uncased")
num_added_toks = tokenizer.add_tokens(["new_tok1", "my_new-tok2"])
print("We have added", num_added_toks, "tokens")
# Notice: resize_token_embeddings expect to receive the full size of the new vocabulary, i.e., the length of the tokenizer.
model.resize_token_embeddings(len(tokenizer))add_special_tokens
< source >( special_tokens_dict: dict[str, str | AddedToken | Sequence[str | AddedToken]] replace_extra_special_tokens = True ) → int
参数
- special_tokens_dict (字典 str 到 str,
tokenizers.AddedToken, 或Sequence[Union[str, AddedToken]]) — 键应位于预定义特殊属性列表中:[bos_token,eos_token,unk_token,sep_token,pad_token,cls_token,mask_token,extra_special_tokens]。标记仅在它们不在词汇表中时才会被添加(通过检查分词器是否为其分配了
unk_token的索引进行测试)。 - replace_extra_special_tokens (
bool, 可选, 默认值为True) — 如果为True,现有的额外特殊标记列表将被special_tokens_dict中提供的列表替换。否则,extra_special_tokens将被扩展。在前一种情况下,这些标记不会从分词器的完整词汇表中移除——它们只是被标记为非特殊标记。请记住,这只会影响解码过程中跳过哪些标记,不会影响added_tokens_encoder和added_tokens_decoder。这意味着之前存在的extra_special_tokens仍然是已添加的标记,并且不会被模型拆分。
返回
int
添加到词汇表中的标记数量。
将特殊标记字典(eos、pad、cls 等)添加到编码器并将其链接到类属性。如果特殊标记不在词汇表中,它们将被添加到其中(索引从当前词汇表的最后一个索引开始)。
在向词汇表添加新标记时,您应该确保同时调整模型的标记嵌入矩阵,以便其嵌入矩阵与分词器匹配。
为此,请使用 resize_token_embeddings() 方法。
使用 add_special_tokens 将确保您的特殊标记可以通过多种方式使用
- 在使用
skip_special_tokens = True进行解码时,可以跳过特殊标记。 - 特殊标记由分词器进行仔细处理(它们永远不会被拆分),类似于
AddedTokens。 - 您可以轻松地使用分词器类属性(如
tokenizer.cls_token)来引用特殊标记。这使得开发与模型无关的训练和微调脚本变得容易。
在可能的情况下,预训练模型通常已经注册了特殊标记(例如 BertTokenizer 的 cls_token 已注册为 '[CLS]',而 XLM 的对应标记已注册为 '</s>')。
示例
# Let's see how to add a new classification token to GPT-2
tokenizer = GPT2Tokenizer.from_pretrained("openai-community/gpt2")
model = GPT2Model.from_pretrained("openai-community/gpt2")
special_tokens_dict = {"cls_token": "<CLS>"}
num_added_toks = tokenizer.add_special_tokens(special_tokens_dict)
print("We have added", num_added_toks, "tokens")
# Notice: resize_token_embeddings expect to receive the full size of the new vocabulary, i.e., the length of the tokenizer.
model.resize_token_embeddings(len(tokenizer))
assert tokenizer.cls_token == "<CLS>"apply_chat_template
< 源码 >( conversation: list[dict[str, str]] | list[list[dict[str, str]]] tools: list[dict | Callable] | None = None documents: list[dict[str, str]] | None = None chat_template: str | None = None add_generation_prompt: bool = False continue_final_message: bool | str = False tokenize: bool = True padding: bool | str | PaddingStrategy = False truncation: bool = False max_length: int | None = None return_tensors: str | TensorType | None = None return_dict: bool = True return_assistant_tokens_mask: bool = False tokenizer_kwargs: dict[str, Any] | None = None **kwargs ) → Union[list[int], Dict]
参数
- conversation (Union[list[dict[str, str]], list[list[dict[str, str]]]]) — 一个包含“role”(角色)和“content”(内容)键的字典列表,表示当前的聊天记录。
- tools (
list[Union[Dict, Callable]], 可选) — 模型可调用的工具(可调用函数)列表。如果模板不支持函数调用,此参数将无效。每个工具应作为 JSON Schema 传入,提供工具的名称、描述和参数类型。更多信息请参见我们的 工具使用指南。 - documents (
list[dict[str, str]], 可选) — 表示文档的字典列表,如果模型正在执行 RAG(检索增强生成),模型将能够访问这些文档。如果模板不支持 RAG,此参数将无效。建议每个文档都是一个包含“title”(标题)和“text”(文本)键的字典。 - chat_template (
str, 可选) — 用于此次转换的 Jinja 模板。通常不需要为此参数传递任何内容,因为默认会使用模型的模板。 - add_generation_prompt (bool, 可选) — 如果设置此项,将在格式化输出的末尾追加表示助手消息开始的标记。当您希望模型生成响应时,这非常有用。请注意,此参数将传递给聊天模板,因此模板必须支持它,此参数才有效。
- continue_final_message (bool 或 str, 可选) — 如果设置此项,聊天将被格式化,以便聊天中的最后一条消息是开放式的,没有任何结束标记(EOS)。模型将继续该消息,而不是开始新消息。这允许您为模型“预填”部分响应。如果传入字符串,它将被用作要继续的字段的键(例如,“reasoning_content”)。不能与
add_generation_prompt同时使用。 - tokenize (
bool,默认为True) — 是否对输出进行分词。如果为False,输出将为字符串。 - padding (
bool,str或 PaddingStrategy, 可选,默认为False) — 选择填充返回序列的策略(根据模型的填充侧和填充索引),包括:True或'longest':填充至批次中最长的序列(如果仅提供单个序列,则不填充)。'max_length':填充至max_length参数指定的最大长度,如果未提供该参数,则填充至模型可接受的最大输入长度。False或'do_not_pad'(默认):不进行填充(即可以输出批次中具有不同长度序列的结果)。
- truncation (
bool,默认为False) — 是否在最大长度处截断序列。如果 tokenize 为False,此参数无效。 - max_length (
int, 可选) — 用于填充或截断的最大长度(以 token 为单位)。如果 tokenize 为False,此参数无效。如果未指定,将默认使用分词器的max_length属性。 - return_tensors (
str或 TensorType, 可选) — 如果设置,将返回特定框架的张量。如果 tokenize 为False,此参数无效。可接受的值为:'pt':返回 PyTorchtorch.Tensor对象。'np':返回 NumPynp.ndarray对象。
- return_dict (
bool,默认为True) — 是否返回带有命名输出的字典。如果 tokenize 为False,此参数无效。 - tokenizer_kwargs (
dict[str -- Any], 可选): 传递给分词器的额外关键字参数。 - return_assistant_tokens_mask (
bool,默认为False) — 是否返回助手生成 token 的掩码。对于助手生成的 token,掩码将包含 1;对于用户和系统 token,掩码将包含 0。此功能仅适用于通过{% generation %}关键字支持该功能的聊天模板。 - **kwargs — 传递给模板渲染器的额外关键字参数。聊天模板将能够访问这些参数。
返回
Union[list[int], Dict]
表示迄今为止分词后对话的标记 ID 列表,包括控制标记。此输出已准备好直接传递给模型,或通过 generate() 等方法传递。如果设置了 return_dict,将返回分词器输出的字典。
将包含 "role" 和 "content" 键的字典列表转换为标记 ID 列表。此方法旨在与聊天模型一起使用,并将读取分词器的 chat_template 属性,以确定转换时要使用的格式和控制标记。
batch_decode
< 源码 >( sequences: list[int] | list[list[int]] | np.ndarray | torch.Tensor skip_special_tokens: bool = False clean_up_tokenization_spaces: bool | None = None **kwargs ) → list[str]
参数
- sequences (
Union[list[int], list[list[int]], np.ndarray, torch.Tensor]) — 分词后的输入 ID 列表。可以使用__call__方法获得。 - skip_special_tokens (
bool, 可选,默认为False) — 解码时是否移除特殊 token。 - clean_up_tokenization_spaces (
bool, 可选) — 是否清理分词产生的空格。如果为None,将默认使用self.clean_up_tokenization_spaces。 - kwargs (额外的关键字参数, 可选) — 将传递给底层的模型特定解码方法。
返回
list[str]
解码后的句子列表。
通过调用 decode 将标记 ID 列表的列表转换为字符串列表。
此方法仅用于向后兼容。decode 方法现在支持批处理输入,因此您可以直接使用 decode 而不是 batch_decode。
decode
< 源码 >( token_ids: int | list[int] | list[list[int]] | np.ndarray | torch.Tensor skip_special_tokens: bool = False **kwargs ) → Union[str, list[str]]
使用分词器和词汇表将 ID 序列转换为字符串,或将序列列表转换为字符串列表,并提供移除特殊标记和清理分词空格的选项。
类似于执行 self.convert_tokens_to_string(self.convert_ids_to_tokens(token_ids))。
编码
< 源码 >( text: TextInput | PreTokenizedInput | EncodedInput text_pair: TextInput | PreTokenizedInput | EncodedInput | None = None add_special_tokens: bool = True padding: bool | str | PaddingStrategy = False truncation: bool | str | TruncationStrategy | None = None max_length: int | None = None stride: int = 0 padding_side: str | None = None return_tensors: str | TensorType | None = None **kwargs ) → list[int], torch.Tensor, 或 np.ndarray
参数
- text (
str,list[str]或list[int]) — 要编码的第一个序列。这可以是一个字符串、一个字符串列表(使用tokenize方法分词后的字符串)或一个整数列表(使用convert_tokens_to_ids方法转换后的 token ID)。 - text_pair (
str,list[str]或list[int], 可选) — 要编码的可选第二个序列。这可以是一个字符串、一个字符串列表(使用tokenize方法分词后的字符串)或一个整数列表(使用convert_tokens_to_ids方法转换后的 token ID)。 - add_special_tokens (
bool, 可选, 默认为True) — 在编码序列时是否添加特殊 token。这将使用底层函数PretrainedTokenizerBase.build_inputs_with_special_tokens,该函数定义了哪些 token 会被自动添加到输入 ID 中。如果你想自动添加bos或eostoken,这会很有用。 - padding (
bool,str或 PaddingStrategy, 可选, 默认为False) — 激活并控制填充(padding)。接受以下值:True或'longest':填充到 batch 中最长的序列(如果仅提供单个序列,则不填充)。'max_length':填充到参数max_length指定的最大长度,如果未提供该参数,则填充到模型可接受的最大输入长度。False或'do_not_pad'(默认):不填充(即:可以输出长度不同的序列构成的 batch)。
- truncation (
bool,str或 TruncationStrategy, 可选, 默认为False) — 激活并控制截断(truncation)。接受以下值:True或'longest_first':截断到参数max_length指定的最大长度,如果未提供该参数,则截断到模型可接受的最大输入长度。这将逐个 token 进行截断,如果提供了序列对(或序列对的 batch),则从最长的序列中移除一个 token。'only_first':截断到参数max_length指定的最大长度,如果未提供该参数,则截断到模型可接受的最大输入长度。如果提供了序列对(或序列对的 batch),则仅截断第一个序列。'only_second':截断到参数max_length指定的最大长度,如果未提供该参数,则截断到模型可接受的最大输入长度。如果提供了序列对(或序列对的 batch),则仅截断第二个序列。False或'do_not_truncate'(默认):不截断(即:可以输出序列长度大于模型最大允许输入长度的 batch)。
- max_length (
int, 可选) — 控制截断/填充参数所使用的最大长度。如果留空或设为
None,当截断/填充参数需要最大长度时,将使用模型预定义的最大长度。如果模型没有特定的最大输入长度(如 XLNet),则将禁用针对最大长度的截断/填充。 - stride (
int, 可选, 默认为 0) — 如果与max_length一起设置为一个数值,当return_overflowing_tokens=True时,返回的溢出 token 将包含截断序列末尾的一些 token,以便在截断序列和溢出序列之间提供一定的重叠。此参数的值定义了重叠 token 的数量。 - is_split_into_words (
bool, 可选, 默认为False) — 输入是否已经是预分词的(例如,已拆分为单词)。如果设置为True,tokenizer 会假设输入已经拆分为单词(例如,通过空格进行拆分),然后对其进行分词。这对于命名实体识别(NER)或 token 分类任务非常有用。 - pad_to_multiple_of (
int, 可选) — 如果设置,将把序列填充到提供值的倍数。要求激活padding。这对于在计算能力>= 7.5(Volta) 的 NVIDIA 硬件上启用 Tensor Cores 特别有用。 - padding_side (
str, 可选) — 模型应该应用填充的一侧。应在 [‘right’, ‘left’] 之间选择。默认值取自同名的类属性。 - return_tensors (
str或 TensorType, 可选) — 如果设置,将返回 tensor 而不是 Python 整数列表。可接受的值为:'pt':返回 PyTorchtorch.Tensor对象。'np':返回 Numpynp.ndarray对象。
- **kwargs — 传递给
.tokenize()方法。
返回
list[int], torch.Tensor, 或 np.ndarray
文本的 tokenized ID。
使用分词器和词汇表将字符串转换为 ID 序列(整数)。
与执行 self.convert_tokens_to_ids(self.tokenize(text)) 相同。
push_to_hub
< 源代码 >( repo_id: str commit_message: str | None = None commit_description: str | None = None private: bool | None = None token: bool | str | None = None revision: str | None = None create_pr: bool = False max_shard_size: int | str | None = '50GB' tags: list[str] | None = None )
参数
- repo_id (
str) — 您要将分词器推送到其中的仓库名称。推送给特定组织时,它应包含您的组织名称。 - commit_message (
str, 可选) — 推送时的提交信息。默认为"Upload tokenizer"。 - commit_description (
str, 可选) — 将要创建的提交的描述。 - private (
bool, 可选) — 是否将仓库设为私有。如果为None(默认),除非组织的默认设置为私有,否则仓库将为公开。如果仓库已存在,则此值会被忽略。 - token (
bool或str, 可选) — 用作远程文件 HTTP 持有者授权的 token。如果为True(默认),将使用运行hf auth login时生成的 token(存储在~/.huggingface中)。 - revision (
str, 可选) — 将上传文件推送到的分支。 - create_pr (
bool, 可选, 默认为False) — 是否通过上传的文件创建 PR,或者直接提交。 - max_shard_size (
int或str, 可选, 默认为"50GB") — 仅适用于模型。Checkpoint 分片前的最大大小。Checkpoint 分片后每个分片的大小将小于此值。如果以字符串形式表示,则需要是数字后跟一个单位(例如"5MB")。 - tags (
list[str], 可选) — 要推送到 Hub 上的标签列表。
将分词器文件上传到 🤗 Model Hub。
示例
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("google-bert/bert-base-cased")
# Push the tokenizer to your namespace with the name "my-finetuned-bert".
tokenizer.push_to_hub("my-finetuned-bert")
# Push the tokenizer to an organization with the name "my-finetuned-bert".
tokenizer.push_to_hub("huggingface/my-finetuned-bert")从可用的序列化文件(tokenizer.json、sentencepiece 模型、tekken.json、词汇表/合并规则)构建一个 tokenizers.Tokenizer 后端。
返回词汇表中已添加的 token,以 token 到索引的字典形式表示。
num_special_tokens_to_add
< 源代码 >( pair: bool = False ) → int
返回使用特殊标记编码序列时添加的标记数量。
此方法对一个虚拟输入进行编码,并检查添加的标记数量,因此效率不高。请勿将其放入您的训练循环中。
set_truncation_and_padding
< 源代码 >( padding_strategy: PaddingStrategy truncation_strategy: TruncationStrategy max_length: int stride: int pad_to_multiple_of: int | None padding_side: str | None )
参数
- padding_strategy (PaddingStrategy) — 将应用于输入的填充类型
- truncation_strategy (TruncationStrategy) — 将应用于输入的截断类型
- max_length (
int) — 序列的最大长度。 - stride (
int) — 处理溢出时使用的步长(stride)。 - pad_to_multiple_of (
int, 可选) — 如果设置,会将序列填充为提供值的倍数。这对于在计算能力>= 7.5(Volta) 的 NVIDIA 硬件上使用 Tensor Core 特别有用。 - padding_side (
str, 可选) — 模型应在其上应用填充的一侧。应在 [‘right’, ‘left’] 之间选择。默认值取自同名的类属性。
为快速分词器(由 HuggingFace tokenizers 库提供)定义截断和填充策略,并在之后恢复分词器设置。
提供的分词器在管理部分之前没有填充/截断策略。如果您的分词器在之前设置了填充/截断策略,那么在退出管理部分时,它将被重置为无填充/截断。
train_new_from_iterator
< 源代码 >( text_iterator vocab_size length = None new_special_tokens = None special_tokens_map = None **kwargs ) → PreTrainedTokenizerFast
参数
- text_iterator (
list[str]的生成器) — 训练语料库。应该是文本批次的生成器,例如,如果您将所有内容都在内存中,则可以是文本列表的列表。 - vocab_size (
int) — 您希望为分词器设置的词汇表大小。 - length (
int, 可选) — 迭代器中的序列总数。这用于提供有意义的进度跟踪。 - new_special_tokens (
str或AddedToken的列表, 可选) — 要添加到您正在训练的分词器中的新特殊标记列表。 - special_tokens_map (
dict[str, str], 可选) — 如果您想重命名该分词器使用的一些特殊标记,请在此参数中传入旧特殊标记名称到新特殊标记名称的映射。 - kwargs (
dict[str, Any], 可选) — 传递给 🤗 Tokenizers 库训练器的额外关键字参数。
一个与原始分词器类型相同,在 text_iterator 上训练过的新分词器。
在新的语料库上训练分词器,其默认设置(在特殊标记或分词流水线方面)与当前分词器相同。
使用当前的 bos_token 和 eos_token 更新底层后处理器。
PythonBackend
class transformers.PythonBackend
< 源代码 >( **kwargs )
参数
- model_max_length (
int, 可选) — Transformer 模型输入的最大长度(以 Token 数量计)。当通过 from_pretrained() 加载分词器时,该值将被设置为关联模型在max_model_input_sizes中存储的值(见上文)。如果未提供值,则默认为极大整数(int(1e30))。 - padding_side (
str, 可选) — 模型应在其上应用填充 (padding) 的一侧。应从 ['right', 'left'] 中选择。默认值取自同名的类属性。 - truncation_side (
str, 可选) — 模型应在其上应用截断 (truncation) 的一侧。应从 ['right', 'left'] 中选择。默认值取自同名的类属性。 - chat_template (
str, 可选) — 用于格式化聊天消息列表的 Jinja 模板字符串。请参阅 https://huggingface.co/docs/transformers/chat_templating 获取完整描述。 - model_input_names (
list[string], 可选) — 模型前向传播所接受的输入列表(如"token_type_ids"或"attention_mask")。默认值取自同名的类属性。 - bos_token (
str或tokenizers.AddedToken, 可选) — 表示句首的特殊 Token。 - eos_token (
str或tokenizers.AddedToken, 可选) — 表示句末的特殊 Token。 - unk_token (
str或tokenizers.AddedToken, 可选) — 表示词汇表外 Token 的特殊 Token。 - sep_token (
str或tokenizers.AddedToken, 可选) — 用于分隔同一输入中两个不同句子的特殊 Token(例如 BERT 所使用)。 - pad_token (
str或tokenizers.AddedToken, 可选) — 用于将 Token 数组调整为相同大小以进行批处理的特殊 Token。随后将被注意力机制或损失计算忽略。 - cls_token (
str或tokenizers.AddedToken, 可选) — 表示输入类别的特殊 Token(例如 BERT 所使用)。 - mask_token (
str或tokenizers.AddedToken, 可选) — 表示被掩码 Token 的特殊 Token(用于掩码语言建模预训练目标,如 BERT)。将与self.mask_token和self.mask_token_id关联。 - extra_special_tokens (
str或tokenizers.AddedToken的列表, 可选) — 额外的模型特定特殊 Token 列表。在此处添加它们可确保在设置skip_special_tokens=True进行解码时将其跳过。如果它们不属于词汇表,则会被添加到词汇表的末尾。 - split_special_tokens (
bool, 可选, 默认为False) — 是否在分词过程中拆分特殊 Token。传递该参数将影响分词器的内部状态。默认行为是不拆分特殊 Token。这意味着如果<s>是bos_token,则tokenizer.tokenize("<s>") = ['<s>']。否则,如果split_special_tokens=True,则tokenizer.tokenize("<s>")将产生['<', 's', '>']。
所有慢速分词器的基类。
处理所有分词和特殊 Token 的共享方法,以及下载/缓存/加载预训练分词器以及向词汇表添加 Token 的方法。
该类还以统一方式包含所有分词器之上的已添加 Token,因此我们不必处理各种底层字典结构(BPE、sentencepiece 等)特定的词汇表扩充方法。
类属性(由派生类覆盖)
- vocab_files_names (
dict[str, str]) — 一个字典,其键是模型所需的每个词汇表文件的__init__关键字名称,对应的值是保存相关文件时的文件名(字符串)。 - pretrained_vocab_files_map (
dict[str, dict[str, str]]) — 字典的字典,高层键是模型所需的每个词汇表文件的__init__关键字名称,底层键是预训练模型的short-cut-names,其值是关联的预训练词汇表文件的url。 - model_input_names (
list[str]) — 模型正向传播中预期的输入列表。 - padding_side (
str) — 模型应该应用填充的侧面的默认值。应为'right'或'left'。 - truncation_side (
str) — 模型应该应用截断的侧面的默认值。应为'right'或'left'。
build_inputs_with_special_tokens
< 源码 >( token_ids_0: list token_ids_1: list[int] | None = None ) → list[int]
通过添加特殊标记,从一个或一对序列构建模型输入。
此方法根据分词器的 special_tokens_pattern 动态构建输入
"none": 无特殊标记"cls_sep": [CLS] seq0 [SEP] 或 [CLS] seq0 [SEP] seq1 [SEP]"eos": seq0 [EOS] 或 seq0 [EOS] seq1 [EOS]"bos": [BOS] seq0 或 [BOS] seq0 [BOS] seq1"bos_eos": [BOS] seq0 [EOS] 或 [BOS] seq0 [EOS] seq1 [EOS]"cls_double_sep": [CLS] seq0 [SEP] 或 [CLS] seq0 [SEP][SEP] seq1 [SEP]"prefix_suffix":<prefix_tokens> seq0 [seq1] <suffix_tokens>(分词器上存储的自定义前缀/后缀)
create_token_type_ids_from_sequences
< 源码 >( token_ids_0: list token_ids_1: list[int] | None = None ) → list[int]
为用于序列对分类任务的两个序列创建一个掩码。
此方法根据分词器的配置属性动态构建 token 类型 ID
token_type_ids_pattern: 要使用的模式 ("all_zeros" 或 "bert_style")token_type_ids_include_special_tokens: 在长度计算中是否计入特殊标记
示例
# All zeros pattern (default, used by RoBERTa, BART, etc.)
tokenizer.token_type_ids_pattern = "all_zeros"
# Returns: [0, 0, 0, ...] for both sequences
# BERT-style pattern (first sequence gets 0s, second gets 1s)
tokenizer.token_type_ids_pattern = "bert_style"
# Returns: [0, 0, 0, ..., 1, 1, 1, ...] for sequence pairs返回词表中已添加的标记,以“标记到索引”的字典形式。结果可能与快速(fast)调用不同,因为目前我们总是添加这些标记,即使它们已经在词表中。这是我们应该改变的地方。
get_special_tokens_mask
< 源码 >( token_ids_0: list token_ids_1: list | None = None already_has_special_tokens: bool = False ) → A list of integers in the range [0, 1]
从未添加特殊令牌的令牌列表中检索序列 ID。使用分词器 prepare_for_model 或 encode_plus 方法添加特殊令牌时会调用此方法。
此方法根据分词器的 special_tokens_pattern 动态构建特殊标记掩码
"none": 无特殊标记 (默认,返回所有 0)"cls_sep": [CLS] seq0 [SEP] 或 [CLS] seq0 [SEP] seq1 [SEP]"eos": seq0 [EOS] 或 seq0 [EOS] seq1 [EOS]"bos": [BOS] seq0 或 [BOS] seq0 [BOS] seq1"bos_eos": [BOS] seq0 [EOS] 或 [BOS] seq0 [EOS] seq1 [EOS]"cls_double_sep": [CLS] seq0 [SEP] 或 [CLS] seq0 [SEP][SEP] seq1 [SEP]"prefix_suffix":<prefix_tokens> seq0 [seq1] <suffix_tokens>
num_special_tokens_to_add
< 源码 >( pair: bool = False ) → int
返回使用特殊标记编码序列时添加的标记数量。
此方法对一个虚拟输入进行编码,并检查添加的标记数量,因此效率不高。请勿将其放入您的训练循环中。
prepare_for_model
< 源码 >( ids: list pair_ids: list[int] | None = None add_special_tokens: bool = True padding: bool | str | transformers.utils.generic.PaddingStrategy = False truncation: bool | str | transformers.tokenization_utils_base.TruncationStrategy = False max_length: int | None = None stride: int = 0 pad_to_multiple_of: int | None = None padding_side: str | None = None return_tensors: str | transformers.utils.generic.TensorType | None = None return_token_type_ids: bool | None = None return_attention_mask: bool | None = None return_overflowing_tokens: bool = False return_special_tokens_mask: bool = False return_length: bool = False verbose: bool = True prepend_batch_axis: bool = False **kwargs )
为模型准备输入 ID 序列。包括添加特殊标记、截断和填充。
prepare_for_tokenization
< 源码 >( text: str is_split_into_words: bool = False **kwargs ) → tuple[str, dict[str, Any]]
在分词前执行任何必要的转换。
此方法应从 kwargs 中弹出参数,并返回剩余的 kwargs。我们在编码过程结束时测试 kwargs,以确保所有参数都已使用。
save_vocabulary
< 源码 >( save_directory: str filename_prefix: str | None = None ) → tuple[str, ...]
常见词汇表保存模式的默认实现。将 self.encoder/self.vocab 保存为 JSON,可选地包含 self.bpe_ranks 作为合并。如果没有词汇表,则返回空元组。
如果您的分词器需要自定义保存逻辑 (例如,SentencePiece 模型、多个词汇表文件或特殊文件格式),请重写此方法。
tokenize
< 源码 >( text: str **kwargs )
使用分词器将字符串转换为标记序列。
truncate_sequences
< 源码 >( ids: list pair_ids: list[int] | None = None num_tokens_to_remove: int = 0 truncation_strategy: str | transformers.tokenization_utils_base.TruncationStrategy = 'longest_first' stride: int = 0 )
根据指定的策略截断序列。
TokenizersBackend
class transformers.TokenizersBackend
< 源码 >( *args **kwargs )
参数
- model_max_length (
int, 可选) — Transformer 模型输入的序列最大长度(以 token 数量计)。当使用 from_pretrained() 加载 tokenizer 时,此值将被设置为与模型关联的max_model_input_sizes中存储的值(见上文)。如果未提供值,则默认为极大的整数 (int(1e30))。 - padding_side (
str, 可选) — 模型应应用填充(padding)的一侧。应在 ['right', 'left'] 之间选择。默认值取自同名的类属性。 - truncation_side (
str, 可选) — 模型应应用截断(truncation)的一侧。应在 ['right', 'left'] 之间选择。默认值取自同名的类属性。 - chat_template (
str, 可选) — 用于格式化聊天消息列表的 Jinja 模板字符串。有关完整描述,请参阅 https://huggingface.co/docs/transformers/chat_templating。 - model_input_names (
list[string], 可选) — 模型前向传递(forward pass)所接受的输入列表(如"token_type_ids"或"attention_mask")。默认值取自同名的类属性。 - bos_token (
str或tokenizers.AddedToken, 可选) — 表示句子开头的特殊 token。 - eos_token (
str或tokenizers.AddedToken, 可选) — 表示句子结尾的特殊 token。 - unk_token (
str或tokenizers.AddedToken, 可选) — 表示词汇表外(out-of-vocabulary)token 的特殊 token。 - sep_token (
str或tokenizers.AddedToken, 可选) — 在同一输入中分隔两个不同句子的特殊 token(例如 BERT 使用的)。 - pad_token (
str或tokenizers.AddedToken, 可选) — 用于使 token 数组大小一致以进行批处理(batching)的特殊 token。随后将被注意力机制或损失计算所忽略。 - cls_token (
str或tokenizers.AddedToken, 可选) — 表示输入类别的特殊 token(例如 BERT 使用的)。 - mask_token (
str或tokenizers.AddedToken, 可选) — 表示被掩码(masked)token 的特殊 token(用于掩码语言建模预训练目标,如 BERT)。将与self.mask_token和self.mask_token_id相关联。 - extra_special_tokens (
str或tokenizers.AddedToken的列表, 可选) — 额外的模型特定特殊 token 列表。在此添加它们以确保在设置skip_special_tokens=True进行解码时它们会被跳过。如果它们不在词汇表中,它们将被添加到词汇表的末尾。 - split_special_tokens (
bool, 可选, 默认为False) — 在分词过程中是否应拆分特殊 token。传入此参数将影响 tokenizer 的内部状态。默认行为是不拆分特殊 token。这意味着如果<s>是bos_token,则tokenizer.tokenize("<s>") = ['<s>']。反之,如果split_special_tokens=True,则tokenizer.tokenize("<s>")将得到['<', 's', '>']。 - tokenizer_object (
tokenizers.Tokenizer) — 一个用于实例化的 🤗 tokenizers 中的tokenizers.Tokenizer对象。更多信息请参阅 使用来自 🤗 tokenizers 的分词器。 - tokenizer_file (
str) — 指向一个本地 JSON 文件的路径,该文件表示一个先前已序列化的来自 🤗 tokenizers 的tokenizers.Tokenizer对象。
所有快速分词器(封装 HuggingFace tokenizers 库)的基类。
处理所有用于分词和特殊 token 的共享方法,以及用于下载/缓存/加载预训练分词器以及向词汇表添加 token 的方法。
此类还在所有分词器之上以统一的方式包含已添加的 token,因此我们不必处理各种底层字典结构(BPE, sentencepiece...)的特定词汇表扩充方法。
类属性(由派生类覆盖)
- vocab_files_names (
dict[str, str]) — 一个字典,其键是模型所需的每个词汇表文件的__init__关键字名称,对应的值是保存相关文件时的文件名(字符串)。 - pretrained_vocab_files_map (
dict[str, dict[str, str]]) — 字典的字典,高层键是模型所需的每个词汇表文件的__init__关键字名称,底层键是预训练模型的short-cut-names,其值是关联的预训练词汇表文件的url。 - model_input_names (
list[str]) — 模型正向传播中预期的输入列表。 - padding_side (
str) — 模型应该应用填充的侧面的默认值。应为'right'或'left'。 - truncation_side (
str) — 模型应该应用截断的侧面的默认值。应为'right'或'left'。
从可用的序列化文件(tokenizer.json、sentencepiece 模型、tekken.json、词汇表/合并规则)构建一个 tokenizers.Tokenizer 后端。
返回词汇表中已添加的 token,以 token 到索引的字典形式表示。
num_special_tokens_to_add
< 源代码 >( pair: bool = False ) → int
返回使用特殊标记编码序列时添加的标记数量。
此方法对一个虚拟输入进行编码,并检查添加的标记数量,因此效率不高。请勿将其放入您的训练循环中。
set_truncation_and_padding
< 源代码 >( padding_strategy: PaddingStrategy truncation_strategy: TruncationStrategy max_length: int stride: int pad_to_multiple_of: int | None padding_side: str | None )
参数
- padding_strategy (PaddingStrategy) — 将应用于输入的填充类型
- truncation_strategy (TruncationStrategy) — 将应用于输入的截断类型
- max_length (
int) — 序列的最大长度。 - stride (
int) — 处理溢出时使用的步长(stride)。 - pad_to_multiple_of (
int, 可选) — 如果设置,会将序列填充为提供值的倍数。这对于在计算能力>= 7.5(Volta) 的 NVIDIA 硬件上使用 Tensor Core 特别有用。 - padding_side (
str, 可选) — 模型应在其上应用填充的一侧。应在 [‘right’, ‘left’] 之间选择。默认值取自同名的类属性。
为快速分词器(由 HuggingFace tokenizers 库提供)定义截断和填充策略,并在之后恢复分词器设置。
提供的分词器在管理部分之前没有填充/截断策略。如果您的分词器在之前设置了填充/截断策略,那么在退出管理部分时,它将被重置为无填充/截断。
train_new_from_iterator
< 源代码 >( text_iterator vocab_size length = None new_special_tokens = None special_tokens_map = None **kwargs ) → PreTrainedTokenizerFast
参数
- text_iterator (
list[str]的生成器) — 训练语料库。应该是文本批次的生成器,例如,如果您将所有内容都在内存中,则可以是文本列表的列表。 - vocab_size (
int) — 您希望为分词器设置的词汇表大小。 - length (
int, 可选) — 迭代器中的序列总数。这用于提供有意义的进度跟踪。 - new_special_tokens (
str或AddedToken的列表, 可选) — 要添加到您正在训练的分词器中的新特殊标记列表。 - special_tokens_map (
dict[str, str], 可选) — 如果您想重命名该分词器使用的一些特殊标记,请在此参数中传入旧特殊标记名称到新特殊标记名称的映射。 - kwargs (
dict[str, Any], 可选) — 传递给 🤗 Tokenizers 库训练器的额外关键字参数。
一个与原始分词器类型相同,在 text_iterator 上训练过的新分词器。
在新的语料库上训练分词器,其默认设置(在特殊标记或分词流水线方面)与当前分词器相同。
使用当前的 bos_token 和 eos_token 更新底层后处理器。
SentencePieceBackend
class transformers.SentencePieceBackend
< 源代码 >( **kwargs )
参数
- model_max_length (
int, 可选) — transformer 模型输入的最大长度(以 token 数量计)。当使用 from_pretrained() 加载分词器时,这将设置为max_model_input_sizes中为关联模型存储的值(见上文)。如果没有提供值,则默认为 VERY_LARGE_INTEGER (int(1e30))。 - padding_side (
str, 可选) — 模型应在其上应用填充的一侧。应在 [‘right’, ‘left’] 之间选择。默认值取自同名的类属性。 - truncation_side (
str, 可选) — 模型应在其上应用截断的一侧。应在 [‘right’, ‘left’] 之间选择。默认值取自同名的类属性。 - chat_template (
str, 可选) — 一个用于格式化聊天消息列表的 Jinja 模板字符串。有关完整描述,请参阅 https://huggingface.co/docs/transformers/chat_templating。 - model_input_names (
list[string], 可选) — 模型前向传递(forward pass)接受的输入列表(如"token_type_ids"或"attention_mask")。默认值取自同名的类属性。 - bos_token (
str或tokenizers.AddedToken, 可选) — 表示句子开头的特殊标记。 - eos_token (
str或tokenizers.AddedToken, 可选) — 表示句子结尾的特殊标记。 - unk_token (
str或tokenizers.AddedToken, 可选) — 表示词汇表外(out-of-vocabulary)标记的特殊标记。 - sep_token (
str或tokenizers.AddedToken,可选) — 用于分隔同一输入中两个不同句子的特殊标记(例如 BERT 使用的标记)。 - pad_token (
str或tokenizers.AddedToken,可选) — 用于使标记数组大小一致以进行批处理的特殊标记。随后将被注意力机制或损失计算忽略。 - cls_token (
str或tokenizers.AddedToken,可选) — 代表输入类别的特殊标记(例如 BERT 使用的标记)。 - mask_token (
str或tokenizers.AddedToken,可选) — 代表被遮蔽标记(masked token)的特殊标记(由掩码语言建模预训练目标使用,如 BERT)。将与self.mask_token和self.mask_token_id关联。 - extra_special_tokens (
str或tokenizers.AddedToken的列表,可选) — 额外的模型专用特殊标记列表。在此添加可确保在设置skip_special_tokens=True进行解码时它们会被跳过。如果它们不在词汇表中,它们将被添加到词汇表的末尾。 - split_special_tokens (
bool,可选,默认为False) — 是否在分词过程中拆分特殊标记。设置此项将影响分词器的内部状态。默认行为是不拆分特殊标记。这意味着如果<s>是bos_token,则tokenizer.tokenize("<s>") = ['<s>']。否则,如果split_special_tokens=True,则tokenizer.tokenize("<s>")将得到['<', 's', '>']。
基于 SentencePiece 的分词器的基类,从 sentencepiece.model 文件加载。
继承自 PreTrainedTokenizer。
处理所有分词和特殊 Token 的共享方法,以及下载/缓存/加载预训练分词器以及向词汇表添加 Token 的方法。
该类还以统一方式包含所有分词器之上的已添加 Token,因此我们不必处理各种底层字典结构(BPE、sentencepiece 等)特定的词汇表扩充方法。
类属性(由派生类覆盖)
- vocab_files_names (
dict[str, str]) — 一个字典,其键是模型所需的每个词汇表文件的__init__关键字名称,对应的值是保存相关文件时的文件名(字符串)。 - pretrained_vocab_files_map (
dict[str, dict[str, str]]) — 字典的字典,高层键是模型所需的每个词汇表文件的__init__关键字名称,底层键是预训练模型的short-cut-names,其值是关联的预训练词汇表文件的url。 - model_input_names (
list[str]) — 模型正向传播中预期的输入列表。 - padding_side (
str) — 模型应该应用填充的侧面的默认值。应为'right'或'left'。 - truncation_side (
str) — 模型应该应用截断的侧面的默认值。应为'right'或'left'。
将标记序列(字符串)转换为单个字符串。
以字典形式返回词汇表
save_vocabulary
< 源代码 >( save_directory: str filename_prefix: str | None = None ) → tuple(str)
将 SentencePiece 词汇表(复制原始文件)保存到目录。
BatchEncoding
class transformers.BatchEncoding
< 源代码 >( data: dict[str, Any] | None = None encoding: EncodingFast | Sequence[EncodingFast] | None = None tensor_type: None | str | TensorType = None prepend_batch_axis: bool = False n_sequences: int | None = None )
参数
- data (
dict,可选) — 由__call__/encode_plus/batch_encode_plus方法返回的列表/数组/张量字典(‘input_ids’,‘attention_mask’ 等)。 - encoding (
tokenizers.Encoding或Sequence[tokenizers.Encoding],可选) — 如果分词器是输出诸如从词/字符空间到标记空间的映射等附加信息的快速分词器,则tokenizers.Encoding实例或实例列表(用于批处理)将包含此信息。 - tensor_type (
Union[None, str, TensorType],可选) — 您可以在此处提供一个 tensor_type,以便在初始化时将整数列表转换为 PyTorch/Numpy 张量。 - prepend_batch_axis (
bool,可选,默认为False) — 转换为张量时是否添加批处理轴(参见上文的tensor_type)。请注意,此参数仅在设置了tensor_type参数时有效,否则无效。 - n_sequences (
Optional[int],可选) — 您可以在此处提供一个 tensor_type,以便在初始化时将整数列表转换为 PyTorch/Numpy 张量。
保存 call()、~tokenization_utils_base.PreTrainedTokenizerBase.encode_plus 和 ~tokenization_utils_base.PreTrainedTokenizerBase.batch_encode_plus 方法(tokens, attention_masks 等)的输出。
该类派生自 Python 字典,可用作字典。此外,该类还提供了将词/字符空间映射到标记空间的实用方法。
char_to_token
< 源代码 >( batch_or_char_index: int char_index: int | None = None sequence_index: int = 0 ) → int
获取编码输出中包含批次中序列原始字符串字符的标记索引。
调用方式
self.char_to_token(char_index)(如果批大小为 1)self.char_to_token(batch_index, char_index)(如果批大小大于或等于 1)
当输入序列作为预分词序列提供时(即用户定义了单词),此方法特别适用。在这种情况下,它允许轻松将编码的标记与提供的预分词单词相关联。
char_to_word
< 源代码 >( batch_or_char_index: int char_index: int | None = None sequence_index: int = 0 ) → int 或 list[int]
获取原始字符串中对应于批次序列的原始字符串中某个字符的单词。
调用方式
- 如果批次大小为 1,则使用
self.char_to_word(char_index) - 如果批次大小大于 1,则使用
self.char_to_word(batch_index, char_index)
当输入序列作为预分词序列提供时(即用户定义了单词),此方法特别适用。在这种情况下,它允许轻松将编码的标记与提供的预分词单词相关联。
convert_to_tensors
< 源码 >( tensor_type: str | TensorType | None = None prepend_batch_axis: bool = False )
参数
- tensor_type (
str或 TensorType, 可选) — 要使用的张量类型。如果是str,则应为枚举 TensorType 的值之一。如果为None,则不进行修改。 - prepend_batch_axis (
int, 可选, 默认为False) — 是否在转换期间添加批次维度。
将内部内容转换为张量。
sequence_ids
< 源码 >( batch_index: int = 0 ) → list[Optional[int]]
返回一个列表,将标记映射到其原始句子的 ID
None表示在序列周围或之间添加的特殊标记,0表示对应于第一个序列中单词的标记,1表示当联合编码一对序列时,对应于第二个序列中单词的标记。
通过调用 v.to(device, non_blocking=non_blocking) 将所有值发送到设备(仅限 PyTorch)。
token_to_chars
< 源码 >( batch_or_token_index: int token_index: int | None = None ) → CharSpan
获取批次序列中对应于已编码标记的字符跨度。
字符跨度作为 CharSpan 返回,包含
- start — 关联到该标记的原始字符串中第一个字符的索引。
- end — 关联到该标记的原始字符串中最后一个字符之后的字符的索引。
调用方式
- 如果批次大小为 1,则使用
self.token_to_chars(token_index) - 如果批次大小大于或等于 1,则使用
self.token_to_chars(batch_index, token_index)
token_to_sequence
< 源码 >( batch_or_token_index: int token_index: int | None = None ) → int
获取给定标记所代表的序列的索引。在一般使用场景中,此方法对于单个序列或一对序列中的第一个序列返回 0,对于一对序列中的第二个序列返回 1
调用方式
- 如果批次大小为 1,则使用
self.token_to_sequence(token_index) - 如果批次大小大于 1,则使用
self.token_to_sequence(batch_index, token_index)
此方法特别适用于输入序列作为预分词序列提供的情况(即,单词由用户定义)。在这种情况下,它允许轻松地将已编码的标记与提供的已分词单词关联起来。
token_to_word
< 源码 >( batch_or_token_index: int token_index: int | None = None ) → int
获取批次序列中对应(即包含)于已编码标记的单词索引。
调用方式
- 如果批次大小为 1,则使用
self.token_to_word(token_index) - 如果批次大小大于 1,则使用
self.token_to_word(batch_index, token_index)
此方法特别适用于输入序列作为预分词序列提供的情况(即,单词由用户定义)。在这种情况下,它允许轻松地将已编码的标记与提供的已分词单词关联起来。
tokens
< 源码 >( batch_index: int = 0 ) → list[str]
返回给定批次索引处的标记列表(单词/子词拆分后以及转换为整数索引之前,输入字符串的子部分)(仅适用于快速分词器的输出)。
word_ids
< 源码 >( batch_index: int = 0 ) → list[Optional[int]]
返回一个列表,将标记映射到快速分词器的初始句子中的实际单词。
word_to_chars
< 源码 >( batch_or_word_index: int word_index: int | None = None sequence_index: int = 0 ) → CharSpan 或 list[CharSpan]
参数
- batch_or_word_index (
int) — 批次中序列的索引。如果批次只包含一个序列,则这可以是序列中单词的索引。 - word_index (
int, 可选) — 如果在 batch_or_token_index 中提供了批次索引,则此参数可以是序列中单词的索引。 - sequence_index (
int, 可选,默认为 0) — 如果批次中编码了一对序列,则该参数可用于指定提供的单词索引属于该对中的哪个序列(0 或 1)。
返回
CharSpan 或 list[CharSpan]
原始字符串中相关字符的跨度(Span)。CharSpan 是一个具有以下属性的 NamedTuple:
- start:原始字符串中与 token 相关的第一个字符的索引
- end:原始字符串中与 token 相关的最后一个字符之后的字符索引
获取原始字符串中与批次序列中给定单词对应的字符跨度。
字符跨度以 CharSpan NamedTuple 的形式返回,包含:
- start:原始字符串中第一个字符的索引
- end:原始字符串中最后一个字符之后的字符索引
调用方式
self.word_to_chars(word_index)(如果批次大小为 1)self.word_to_chars(batch_index, word_index)(如果批次大小大于或等于 1)
word_to_tokens
< 源码 >( batch_or_word_index: int word_index: int | None = None sequence_index: int = 0 ) → (TokenSpan, 可选)
参数
- batch_or_word_index (
int) — 批次中序列的索引。如果批次只包含一个序列,则这可以是序列中单词的索引。 - word_index (
int, 可选) — 如果在 batch_or_token_index 中提供了批次索引,则此参数可以是序列中单词的索引。 - sequence_index (
int, 可选,默认为 0) — 如果批次中编码了一对序列,则该参数可用于指定提供的单词索引属于该对中的哪个序列(0 或 1)。
返回
(TokenSpan, 可选)
编码序列中的 token 跨度。如果没有任何 token 对应于该单词,则返回 None。这种情况通常发生在 token 是用于格式化分词的特殊 token 时。例如,当我们在分词的最开头添加一个类 token(class token)时。
获取对应于批次序列中单词的编码 token 跨度。
Token 跨度以 TokenSpan 的形式返回,包含:
- start — 第一个 token 的索引。
- end — 最后一个 token 之后的 token 索引。
调用方式
self.word_to_tokens(word_index, sequence_index: int = 0)(如果批次大小为 1)self.word_to_tokens(batch_index, word_index, sequence_index: int = 0)(如果批次大小大于或等于 1)
当输入序列作为预分词序列提供时(即用户定义了单词),此方法特别适用。在这种情况下,它允许轻松将编码的标记与提供的预分词单词相关联。