Transformers 文件
分詞器實用工具
並獲得增強的文件體驗
開始使用
分詞器實用工具
本頁列出了分詞器使用的所有實用函式,主要是實現了 PreTrainedTokenizer 和 PreTrainedTokenizerFast 之間通用方法的 PreTrainedTokenizerBase 類以及混入類 SpecialTokensMixin。
這些大部分只有在您研究庫中分詞器程式碼時才有用。
PreTrainedTokenizerBase
class transformers.PreTrainedTokenizerBase
< 來源 >( **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
, 可選) — 表示句子開頭的特殊 token。將與self.bos_token
和self.bos_token_id
關聯。 - eos_token (
str
或tokenizers.AddedToken
, 可選) — 表示句子結束的特殊 token。將與self.eos_token
和self.eos_token_id
關聯。 - unk_token (
str
或tokenizers.AddedToken
, 可選) — 表示詞彙表外 token 的特殊 token。將與self.unk_token
和self.unk_token_id
關聯。 - sep_token (
str
或tokenizers.AddedToken
, 可選) — 用於分隔同一輸入中兩個不同句子的特殊 token(例如 BERT 使用)。將與self.sep_token
和self.sep_token_id
關聯。 - pad_token (
str
或tokenizers.AddedToken
, 可選) — 用於批處理時使 token 陣列大小相同的特殊 token。隨後將被注意力機制或損失計算忽略。將與self.pad_token
和self.pad_token_id
關聯。 - cls_token (
str
或tokenizers.AddedToken
, 可選) — 表示輸入類別的特殊 token(例如 BERT 使用)。將與self.cls_token
和self.cls_token_id
關聯。 - mask_token (
str
或tokenizers.AddedToken
, 可選) — 表示被掩碼 token 的特殊 token(例如 BERT 使用掩碼語言建模預訓練目標)。將與self.mask_token
和self.mask_token_id
關聯。 - additional_special_tokens (
str
或tokenizers.AddedToken
的元組或列表, 可選) — 額外的特殊 token 的元組或列表。在此處新增它們以確保在解碼時skip_special_tokens
設定為 True 時跳過它們。如果它們不是詞彙表的一部分,它們將被新增到詞彙表的末尾。 - clean_up_tokenization_spaces (
bool
, 可選, 預設為True
) — 模型是否應該清理在分詞過程中分割輸入文字時新增的空格。 - split_special_tokens (
bool
, 可選, 預設為False
) — 特殊 token 是否應該在分詞過程中被分割。傳遞此引數將影響分詞器的內部狀態。預設行為是不分割特殊 token。這意味著如果<s>
是bos_token
,那麼tokenizer.tokenize("<s>") = ['<s>']
。否則,如果split_special_tokens=True
,那麼tokenizer.tokenize("<s>")
將給出['<','s', '>']
。
PreTrainedTokenizer 和 PreTrainedTokenizerFast 的基類。
處理這兩個類之間共享的(主要是樣板)方法。
類屬性(由派生類覆蓋)
- 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: typing.Union[str, list[str], list[list[str]], NoneType] = None text_pair: typing.Union[str, list[str], list[list[str]], NoneType] = None text_target: typing.Union[str, list[str], list[list[str]], NoneType] = None text_pair_target: typing.Union[str, list[str], list[list[str]], NoneType] = None add_special_tokens: bool = True padding: typing.Union[bool, str, transformers.utils.generic.PaddingStrategy] = False truncation: typing.Union[bool, str, transformers.tokenization_utils_base.TruncationStrategy, NoneType] = None max_length: typing.Optional[int] = None stride: int = 0 is_split_into_words: bool = False pad_to_multiple_of: typing.Optional[int] = None padding_side: typing.Optional[str] = None return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None return_token_type_ids: typing.Optional[bool] = None return_attention_mask: typing.Optional[bool] = None return_overflowing_tokens: bool = False return_special_tokens_mask: bool = False return_offsets_mapping: bool = False return_length: bool = False verbose: bool = True **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
(以消除與序列批次的歧義)。 - add_special_tokens (
bool
, 可選, 預設為True
) — 編碼序列時是否新增特殊 token。這將使用底層的PretrainedTokenizerBase.build_inputs_with_special_tokens
函式,該函式定義了哪些 token 會自動新增到輸入 ID 中。如果您希望自動新增bos
或eos
token,此功能非常有用。 - 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, 可選) — 如果設定,將返回張量而不是 Python 整數列表。可接受的值為:'tf'
:返回 TensorFlowtf.constant
物件。'pt'
:返回 PyTorchtorch.Tensor
物件。'np'
:返回 Numpynp.ndarray
物件。
- return_token_type_ids (
bool
, 可選) — 是否返回 token 型別 ID。如果保留預設值,將根據特定分詞器的預設值返回 token 型別 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
) — 是否返回每個 token 的(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
時)
將一個或多個序列或一對或多對序列標記化並準備用於模型的主要方法。
apply_chat_template
< 來源 >( conversation: typing.Union[list[dict[str, str]], list[list[dict[str, str]]]] tools: typing.Optional[list[typing.Union[dict, typing.Callable]]] = None documents: typing.Optional[list[dict[str, str]]] = None chat_template: typing.Optional[str] = None add_generation_prompt: bool = False continue_final_message: bool = False tokenize: bool = True padding: typing.Union[bool, str, transformers.utils.generic.PaddingStrategy] = False truncation: bool = False max_length: typing.Optional[int] = None return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None return_dict: bool = False return_assistant_tokens_mask: bool = False tokenizer_kwargs: typing.Optional[dict[str, typing.Any]] = 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”鍵的字典。有關透過聊天模板傳遞文件的示例,請參閱聊天模板指南的 RAG 部分。 - chat_template (
str
, 可選) — 用於此轉換的 Jinja 模板。通常不需要向此引數傳遞任何內容,因為預設情況下會使用模型的模板。 - add_generation_prompt (bool, 可選) — 如果設定,則會將指示助理訊息開始的標記附加到格式化輸出中。當您想從模型生成響應時,這很有用。請注意,此引數將傳遞給聊天模板,因此只有當模板支援此引數時,此引數才有效。
- continue_final_message (bool, 可選) — 如果設定,聊天將格式化為開放式,不帶任何 EOS 標記。模型將繼續此訊息,而不是開始新訊息。這允許您為模型“預填充”部分響應。不能與
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
,則無效。可接受的值為:'tf'
: 返回 TensorFlowtf.Tensor
物件。'pt'
: 返回 PyTorchtorch.Tensor
物件。'np'
: 返回 NumPynp.ndarray
物件。'jax'
: 返回 JAXjnp.ndarray
物件。
- return_dict (
bool
, 預設為False
) — 是否返回帶有命名輸出的字典。如果 tokenize 為False
,則無效。 - tokenizer_kwargs (
dict[str -- Any]
, 可選):要傳遞給分詞器的額外 kwargs。 - return_assistant_tokens_mask (
bool
, 預設為False
) — 是否返回助手生成的標記掩碼。對於助手生成的標記,掩碼將包含 1。對於使用者和系統標記,掩碼將包含 0。此功能僅適用於透過{% generation %}
關鍵字支援的聊天模板。 - **kwargs — 要傳遞給模板渲染器的額外 kwargs。聊天模板將可以訪問這些引數。
返回
Union[list[int], Dict]
到目前為止已分詞聊天的標記 ID 列表,包括控制標記。此輸出已準備好直接或透過 generate()
等方法傳遞給模型。如果設定了 return_dict
,則將返回分詞器輸出的字典。
將包含“role”和“content”鍵的字典列表轉換為標記 ID 列表。此方法旨在用於聊天模型,並將讀取分詞器的 chat_template 屬性以確定轉換時使用的格式和控制標記。
暫時設定分詞器以編碼目標。對於與需要對標籤進行稍微不同處理的序列到序列模型相關的分詞器很有用。
batch_decode
< 源 >( sequences: typing.Union[list[int], list[list[int]], ForwardRef('np.ndarray'), ForwardRef('torch.Tensor'), ForwardRef('tf.Tensor')] skip_special_tokens: bool = False clean_up_tokenization_spaces: typing.Optional[bool] = None **kwargs ) → list[str]
引數
- sequences (
Union[list[int], list[list[int]], np.ndarray, torch.Tensor, tf.Tensor]
) — 分詞後的輸入 ID 列表。可以使用__call__
方法獲取。 - skip_special_tokens (
bool
, 可選, 預設為False
) — 解碼時是否刪除特殊標記。 - clean_up_tokenization_spaces (
bool
, 可選) — 是否清理分詞空間。如果為None
,將預設為self.clean_up_tokenization_spaces
。 - kwargs (附加關鍵字引數, 可選) — 將傳遞給底層模型特定解碼方法。
返回
list[str]
解碼後的句子列表。
透過呼叫 decode 將標記 ID 列表的列表轉換為字串列表。
batch_encode_plus
< 源 >( batch_text_or_text_pairs: typing.Union[list[str], list[tuple[str, str]], list[list[str]], list[tuple[list[str], list[str]]], list[list[int]], list[tuple[list[int], list[int]]]] add_special_tokens: bool = True padding: typing.Union[bool, str, transformers.utils.generic.PaddingStrategy] = False truncation: typing.Union[bool, str, transformers.tokenization_utils_base.TruncationStrategy, NoneType] = None max_length: typing.Optional[int] = None stride: int = 0 is_split_into_words: bool = False pad_to_multiple_of: typing.Optional[int] = None padding_side: typing.Optional[str] = None return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None return_token_type_ids: typing.Optional[bool] = None return_attention_mask: typing.Optional[bool] = None return_overflowing_tokens: bool = False return_special_tokens_mask: bool = False return_offsets_mapping: bool = False return_length: bool = False verbose: bool = True split_special_tokens: bool = False **kwargs ) → BatchEncoding
引數
- batch_text_or_text_pairs (
list[str]
,list[tuple[str, str]]
,list[list[str]]
,list[tuple[list[str], list[str]]]
,對於非快速分詞器,還包括list[list[int]]
,list[tuple[list[int], list[int]]]
) — 要編碼的序列批處理或序列對列表。這可以是字串/字串序列/整數序列列表,也可以是字串/字串序列/整數序列對列表(詳見encode_plus
)。 - 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 Core 的使用特別有用。 - padding_side (
str
, 可選) — 模型應該應用填充的側面。應在 ['right', 'left'] 之間選擇。預設值從同名的類屬性中選擇。 - return_tensors (
str
或 TensorType, 可選) — 如果設定,將返回張量而不是 Python 整數列表。可接受的值為:'tf'
: 返回 TensorFlowtf.constant
物件。'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
時)
分詞併為模型準備序列列表或序列對列表。
此方法已棄用,應改用 __call__
。
build_inputs_with_special_tokens
< 源 >( token_ids_0: list token_ids_1: typing.Optional[list[int]] = None ) → list[int]
透過連線和新增特殊標記,從序列或序列對構建用於序列分類任務的模型輸入。
此實現不新增特殊標記,此方法應在子類中重寫。
清理簡單的英語分詞偽影列表,例如標點符號前和縮寫形式的空格。
convert_tokens_to_string
< 源 >( tokens: list ) → str
將一系列標記轉換為單個字串。最簡單的方法是 " ".join(tokens)
,但我們通常希望同時刪除子詞分詞偽影。
create_token_type_ids_from_sequences
< 源 >( token_ids_0: list token_ids_1: typing.Optional[list[int]] = None ) → list[int]
建立與傳入序列對應的標記型別 ID。什麼是標記型別 ID?
如果模型有特殊的構建方式,應在子類中重寫此方法。
decode
< 源 >( token_ids: typing.Union[int, list[int], ForwardRef('np.ndarray'), ForwardRef('torch.Tensor'), ForwardRef('tf.Tensor')] skip_special_tokens: bool = False clean_up_tokenization_spaces: typing.Optional[bool] = None **kwargs ) → str
引數
- token_ids (
Union[int, list[int], np.ndarray, torch.Tensor, tf.Tensor]
) — 分詞後的輸入 ID 列表。可以使用__call__
方法獲取。 - skip_special_tokens (
bool
, 可選, 預設為False
) — 解碼時是否刪除特殊標記。 - clean_up_tokenization_spaces (
bool
, 可選) — 是否清理分詞空格。如果為None
,則預設為self.clean_up_tokenization_spaces
。 - kwargs (附加關鍵字引數,可選) — 將傳遞給底層模型特定的解碼方法。
返回
字串
解碼後的句子。
使用分詞器和詞彙表將 ID 序列轉換為字串,可以選擇移除特殊標記並清理分詞空間。
類似於執行 self.convert_tokens_to_string(self.convert_ids_to_tokens(token_ids))
。
編碼
< 來源 >( text: typing.Union[str, list[str], list[int]] text_pair: typing.Union[str, list[str], list[int], NoneType] = None add_special_tokens: bool = True padding: typing.Union[bool, str, transformers.utils.generic.PaddingStrategy] = False truncation: typing.Union[bool, str, transformers.tokenization_utils_base.TruncationStrategy, NoneType] = None max_length: typing.Optional[int] = None stride: int = 0 padding_side: typing.Optional[str] = None return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None **kwargs ) → list[int]
, torch.Tensor
, tf.Tensor
或 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
指定的最大長度,如果未提供該引數,則截斷到模型可接受的最大輸入長度。如果提供了一對序列(或一批對),這將逐個標記截斷,從對中最長的序列中移除一個標記。'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 整數列表。可接受的值為:'tf'
:返回 TensorFlowtf.constant
物件。'pt'
:返回 PyTorchtorch.Tensor
物件。'np'
:返回 Numpynp.ndarray
物件。
- **kwargs — 傳遞給
.tokenize()
方法。
返回
list[int]
, torch.Tensor
, tf.Tensor
或 np.ndarray
文字的分詞 ID。
使用分詞器和詞彙表將字串轉換為 ID 序列(整數)。
與執行 self.convert_tokens_to_ids(self.tokenize(text))
相同。
encode_plus
< 來源 >( text: typing.Union[str, list[str], list[int]] text_pair: typing.Union[str, list[str], list[int], NoneType] = None add_special_tokens: bool = True padding: typing.Union[bool, str, transformers.utils.generic.PaddingStrategy] = False truncation: typing.Union[bool, str, transformers.tokenization_utils_base.TruncationStrategy, NoneType] = None max_length: typing.Optional[int] = None stride: int = 0 is_split_into_words: bool = False pad_to_multiple_of: typing.Optional[int] = None padding_side: typing.Optional[str] = None return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None return_token_type_ids: typing.Optional[bool] = None return_attention_mask: typing.Optional[bool] = None return_overflowing_tokens: bool = False return_special_tokens_mask: bool = False return_offsets_mapping: bool = False return_length: bool = False verbose: bool = True **kwargs ) → BatchEncoding
引數
- 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
指定的最大長度,如果未提供該引數,則截斷到模型可接受的最大輸入長度。如果提供了一對序列(或一批對),這將逐個標記截斷,從對中最長的序列中移除一個標記。'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 整數列表。可接受的值為:'tf'
:返回 TensorFlowtf.constant
物件。'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
時)
對序列或序列對進行分詞併為模型準備。
此方法已棄用,應改用 __call__
。
from_pretrained
< 來源 >( pretrained_model_name_or_path: typing.Union[str, os.PathLike] *init_inputs cache_dir: typing.Union[str, os.PathLike, NoneType] = None force_download: bool = False local_files_only: bool = False token: typing.Union[bool, str, NoneType] = None revision: str = 'main' trust_remote_code = False **kwargs )
引數
- pretrained_model_name_or_path (
str
或os.PathLike
) — 可以是:- 一個字串,是託管在 huggingface.co 模型倉庫中的預定義分詞器的模型 ID。
- 一個包含分詞器所需詞彙檔案的目錄路徑,例如使用 save_pretrained() 方法儲存的目錄,例如
./my_model_directory/
。 - (已棄用,不適用於所有派生類) 單個已儲存詞彙檔案的路徑或 URL(當且僅當分詞器只需要一個詞彙檔案,如 Bert 或 XLNet 時),例如
./my_model_directory/vocab.txt
。
- cache_dir (
str
或os.PathLike
, 可選) — 如果不使用標準快取,則下載的預定義分詞器詞彙檔案應快取到的目錄路徑。 - force_download (
bool
, 可選, 預設為False
) — 是否強制(重新)下載詞彙檔案並覆蓋快取版本(如果存在)。 - resume_download — 已棄用並忽略。現在所有下載預設都會在可能的情況下恢復。將在 Transformers v5 中移除。
- proxies (
dict[str, str]
, 可選) — 要按協議或端點使用的代理伺服器字典,例如{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}
。代理用於每個請求。 - token (
str
或 bool, 可選) — 用於遠端檔案的 HTTP 授權令牌。如果為True
,將使用執行huggingface-cli login
時生成的令牌(儲存在~/.huggingface
中)。 - local_files_only (
bool
, 可選, 預設為False
) — 是否僅依賴本地檔案而不嘗試下載任何檔案。 - revision (
str
, 可選, 預設為"main"
) — 要使用的特定模型版本。它可以是分支名稱、標籤名稱或提交 ID,因為我們使用基於 Git 的系統在 huggingface.co 上儲存模型和其他工件,因此revision
可以是 Git 允許的任何識別符號。 - subfolder (
str
, 可選) — 如果相關檔案位於 huggingface.co 上模型倉庫的子資料夾中(例如,對於 facebook/rag-token-base),請在此處指定。 - inputs (附加位置引數,可選) — 將傳遞給分詞器
__init__
方法。 - trust_remote_code (
bool
, 可選, 預設為False
) — 是否允許 Hub 上自定義模型在其自己的建模檔案中定義。此選項僅應在您信任且已閱讀其程式碼的倉庫中設定為True
,因為它將在您的本地機器上執行 Hub 上存在的程式碼。 - kwargs (附加關鍵字引數,可選) — 將傳遞給分詞器
__init__
方法。可用於設定特殊標記,如bos_token
、eos_token
、unk_token
、sep_token
、pad_token
、cls_token
、mask_token
、additional_special_tokens
。有關更多詳細資訊,請參閱__init__
中的引數。
從預定義分詞器例項化 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
< 源 >( chat_template: typing.Optional[str] = None tools: typing.Optional[list[dict]] = None ) → str
引數
- chat_template (
str
, 可選) — 用於此轉換的 Jinja 模板或模板名稱。通常不需要向此引數傳遞任何內容,因為預設將使用模型的模板。 - tools (
list[Dict]
, 可選) — 模型可訪問的工具(可呼叫函式)列表。如果模板不支援函式呼叫,此引數將無效。每個工具都應以 JSON Schema 形式傳遞,提供工具的名稱、描述和引數型別。有關更多資訊,請參閱我們的聊天模板指南。
返回
字串
聊天模板字串。
檢索用於標記化聊天訊息的聊天模板字串。此模板由 apply_chat_template
方法在內部使用,也可在外部用於檢索模型的聊天模板,以便更好地跟蹤生成。
get_special_tokens_mask
< 源 >( token_ids_0: list token_ids_1: typing.Optional[list[int]] = None already_has_special_tokens: bool = False ) → 一個範圍在 [0, 1] 的整數列表
從未新增特殊令牌的令牌列表中檢索序列 ID。使用分詞器 prepare_for_model
或 encode_plus
方法新增特殊令牌時會呼叫此方法。
以從詞元到索引的字典形式返回詞彙表。
當 token
在詞彙表中時,tokenizer.get_vocab()[token]
等同於 tokenizer.convert_tokens_to_ids(token)
。
pad
< 源 >( encoded_inputs: typing.Union[transformers.tokenization_utils_base.BatchEncoding, list[transformers.tokenization_utils_base.BatchEncoding], dict[str, list[int]], dict[str, list[list[int]]], list[dict[str, list[int]]]] padding: typing.Union[bool, str, transformers.utils.generic.PaddingStrategy] = True max_length: typing.Optional[int] = None pad_to_multiple_of: typing.Optional[int] = None padding_side: typing.Optional[str] = None return_attention_mask: typing.Optional[bool] = None return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None verbose: bool = True )
引數
- encoded_inputs (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 函式中使用此方法。除了
list[int]
之外,您還可以使用張量(Numpy 陣列、PyTorch 張量或 TensorFlow 張量),有關返回型別請參見上面的說明。 - padding (
bool
,str
或 PaddingStrategy, 可選, 預設為True
) — 在以下策略中選擇一種填充返回序列的策略(根據模型的填充側和填充索引):True
或'longest'
(預設):填充到批處理中最長的序列(如果只提供一個序列,則不填充)。'max_length'
:填充到由引數max_length
指定的最大長度,如果未提供該引數,則填充到模型可接受的最大輸入長度。False
或'do_not_pad'
:不填充(即可以輸出具有不同長度序列的批處理)。
- max_length (
int
, 可選) — 返回列表的最大長度以及可選的填充長度(見上文)。 - pad_to_multiple_of (
int
, 可選) — 如果設定,序列將填充到所提供值的倍數。這對於在計算能力
>= 7.5
(Volta) 的 NVIDIA 硬體上啟用 Tensor Core 特別有用。 - padding_side (
str
, 可選) — 模型應在哪個方向應用填充。應在 ['right', 'left'] 中選擇。預設值取自同名的類屬性。 - return_attention_mask (
bool
, 可選) — 是否返回注意力掩碼。如果保留預設值,將根據特定分詞器的預設值(由return_outputs
屬性定義)返回注意力掩碼。 - return_tensors (
str
或 TensorType, 可選) — 如果設定,將返回張量而不是 Python 整數列表。可接受的值為:'tf'
:返回 TensorFlowtf.constant
物件。'pt'
:返回 PyTorchtorch.Tensor
物件。'np'
:返回 Numpynp.ndarray
物件。
- verbose (
bool
, 可選, 預設為True
) — 是否列印更多資訊和警告。
將單個編碼輸入或一批編碼輸入填充到預定義長度或批處理中的最大序列長度。
填充側(左/右)填充令牌 ID 在分詞器級別定義(透過 self.padding_side
、self.pad_token_id
和 self.pad_token_type_id
)。
請注意,對於快速分詞器,使用 __call__
方法比使用方法對文字進行編碼,然後呼叫 pad
方法以獲取填充編碼更快。
如果傳入的 encoded_inputs
是 Numpy 陣列、PyTorch 張量或 TensorFlow 張量的字典,除非您提供不同的張量型別(透過 return_tensors
),否則結果將使用相同的型別。但是,對於 PyTorch 張量,您將丟失張量的特定裝置。
prepare_for_model
< 源 >( ids: list pair_ids: typing.Optional[list[int]] = None add_special_tokens: bool = True padding: typing.Union[bool, str, transformers.utils.generic.PaddingStrategy] = False truncation: typing.Union[bool, str, transformers.tokenization_utils_base.TruncationStrategy, NoneType] = None max_length: typing.Optional[int] = None stride: int = 0 pad_to_multiple_of: typing.Optional[int] = None padding_side: typing.Optional[str] = None return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None return_token_type_ids: typing.Optional[bool] = None return_attention_mask: typing.Optional[bool] = None return_overflowing_tokens: bool = False return_special_tokens_mask: bool = False return_offsets_mapping: bool = False return_length: bool = False verbose: bool = True prepend_batch_axis: bool = False **kwargs ) → BatchEncoding
引數
- ids (
list[int]
) — 第一個序列的分詞輸入 ID。可以透過連結tokenize
和convert_tokens_to_ids
方法從字串中獲取。 - pair_ids (
list[int]
, 可選) — 第二個序列的分詞輸入 ID。可以透過連結tokenize
和convert_tokens_to_ids
方法從字串中獲取。 - 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 Core 特別有用。 - padding_side (
str
, 可選) — 模型應在哪個方向應用填充。應在 ['right', 'left'] 中選擇。預設值取自同名的類屬性。 - return_tensors (
str
或 TensorType, 可選) — 如果設定,將返回張量而不是 Python 整數列表。可接受的值為:'tf'
:返回 TensorFlowtf.constant
物件。'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
時)
準備一個輸入 ID 序列或一對輸入 ID 序列,以便模型可以使用。它新增特殊令牌,如果溢位則截斷序列,同時考慮特殊令牌並管理溢位令牌的移動視窗(具有使用者定義的步長)。請注意,對於 pair_ids
不為 None
且 truncation_strategy = longest_first
或 True
的情況,無法返回溢位令牌。這種引數組合將引發錯誤。
prepare_seq2seq_batch
< 源 >( src_texts: list tgt_texts: typing.Optional[list[str]] = None max_length: typing.Optional[int] = None max_target_length: typing.Optional[int] = None padding: str = 'longest' return_tensors: typing.Optional[str] = None truncation: bool = True **kwargs ) → BatchEncoding
引數
- src_texts (
list[str]
) — 要概括的文件列表或源語言文字。 - tgt_texts (
list
, 可選) — 摘要列表或目標語言文字。 - max_length (
int
, 可選) — 控制編碼器輸入(要概括的文件或源語言文字)的最大長度。如果未設定或設定為None
,則如果截斷/填充引數之一需要最大長度,此項將使用預定義的模型最大長度。如果模型沒有特定的最大輸入長度(如 XLNet),則最大長度的截斷/填充將被停用。 - max_target_length (
int
, 可選) — 控制解碼器輸入(目標語言文字或摘要)的最大長度。如果未設定或設定為None
,將使用 `max_length` 值。 - padding (
bool
,str
或 PaddingStrategy, 可選, 預設為False
) — 啟用並控制填充。接受以下值:True
或'longest'
: 填充到批次中最長的序列(如果只提供一個序列,則不填充)。'max_length'
: 填充到由引數max_length
指定的最大長度,如果未提供該引數,則填充到模型可接受的最大輸入長度。False
或'do_not_pad'
(預設): 不填充(即可以輸出不同長度序列的批次)。
- return_tensors (
str
或 TensorType, 可選) — 如果設定,將返回張量而不是 Python 整數列表。可接受的值為:'tf'
: 返回 TensorFlowtf.constant
物件。'pt'
: 返回 PyTorchtorch.Tensor
物件。'np'
: 返回 Numpynp.ndarray
物件。
- truncation (
bool
,str
或 TruncationStrategy, 可選, 預設為True
) — 啟用並控制截斷。接受以下值:True
或'longest_first'
: 截斷到由引數max_length
指定的最大長度,如果未提供該引數,則截斷到模型可接受的最大輸入長度。如果提供一對序列(或批次),這將逐個截斷令牌,從對中最長的序列中移除一個令牌。'only_first'
: 截斷到由引數max_length
指定的最大長度,如果未提供該引數,則截斷到模型可接受的最大輸入長度。如果提供一對序列(或批次),這將只截斷一對中的第一個序列。'only_second'
: 截斷到由引數max_length
指定的最大長度,如果未提供該引數,則截斷到模型可接受的最大輸入長度。如果提供一對序列(或批次),這將只截斷一對中的第二個序列。False
或'do_not_truncate'
(預設): 不截斷(即可以輸出序列長度大於模型最大可接受輸入大小的批次)。
- **kwargs — 傳遞給
self.__call__
的額外關鍵字引數。
一個 BatchEncoding,包含以下欄位:
- input_ids — 要輸入到編碼器的令牌 ID 列表。
- attention_mask — 指定模型應關注哪些令牌的索引列表。
- labels — tgt_texts 的令牌 ID 列表。
如果傳遞了 tgt_texts,則只會返回完整的鍵集 [input_ids, attention_mask, labels]
。否則,input_ids 和 attention_mask 將是唯一的鍵。
準備模型輸入以進行翻譯。為獲得最佳效能,請一次翻譯一個句子。
push_to_hub
< source >( repo_id: str use_temp_dir: typing.Optional[bool] = None commit_message: typing.Optional[str] = None private: typing.Optional[bool] = None token: typing.Union[bool, str, NoneType] = None max_shard_size: typing.Union[str, int, NoneType] = '5GB' create_pr: bool = False safe_serialization: bool = True revision: typing.Optional[str] = None commit_description: typing.Optional[str] = None tags: typing.Optional[list[str]] = None **deprecated_kwargs )
引數
- repo_id (
str
) — 您要將分詞器推送到的儲存庫名稱。當推送到某個組織時,應包含您的組織名稱。 - use_temp_dir (
bool
, 可選) — 是否使用臨時目錄來儲存在推送到 Hub 之前儲存的檔案。如果沒有名為repo_id
的目錄,則預設為True
,否則為False
。 - commit_message (
str
, 可選) — 推送時要提交的訊息。預設為"Upload tokenizer"
。 - private (
bool
, 可選) — 是否將儲存庫設為私有。如果為None
(預設),則儲存庫將是公開的,除非組織的預設設定為私有。如果儲存庫已存在,則此值將被忽略。 - token (
bool
或str
, 可選) — 用作遠端檔案 HTTP 承載授權的令牌。如果為True
,將使用執行huggingface-cli login
時生成的令牌(儲存在~/.huggingface
中)。如果未指定repo_url
,則預設為True
。 - max_shard_size (
int
或str
, 可選, 預設為"5GB"
) — 僅適用於模型。分片前檢查點的最大大小。檢查點分片的大小將小於此大小。如果表示為字串,則需要是數字後跟單位(如"5MB"
)。我們預設設定為"5GB"
,以便使用者可以在免費的 Google Colab 例項上輕鬆載入模型,而不會出現 CPU OOM 問題。 - create_pr (
bool
, 可選, 預設為False
) — 是否建立包含上傳檔案的 PR,或直接提交。 - safe_serialization (
bool
, 可選, 預設為True
) — 是否將模型權重轉換為 safetensors 格式以實現更安全的序列化。 - revision (
str
, 可選) — 要將上傳檔案推送到的分支。 - commit_description (
str
, 可選) — 將建立的提交的描述。 - tags (
list[str]
, 可選) — 要推送到 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' )
將此類別註冊到一個給定的自動類中。這僅應用於自定義分詞器,因為庫中的分詞器已與 AutoTokenizer
對映。
save_chat_templates
< source >( save_directory: typing.Union[str, os.PathLike] tokenizer_config: dict filename_prefix: typing.Optional[str] save_jinja_files: bool )
如果使用新格式,則將聊天模板寫入儲存目錄,並從分詞器配置中刪除它們(如果存在)。如果使用舊格式,則不寫入任何檔案,而是將模板以正確格式寫入分詞器配置。
save_pretrained
< source >( save_directory: typing.Union[str, os.PathLike] legacy_format: typing.Optional[bool] = None filename_prefix: typing.Optional[str] = None push_to_hub: bool = False **kwargs ) → 一個 str
的元組
引數
- save_directory (
str
或os.PathLike
) — 分詞器將儲存到的目錄路徑。 - legacy_format (
bool
, 可選) — 僅適用於快速分詞器。如果未設定(預設),將以統一的 JSON 格式以及舊格式(如果存在)儲存分詞器,即使用分詞器特定的詞彙表和單獨的 added_tokens 檔案。如果為
False
,將僅以統一的 JSON 格式儲存分詞器。此格式與“慢速”分詞器(不由 tokenizers 庫提供支援)不相容,因此分詞器將無法載入到相應的“慢速”分詞器中。如果為
True
,將以舊格式儲存分詞器。如果“慢速”分詞器不存在,則會引發值錯誤。 - 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
類方法重新載入完整的分詞器。
警告,None 這不會儲存您在例項化後可能已應用於分詞器的修改(例如,在建立後修改 tokenizer.do_lower_case
)。
save_vocabulary
< source >( save_directory: str filename_prefix: typing.Optional[str] = None ) → Tuple(str)
僅儲存分詞器的詞彙表(詞彙表 + 新增的令牌)。
此方法不會儲存分詞器的配置和特殊令牌對映。使用 _save_pretrained()
儲存分詞器的整個狀態。
tokenize
< source >( text: str pair: typing.Optional[str] = None add_special_tokens: bool = False **kwargs ) → list[str]
引數
- text (
str
) — 要編碼的序列。 - pair (
str
, 可選) — 與第一個序列一起編碼的第二個序列。 - add_special_tokens (
bool
, 可選, 預設為False
) — 是否新增與相應模型關聯的特殊令牌。 - kwargs (額外關鍵字引數,可選) — 將傳遞給底層模型特定編碼方法。詳見 call()
返回
list[str]
令牌列表。
將字串轉換為令牌序列,並將未知令牌替換為 unk_token
。
truncate_sequences
< source >( ids: list pair_ids: typing.Optional[list[int]] = None num_tokens_to_remove: int = 0 truncation_strategy: typing.Union[str, transformers.tokenization_utils_base.TruncationStrategy] = 'longest_first' stride: int = 0 ) → tuple[list[int], list[int], list[int]]
引數
- ids (
list[int]
) — 第一個序列的令牌化輸入 ID。可以透過連結tokenize
和convert_tokens_to_ids
方法從字串獲取。 - pair_ids (
list[int]
, 可選) — 第二個序列的令牌化輸入 ID。可以透過連結tokenize
和convert_tokens_to_ids
方法從字串獲取。 - num_tokens_to_remove (
int
, 可選, 預設為 0) — 使用截斷策略要移除的令牌數量。 - truncation_strategy (
str
或 TruncationStrategy, 可選, 預設為'longest_first'
) — 截斷要遵循的策略。可以是:'longest_first'
: 截斷到由引數max_length
指定的最大長度,如果未提供該引數,則截斷到模型可接受的最大輸入長度。如果提供一對序列(或批次),這將逐個截斷令牌,從對中最長的序列中移除一個令牌。'only_first'
: 截斷到由引數max_length
指定的最大長度,如果未提供該引數,則截斷到模型可接受的最大輸入長度。如果提供一對序列(或批次),這將只截斷一對中的第一個序列。'only_second'
: 截斷到由引數max_length
指定的最大長度,如果未提供該引數,則截斷到模型可接受的最大輸入長度。如果提供一對序列(或批次),這將只截斷一對中的第二個序列。'do_not_truncate'
(預設): 不截斷(即可以輸出序列長度大於模型最大可接受輸入大小的批次)。
- stride (
int
, 可選, 預設為 0) — 如果設定為正數,則返回的溢位令牌將包含主序列中的一些令牌。此引數的值定義了額外令牌的數量。
返回
tuple[list[int], list[int], list[int]]
截斷後的 ids
、截斷後的 pair_ids
和溢位令牌列表。注意:如果提供一對序列(或批次),longest_first 策略返回空的溢位令牌列表。
按照策略原地截斷序列對。
SpecialTokensMixin
class transformers.SpecialTokensMixin
< source >( verbose = False **kwargs )
引數
- bos_token (
str
或tokenizers.AddedToken
, 可選) — 表示句子開頭的特殊令牌。 - eos_token (
str
或tokenizers.AddedToken
, 可選) — 表示句子結尾的特殊令牌。 - unk_token (
str
或tokenizers.AddedToken
, 可選) — 表示詞彙表外標記的特殊標記。 - sep_token (
str
或tokenizers.AddedToken
, 可選) — 在同一輸入中分隔兩個不同句子的特殊標記(例如 BERT 使用)。 - pad_token (
str
或tokenizers.AddedToken
, 可選) — 用於使標記陣列大小相同以進行批處理的特殊標記。然後將被注意力機制或損失計算忽略。 - cls_token (
str
或tokenizers.AddedToken
, 可選) — 表示輸入類別的特殊標記(例如 BERT 使用)。 - mask_token (
str
或tokenizers.AddedToken
, 可選) — 表示被掩碼標記的特殊標記(例如被掩碼語言建模預訓練目標使用,如 BERT)。 - additional_special_tokens (
str
或tokenizers.AddedToken
的元組或列表, 可選) — 一個額外的標記元組或列表,將被標記為 `特殊`,這意味著如果 `skip_special_tokens` 設定為 `True`,它們在解碼時將被跳過。
由 PreTrainedTokenizer 和 PreTrainedTokenizerFast 派生的混合類,用於處理與特殊標記相關的特定行為。特別是,此類擁有可用於以模型獨立方式直接訪問這些特殊標記的屬性,並允許設定和更新特殊標記。
add_special_tokens
< source >( special_tokens_dict: dict replace_additional_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
,additional_special_tokens
]。僅當標記尚未存在於詞彙表中時才新增(透過檢查分詞器是否為它們分配
unk_token
的索引來測試)。 - replace_additional_special_tokens (
bool
, 可選, 預設為True
) — 如果為True
,則現有的額外特殊標記列表將被special_tokens_dict
中提供的列表替換。否則,self._special_tokens_map["additional_special_tokens"]
僅會擴充套件。在前一種情況下,標記不會從分詞器的完整詞彙表中移除 - 它們僅被標記為非特殊標記。請記住,這僅影響解碼時跳過的標記,而不影響added_tokens_encoder
和added_tokens_decoder
。這意味著以前的additional_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 的 cls_token
也註冊為 '</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: typing.Union[str, tokenizers.AddedToken, collections.abc.Sequence[typing.Union[str, tokenizers.AddedToken]]] special_tokens: bool = False ) → int
引數
- new_tokens (
str
、tokenizers.AddedToken
或 str 或tokenizers.AddedToken
的序列) — 僅當標記尚未存在於詞彙表中時才新增。tokenizers.AddedToken
包裝了一個字串標記,允許您個性化其行為:此標記是否應僅與單個單詞匹配,此標記是否應去除左側所有可能的空格,此標記是否應去除右側所有可能的空格等。 - special_tokens (
bool
, 可選, 預設為False
) — 可用於指定標記是否為特殊標記。這主要改變標準化行為(例如,像 CLS 或 [MASK] 這樣的特殊標記通常不會被小寫)。有關 HuggingFace 分詞器庫中
tokenizers.AddedToken
的詳細資訊,請參閱。
返回
int
新增到詞彙表的標記數量。
向分詞器類新增新標記列表。如果新標記不在詞彙表中,它們將被新增到詞彙表(索引從當前詞彙表的長度開始),並在應用分詞演算法之前被隔離。因此,新增的標記和分詞演算法詞彙表中的標記的處理方式不同。
請注意,向詞彙表新增新標記時,應確保同時調整模型的標記嵌入矩陣,使其嵌入矩陣與分詞器匹配。
為此,請使用 resize_token_embeddings() 方法。
示例
# 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))
sanitize_special_tokens
現已棄用,為向後相容性保留,並將在 transformers v5 中移除。
列舉和命名元組
class transformers.tokenization_utils_base.TruncationStrategy
< source >( value names = None module = None qualname = None type = None start = 1 )
PreTrainedTokenizerBase.call() 中 truncation
引數的可能值。對 IDE 中的自動完成很有用。
class transformers.CharSpan
< source >( start: int end: int )
原始字串中的字元跨度。
class transformers.TokenSpan
< source >( start: int end: int )
編碼字串(標記列表)中的標記跨度。