分词器实用工具
此页面列出了分词器所使用的全部实用函数,主要是实现了 PreTrainedTokenizer 和 PreTrainedTokenizerFast 之间通用方法的类 PreTrainedTokenizerBase。
这些内容通常只在你研究库中分词器(tokenizers)的代码时才有用。
PreTrainedTokenizerBase
class transformers.PreTrainedTokenizerBase
< source >( **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],可选) — 模型前向传播接受的输入列表(例如"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,可选) — 表示被掩码 token 的特殊 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', '>']。
所有分词器后端的基类。
类属性(由派生类重写)
- 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__
< source >( text: TextInput | PreTokenizedInput | list[TextInput] | list[PreTokenizedInput] | None = Nonetext_pair: TextInput | PreTokenizedInput | list[TextInput] | list[PreTokenizedInput] | None = Nonetext_target: TextInput | PreTokenizedInput | list[TextInput] | list[PreTokenizedInput] | None = Nonetext_pair_target: TextInput | PreTokenizedInput | list[TextInput] | list[PreTokenizedInput] | None = Noneadd_special_tokens: bool = Truepadding: bool | str | PaddingStrategy = Falsetruncation: bool | str | TruncationStrategy | None = Nonemax_length: int | None = Nonestride: int = 0is_split_into_words: bool = Falsepad_to_multiple_of: int | None = Nonepadding_side: str | None = Nonereturn_tensors: str | TensorType | None = Nonereturn_token_type_ids: bool | None = Nonereturn_attention_mask: bool | None = Nonereturn_overflowing_tokens: bool = Falsereturn_special_tokens_mask: bool = Falsereturn_offsets_mapping: bool = Falsereturn_length: bool = Falseverbose: bool = Truetokenizer_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], 可选) — 传递给 tokenizer 的额外 kwargs。这些 kwargs 将与显式参数及其他 kwargs 合并,其中显式参数具有更高的优先级。 - 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指定的最大长度,或者如果未提供该参数,则截断至模型可接受的最大输入长度。这将逐个 token 进行截断,如果提供了一对序列(或一批序列对),则会从该对中最长的序列中移除一个 token。'only_first':截断至由参数max_length指定的最大长度,或者在未提供该参数时,截断至模型可接受的最大输入长度。如果提供了一对序列(或一批序列对),则仅截断其中的第一个序列。'only_second':截断至由参数max_length指定的最大长度,或者如果未提供该参数,则截断至模型可接受的最大输入长度。仅当提供了一对序列(或一批序列对)时,才会截断其中的第二个序列。False或'do_not_truncate'(默认值):不进行截断(即,可以输出序列长度大于模型最大可接受输入大小的批次)。
- max_length (
int, 可选) — 控制截断/填充参数之一所使用的最大长度。如果未设置或设置为 None,则当截断/填充参数需要最大长度时,将使用预定义的最大模型长度。如果模型没有特定的最大输入长度(如 XLNet),则禁用截断/填充到最大长度的功能。如果未设置或设置为
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, 可选) — 如果设置,将返回张量而不是 Python 整数列表。可接受的值为:'pt':返回 PyTorchtorch.Tensor对象。'np':返回 Numpynp.ndarray对象。
- return_token_type_ids (
bool, 可选) — 是否返回 token type ID。如果保持默认值,将根据特定分词器的默认设置返回 token type ID,该设置由return_outputs属性定义。 - return_attention_mask (
bool, 可选) — 是否返回注意力掩码。如果保持默认值,将根据特定分词器的默认设置返回注意力掩码,该设置由return_outputs属性定义。 - return_overflowing_tokens (
bool,可选,默认为False) — 是否返回溢出的 token 序列。如果提供了输入 id 的序列对(或序列对批次),且truncation_strategy = longest_first或True,则会抛出错误,而不是返回溢出的 token。 - return_special_tokens_mask (
bool,可选,默认为False) — 是否返回特殊 token 掩码信息。 - return_offsets_mapping (
bool, 可选, 默认为False) — 是否返回(char_start, char_end)每个 token 的。此功能仅在继承自 PreTrainedTokenizerFast 的快速分词器上可用。如果使用 Python 分词器,此方法将抛出
NotImplementedError。 - return_length (
bool,可选,默认为False) — 是否返回编码后输入的长度。 - verbose (
bool,可选,默认为True) — 是否打印更多信息和警告。 - **kwargs — 传递给
self.tokenize()方法
返回值
一个包含以下字段的 BatchEncoding:
-
input_ids — 要输入模型的 token id 列表。
-
token_type_ids — 要输入模型的 token 类型 ID 列表(当
return_token_type_ids=True或self.model_input_names中包含 “token_type_ids” 时)。 -
attention_mask — 索引列表,指定模型应关注哪些 token(当
return_attention_mask=True或 “attention_mask” 位于self.model_input_names中时)。 -
overflowing_tokens — 溢出 token 序列的列表(当指定了
max_length且return_overflowing_tokens=True时)。 -
num_truncated_tokens — 被截断的 token 数量(当指定了
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_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 的索引来测试)。bos_token,eos_token,unk_token,sep_token,pad_token,cls_token,mask_token,extra_special_tokens].只有当 Token 尚未存在于词汇表中时(通过检查分词器是否为其分配了
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 等)的字典添加到编码器中,并将其链接到类属性。如果特殊标记不在词汇表中,则将其添加到词汇表中(索引从当前词汇表的最后一个索引开始)。
在向词汇表中添加新 token 时,您应确保同时调整模型的 token 嵌入矩阵大小,使其嵌入矩阵与分词器相匹配。
为此,请使用 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>"add_tokens
< source >( new_tokens: str | AddedToken | Sequence[str | AddedToken]special_tokens: bool = False ) → int
参数
- new_tokens (
str、tokenizers.AddedToken或 str 或tokenizers.AddedToken的序列) — 仅当这些 token 尚未存在于词表中时,才会将其添加进去。tokenizers.AddedToken用于封装字符串 token,以便自定义其行为:例如该 token 是否仅匹配单个单词、是否应去除左侧所有可能的空白字符、是否应去除右侧所有可能的空白字符等。 - special_tokens(
bool,可选,默认为False)— 指定该 token 是否为特殊 token。这主要会改变归一化行为。 有关tokenizers.AddedToken的详细信息,请参阅 HuggingFace tokenizers 库。
返回值
int
添加到词汇表中的标记数量。
#TODO 从此处移除!PreTrainedTokenizerBase 应当与 AddedToken 无关。
添加新标记列表。如果新标记不在词汇表中,它们将被追加到末尾。因此,添加的标记与分词算法词汇表中的标记不会以相同方式处理。
使用
prepend_scheme="always"(例如 NLLB)的Metaspace预分词器,会在添加的 token 之后的文本前添加"▁"。执行tokenizer.add_tokens(["abcd"])后,"abcdgym"会被分词为["abcd", "▁gym"],并解码为"abcd gym"。如果添加的 token 可能出现在单词内部,请切换预分词器
示例:
# 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))apply_chat_template
< source >( conversation: list[dict[str, str]] | list[list[dict[str, str]]]tools: list[dict | Callable] | None = Nonedocuments: list[dict[str, str]] | None = Nonechat_template: str | None = Noneadd_generation_prompt: bool = Falsecontinue_final_message: bool | str = Falsetokenize: bool = Truesanitize_control_tokens: bool = Falsepadding: bool | str | PaddingStrategy = Falsetruncation: bool = Falsemax_length: int | None = Nonereturn_tensors: str | TensorType | None = Nonereturn_dict: bool = Truereturn_assistant_tokens_mask: bool = Falsetokenizer_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, 可选) — 如果设置此参数,将在格式化输出的末尾追加一个包含指示助手消息起始的 token 的提示。当您希望从模型生成回复时,此参数非常有用。 请注意,此参数会传递给聊天模板,因此模板必须支持该参数,此参数才能生效。
- continue_final_message (bool 或 str,可选) —
如果设置了此参数,聊天将被格式化,使得聊天中的最后一条消息是开放式的,不包含任何 EOS token。模型将继续该消息,而不是开始一条新消息。这允许你“预填充”模型响应的一部分。如果传入字符串,它将用作要续写的字段的键(例如 “reasoning_content”)。不能与
add_generation_prompt同时使用。 - tokenize (
bool,默认为True) — 是否对输出进行分词。如果为False,输出将是一个字符串。 - sanitize_control_tokens (
bool,默认为False) — 如果设置为 True,则出现在消息、工具、文档或作为**kwargs传递的模板变量中的控制标记将被编码为普通文本,因此只有由聊天模板本身写入的控制标记才会被编码为标记。控制标记包括 分词器的特殊标记,以及tokenizer.chat_control_tokens中的已添加标记。如果未设置该 变量,则从出现在聊天模板文本和字符串字面量中的已添加标记推断控制标记。仅对整个控制标记进行清理,因此如果模板将 输入中的字符串拼接成控制标记(例如'<|' + message['role'] + '|>'),则必须单独验证这些字符串。字典键也不会被清理。 - 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],可选):传递给 tokenizer 的额外 kwargs。 - return_assistant_tokens_mask (
bool,默认为False) — 是否返回助手生成 token 的掩码。对于助手生成的 token,掩码中对应位置为 1;对于用户和系统 token,掩码中对应位置为 0。 此功能仅适用于通过{% generation %}关键字支持该功能的聊天模板。 - **kwargs — 传递给模板渲染器的额外 kwargs。聊天模板可以访问这些参数。
返回值
Union[list[int], Dict]
一个令牌 ID 列表,表示迄今为止已分词的聊天内容,包括控制令牌。此输出可直接传递给模型,或通过 generate() 等方法进行传递。如果设置了 return_dict,则返回一个包含分词器输出的字典。
将包含 "role" 和 "content" 键的字典列表转换为 token id 列表。此方法旨在与聊天模型配合使用,它会读取分词器的 chat_template 属性,以确定转换时所使用的格式和控制 token。
batch_decode
< source >( sequences: list[int] | list[list[int]] | np.ndarray | torch.Tensorskip_special_tokens: bool = Falseclean_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,将 token id 的列表的列表转换为字符串列表。
此方法是为了向后兼容而提供的。decode 方法现在原生支持批量输入,因此您可以直接使用 decode 而无需使用 batch_decode。
清理给定文本中的分词空格。 此方法主要用于远程代码支持。
convert_ids_to_tokens
< source >( ids: int | list[int]skip_special_tokens: bool = False ) → str or list[str]
使用词汇表和添加的 token,将单个索引或 token 序列中的索引序列转换为对应的 token 或 token 序列。
convert_tokens_to_ids
< source >( tokens: str | list[str] ) → int or list[int]
使用词汇表将单个 token 字符串(或 token 序列)转换为单个整数 id(或 id 序列)。
convert_tokens_to_string
< source >( tokens: list[str] ) → str
将单个字符串中的一系列 token 进行转换。最简单的方式是 " ".join(tokens),但我们通常希望同时去除子词分词产生的伪影。
decode
< source >( token_ids: int | list[int] | list[list[int]] | np.ndarray | torch.Tensorskip_special_tokens: bool = False**kwargs ) → Union[str, list[str]]
使用分词器和词汇表将 id 序列转换为字符串,或将序列列表转换为字符串列表,并支持移除特殊标记和清理分词空格等选项。
类似于执行 self.convert_tokens_to_string(self.convert_ids_to_tokens(token_ids))。
encode
< source >( text: TextInput | PreTokenizedInput | EncodedInputtext_pair: TextInput | PreTokenizedInput | EncodedInput | None = Noneadd_special_tokens: bool = Truepadding: bool | str | PaddingStrategy = Falsetruncation: bool | str | TruncationStrategy | None = Nonemax_length: int | None = Nonestride: int = 0padding_side: str | None = Nonereturn_tensors: str | TensorType | None = None**kwargs ) → list[int], torch.Tensor, or np.ndarray
参数
- text (
str、list[str]或list[int]) — 要编码的第一个序列。它可以是一个字符串、一个字符串列表(使用tokenize方法分词后的字符串)或一个整数列表(使用convert_tokens_to_ids方法得到的分词字符串 ID)。 - text_pair(
str、list[str]或list[int],可选)— 要编码的可选第二个序列。它可以是一个字符串、一个字符串列表(使用tokenize方法分词后的字符串)或一个整数列表(使用convert_tokens_to_ids方法得到的分词字符串 ID)。 - 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指定的最大长度,或者如果未提供该参数,则截断至模型可接受的最大输入长度。这将逐个 token 进行截断,如果提供了一对序列(或一批序列对),则会从该对中最长的序列中移除一个 token。'only_first':截断至由参数max_length指定的最大长度,或者在未提供该参数时,截断至模型可接受的最大输入长度。如果提供了一对序列(或一批序列对),则仅截断其中的第一个序列。'only_second':截断至由参数max_length指定的最大长度,或者如果未提供该参数,则截断至模型可接受的最大输入长度。仅当提供了一对序列(或一批序列对)时,才会截断其中的第二个序列。False或'do_not_truncate'(默认值):不进行截断(即,可以输出序列长度大于模型最大可接受输入大小的批次)。
- max_length (
int, 可选) — 控制截断/填充参数之一所使用的最大长度。如果未设置或设置为 None,则当截断/填充参数需要最大长度时,将使用预定义的最大模型长度。如果模型没有特定的最大输入长度(如 XLNet),则禁用截断/填充到最大长度的功能。如果未设置或设置为
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, 可选) — 如果设置,将返回张量而不是 Python 整数列表。可接受的值为:'pt':返回 PyTorchtorch.Tensor对象。'np':返回 Numpynp.ndarray对象。
- **kwargs — 传递给
.tokenize()方法。
返回值
list[int]、torch.Tensor 或 np.ndarray
文本的标记化 ID。
使用分词器和词汇表将字符串转换为 id(整数)序列。
与执行 self.convert_tokens_to_ids(self.tokenize(text)) 相同。
encode_message_with_chat_template
< source >( message: dict[str, str]conversation_history: list[dict[str, str]] | None = None**kwargs ) → list[int]
对单条消息进行分词。此方法是 apply_chat_template 的便捷封装,允许您逐条对消息进行分词。这对于逐 token 流式传输等场景非常有用。
此方法不保证完美。对于某些模型,可能无法稳健地对单条消息进行分词。例如,如果聊天模板在每条消息后添加 token,但同时还有一个添加到整个聊天开头的 prefix,那么将无法区分聊天起始 token 和消息起始 token。
在这些情况下,此方法会尽力找到正确的分词方式,但可能并不完美。注意: 此方法不支持 add_generation_prompt。如果您想添加生成提示,应在对对话进行分词后单独执行此操作。
from_pretrained
< source >( pretrained_model_name_or_path: str | os.PathLike*init_inputscache_dir: str | os.PathLike | None = Noneforce_download: bool = Falselocal_files_only: bool = Falsetoken: str | bool | None = Nonerevision: str = 'main'trust_remote_code = False**kwargs )
参数
- pretrained_model_name_or_path (
str或os.PathLike) — 可以是以下之一:- 一个字符串,即托管在 huggingface.co 上某个模型仓库中的预定义分词器的 model id。
- 指向一个目录的路径,该目录包含分词器所需的词汇文件,例如使用 save_pretrained() 方法保存的文件,如
./my_model_directory/。 - (已弃用,不适用于所有派生类) 指向单个已保存词汇表文件的路径(仅当分词器只需要一个词汇表文件时,例如 Bert 或 XLNet),例如
./my_model_directory/vocab.txt。
- cache_dir (
str或os.PathLike,可选) — 如果不应使用标准缓存,则下载的预定义分词器词汇文件应缓存到的目录路径。 - force_download (
bool,可选,默认为False) — 是否强制(重新)下载词汇表文件,并在缓存版本已存在时覆盖它们。 - proxies (
dict[str, str],可选) — 按协议或端点使用的代理服务器字典,例如{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}。每次请求都会使用这些代理。 - token(
str或 bool,可选)— 用于远程文件的 HTTP 承载者授权令牌。如果为True,则使用运行hf auth login时生成的令牌(存储在~/.huggingface中)。 - local_files_only(
bool,可选,默认为False)— 是否仅依赖本地文件,而不尝试下载任何文件。 - revision (
str,可选,默认为"main") — 要使用的特定模型版本。由于我们在 huggingface.co 上使用基于 git 的系统来存储模型和其他工件,因此它可以是分支名称、标签名称或提交 id,revision可以是 git 允许的任何标识符。 - subfolder (
str, 可选) — 如果相关文件位于 huggingface.co 上模型仓库的子文件夹中(例如 facebook/rag-token-base),请在此处指定。 - inputs(额外的位置参数,可选)—
将传递给 Tokenizer 的
__init__方法。 - trust_remote_code (
bool,可选,默认为False) — 是否允许使用在 Hub 上以自定义建模文件定义的模型。此选项仅应为您信任且已阅读过其代码的仓库设置为True,因为它会在您的本地机器上执行 Hub 上存在的代码。 - kwargs(额外的关键字参数,可选) —
将传递给 Tokenizer 的
__init__方法。可用于设置特殊标记,例如bos_token、eos_token、unk_token、sep_token、pad_token、cls_token、mask_token、extra_special_tokens。有关更多详细信息,请参阅__init__中的参数。
从预定义的 tokenizer 实例化一个 PreTrainedTokenizerBase(或其派生类)。
若要使用私有模型,必须传入
token=True。
示例:
# We can't instantiate directly the base class *PreTrainedTokenizerBase* so let's show our examples on a derived class: BertTokenizer
# Download vocabulary from huggingface.co and cache.
tokenizer = BertTokenizer.from_pretrained("google-bert/bert-base-uncased")
# Download vocabulary from huggingface.co (user-uploaded) and cache.
tokenizer = BertTokenizer.from_pretrained("dbmdz/bert-base-german-cased")
# If vocabulary files are in a directory (e.g. tokenizer was saved using *save_pretrained('./test/saved_model/')*)
tokenizer = BertTokenizer.from_pretrained("./test/saved_model/")
# If the tokenizer uses a single vocabulary file, you can point directly to this file
tokenizer = BertTokenizer.from_pretrained("./test/saved_model/my_vocab.txt")
# You can link tokens to special vocabulary when instantiating
tokenizer = BertTokenizer.from_pretrained("google-bert/bert-base-uncased", unk_token="<unk>")
# You should be sure '<unk>' is in the vocabulary when doing that.
# Otherwise use tokenizer.add_special_tokens({'unk_token': '<unk>'}) instead)
assert tokenizer.unk_token == "<unk>"get_chat_template
< source >( chat_template: str | None = Nonetools: list[dict] | None = None ) → str
参数
- chat_template (
str, 可选) — 用于此转换的 Jinja 模板或模板名称。 通常无需为此参数传入任何值,因为默认会使用模型的模板。 - tools (
list[Dict], 可选) — 模型可访问的工具(可调用函数)列表。如果模板不支持函数调用,此参数将不生效。每个工具应以 JSON Schema 形式传入,提供该工具的名称、描述和参数类型。更多信息请参阅我们的 聊天模板指南 。
返回值
str
聊天模板字符串。
获取用于对聊天消息进行分词的聊天模板字符串。该模板在 apply_chat_template 方法内部使用,也可在外部使用以获取模型的聊天模板,从而更好地跟踪生成过程。
get_response_parser
< source >( response_template: dict | None = Noneprefix: str | list[int] | np.ndarray | torch.Tensor | None = Nonetools: list[dict | Callable] | None = None )
返回一个有状态的 ResponseParser,用于增量解析流式响应。除非被覆盖,否则使用分词器的 response_template 属性。
prefix(字符串、token id 列表或一维张量)为必填项:流会在由聊天提示上下文所隐含的状态下初始化(在规范中的 start_anchor 之后进行右截断),因此通过 stream.feed() 传入的生成片段能够被正确分类,即使聊天模板输出了助手回合的内容(例如 <think>\n)且模型从中继续生成。若省略该参数将引发异常;如果流确实是从一个干净的助手回合开始,请传入 prefix="" 以选择退出。
tools (list[Union[Dict, Callable]],可选):模型可用的工具,格式与 apply_chat_template 接受的格式相同。设置后,每当一个区域关闭时,工具调用参数会根据调用工具的 JSON schema 进行类型转换,因此流式 region_close 事件将携带带类型的参数。
get_special_tokens_mask
< source >( token_ids_0: list[int]token_ids_1: list[int] | None = Nonealready_has_special_tokens: bool = False ) → A list of integers in the range [0, 1]
从未添加特殊标记的标记列表中检索序列 ID。
对于快速分词器,数据整理器会传入 already_has_special_tokens=True 来调用此方法,以在已格式化的序列上构建掩码。在这种情况下,我们通过检查元素是否属于 all_special_ids 来计算掩码。
返回一个从 token 到索引的字典形式的词汇表。
当 token 在词表中时,tokenizer.get_vocab()[token] 与 tokenizer.convert_tokens_to_ids(token) 等价。
填充
< source >( encoded_inputs: BatchEncoding | list[BatchEncoding] | dict[str, EncodedInput] | dict[str, list[EncodedInput]] | list[dict[str, EncodedInput]]padding: bool | str | PaddingStrategy = Truemax_length: int | None = Nonepad_to_multiple_of: int | None = Nonepadding_side: str | None = Nonereturn_attention_mask: bool | None = Nonereturn_tensors: str | TensorType | None = Noneverbose: bool = True )
参数
- encoded_inputs (BatchEncoding, BatchEncoding 列表 BatchEncoding,
dict[str, list[int]],dict[str, list[list[int]]或list[dict[str, list[int]]]) — 分词后的输入。可以表示单个输入(BatchEncoding 或dict[str, list[int]]) )或一批分词后的输入( BatchEncoding, dict[str, list[list[int]]] 或 list[dict[str, list[int]]]) 因此,您可以在预处理阶段以及 PyTorch Dataloader 的 collate 函数中使用此方法。您可以使用张量(NumPy 数组或 PyTorch 张量)代替
list[int],有关返回类型,请参阅上方的说明。 - padding (
bool,str或 PaddingStrategy, 可选, 默认为True) — 选择一种策略,用于对返回的序列进行填充(根据模型的填充方向和填充索引),可选策略如下:True或'longest'(默认值):填充至批次中最长的序列(如果仅提供单个序列,则不进行填充)。'max_length':填充至由参数max_length指定的最大长度;若未提供该参数,则填充至模型可接受的最大输入长度。False或'do_not_pad':不进行填充(即可以输出包含不同长度序列的批次)。
- max_length (
int,可选) — 返回列表的最大长度,以及可选的填充长度(见上文)。 - pad_to_multiple_of (
int, 可选) — 如果设置,则将序列填充为所提供值的倍数。这在启用 NVIDIA 硬件(计算能力
>= 7.5,即 Volta 架构)上的 Tensor Cores 使用时尤为有用。 - padding_side (
str, 可选) — 模型应应用填充的一侧。应在 [‘right’, ‘left’] 之间进行选择。 默认值取自同名的类属性。 - return_attention_mask (
bool, 可选) — 是否返回注意力掩码。如果保持默认值,将根据特定分词器的默认设置返回注意力掩码,该设置由return_outputs属性定义。 - return_tensors (
str或 TensorType, 可选) — 如果设置,将返回张量而不是 Python 整数列表。可接受的值为:'pt':返回 PyTorchtorch.Tensor对象。'np':返回 Numpynp.ndarray对象。
- verbose (
bool,可选,默认为True) — 是否打印更多信息和警告。
将单个编码输入或一批编码输入填充至预定义长度或该批次中的最大序列长度。
填充侧(left/right)的填充 token id 在分词器层面定义(通过 self.padding_side、self.pad_token_id 和 self.pad_token_type_id)。
请注意,对于快速分词器,使用 __call__ 方法比先调用编码文本的方法,再调用 pad 方法以获取填充后的编码要更快。
如果传入的
encoded_inputs是 numpy 数组字典或 PyTorch 张量,除非通过return_tensors指定了其他张量类型,否则结果将使用相同的类型。对于 PyTorch 张量,您将会丢失张量所在的具体设备信息。
parse_response
< source >( response: str | list[int] | list[str] | list[list[int]] | np.ndarray | torch.Tensorschema: dict | None = Noneprefix: str | list[int] | list[str] | list[list[int]] | np.ndarray | torch.Tensor | None = Nonetools: list[dict | Callable] | None = None )
参数
- response (
str、token ids、1D/2D tensor,或这些类型的列表) — 模型生成的输出。可以是解码后的文本或 token ids,形式为单个序列(str/list[int]/ 1D 数组 / 1D tensor)或一个批次(list[str]/list[list[int]]/ 2D 数组 / 2D tensor)。请注意,此处应仅包含模型输出,不应包含任何前置的提示文本(提示文本应放在prefix中)。 - schema (
dict, 可选) — 响应模板,用于指示预期的输出格式以及应如何执行解析。如果未提供,将使用分词器的response_template属性。 - prefix (
str、token ids、1D/2D tensor,或这些类型的列表) — 生成之前的提示词。由于许多聊天模板会预先写入消息的一部分,因此需要查看提示词才能正确解析。对于批处理的response,可以传入单个前缀(广播到每个条目)或为每个条目传入一个前缀。 - tools (
list[Union[Dict, Callable]],可选) — 模型可用的工具,格式与apply_chat_template接受的格式相同。 传入时,工具调用参数会根据调用工具的 JSON schema 进行类型转换: 对于整数参数,"7"会变为7;对于字符串参数,则保持为"7"。
将模型生成文本所产生的输出字符串转换为解析后的消息字典。
此方法旨在与聊天模型配合使用,除非直接传入 schema 参数,否则它将读取分词器的 response_template 属性来控制解析。
接受单个序列或一个批次。单个序列(一个字符串,或一个一维的 token id 序列)返回一个解析后的消息 dict;一个批次(一个字符串列表、一个 token id 序列列表,或一个二维张量 / 数组)返回一个解析后的消息字典 list,每个元素对应一项。
push_to_hub
< source >( repo_id: strcommit_message: str | None = Nonecommit_description: str | None = Noneprivate: bool | None = Nonetoken: bool | str | None = Nonerevision: str | None = Nonecreate_pr: bool = Falsemax_shard_size: int | str | None = '50GB'tags: list[str] | None = None )
参数
- repo_id (
str) — 要推送分词器(tokenizer)的仓库名称。推送到特定组织时,应包含该组织的名称。 - commit_message (
str, 可选) — 推送时提交的提交信息。默认值为"Upload tokenizer"。 - commit_description (
str, 可选) — 将创建的提交的描述 - private (
bool,可选) — 是否将仓库设为私有。如果为None(默认值),除非组织的默认设置为私有,否则仓库将是公开的。如果仓库已存在,则忽略此值。 - token (
bool或str,可选) — 用于远程文件的 HTTP bearer 授权令牌。如果为True(默认值),将使用运行hf auth login时生成的令牌(存储在~/.huggingface中)。 - revision (
str, 可选) — 要推送上传文件的目标分支。 - create_pr (
bool,可选,默认为False) — 是否使用上传的文件创建 PR,还是直接提交。 - max_shard_size (
int或str,可选,默认为"50GB") — 仅适用于模型。分片前检查点的最大大小。分片后的每个检查点大小都将小于该值。如果以字符串形式表示,则必须为数字后跟单位(例如"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")register_for_auto_class
< source >( auto_class = 'AutoTokenizer' )
将此注册到指定的 auto 类。此操作仅适用于自定义分词器,因为库中的分词器已经与 AutoTokenizer 进行了映射。
save_chat_templates
< source >( save_directory: str | os.PathLiketokenizer_config: dictfilename_prefix: str | Nonesave_jinja_files: bool )
如果使用的是新格式,则将聊天模板写入保存目录,并在 tokenizer 配置中移除它们(如果存在)。如果使用的是旧格式,则不写入任何文件,而是将模板以正确的格式写入 tokenizer 配置。
save_pretrained
< source >( save_directory: str | os.PathLikelegacy_format: bool | None = Nonefilename_prefix: str | None = Nonepush_to_hub: bool = False**kwargs ) → A tuple of str
参数
- save_directory (
str或os.PathLike) — 用于保存分词器的目录路径。 - legacy_format (
bool, 可选) — 仅适用于快速分词器。如果未设置(默认值),则同时以统一 JSON 格式和旧版格式(如果存在)保存分词器,即包含分词器特定的词汇表以及单独的 added_tokens 文件。如果
False,则仅以统一的 JSON 格式保存分词器。该格式与“慢速”分词器(未由 tokenizers 库提供支持)不兼容,因此无法在对应的“慢速”分词器中加载该分词器。如果
True,将以旧版格式保存分词器。如果“slow”分词器不存在,则会引发值错误。 - filename_prefix (
str, 可选) — 为分词器保存的文件名添加的前缀。 - push_to_hub (
bool,可选,默认为False) — 是否在保存模型后将其推送到 Hugging Face 模型库。您可以使用repo_id指定要推送到的仓库(默认使用您命名空间中save_directory的名称)。 - kwargs (
dict[str, Any],可选) — 传递给 push_to_hub() 方法的额外关键字参数。
返回值
str 的元组
已保存的文件。
保存完整的分词器状态。
此方法确保完整的分词器随后可以使用 ~tokenization_utils_base.PreTrainedTokenizer.from_pretrained 类方法重新加载。
Warning,None 这不会保存你在实例化后对分词器所做的任何修改(例如,在创建后修改 tokenizer.do_lower_case)。
save_vocabulary
< source >( save_directory: strfilename_prefix: str | None = None ) → tuple(str)
仅保存分词器的词表(词表 + 新增 token)。
此方法不会保存分词器的配置和特殊标记映射。请使用 _save_pretrained() 来保存分词器的完整状态。
tokenize
< source >( text: strpair: str | None = Noneadd_special_tokens: bool = False**kwargs ) → list[str]
参数
- text (
str) — 要编码的序列。 - pair (
str, optional) — 要与第一个序列一起编码的第二个序列。 - add_special_tokens (
bool,可选,默认为False) — 是否添加与对应模型关联的特殊标记。 - kwargs(额外的关键字参数,可选) — 将传递给底层模型特定的 encode 方法。详情请参见 call()
返回值
list[str]
令牌列表。
将字符串转换为 token 序列,并将未知 token 替换为 unk_token。
枚举和命名元组
class transformers.tokenization_utils_base.TruncationStrategy
< source >( valuenames = Nonemodule = Nonequalname = Nonetype = Nonestart = 1boundary = None )
PreTrainedTokenizerBase.call() 中 truncation 参数的可能取值。便于在 IDE 中进行 Tab 补全。
class transformers.CharSpan
< source >( start: ForwardRef('int')end: ForwardRef('int') )
原始字符串中的字符跨度。
class transformers.TokenSpan
< source >( start: ForwardRef('int')end: ForwardRef('int') )
编码字符串中的 Token 跨度(Token 列表)。