Transformers 文件
處理器
並獲得增強的文件體驗
開始使用
處理器
在 Transformers 庫中,處理器(Processors)可能指兩種不同的東西:
多模態處理器
任何多模態模型都需要一個物件來編碼或解碼組合了多種模態(文字、視覺、音訊)的資料。這由稱為處理器的物件處理,這些物件組合了兩個或多個處理物件,例如分詞器(用於文字模態)、影像處理器(用於視覺)和特徵提取器(用於音訊)。
這些處理器繼承自以下基類,該基類實現了儲存和載入功能:
這是一個混入(mixin),用於為所有處理器類提供儲存/載入功能。
apply_chat_template
< 源 >( conversation: typing.Union[list[dict[str, str]], list[list[dict[str, str]]]] chat_template: typing.Optional[str] = None **kwargs: typing_extensions.Unpack[transformers.processing_utils.AllKwargsForChatTemplate] )
與分詞器上的 `apply_chat_template` 方法類似,此方法將 Jinja 模板應用於輸入對話,將其轉換為單個可分詞的字串。
輸入應為以下格式,其中每條訊息內容是一個列表,包含文字以及可選的影像或影片輸入。也可以提供影像、影片、URL 或本地路徑,當 `return_dict=True` 時,這些將被用於形成 `pixel_values`。如果未提供,將只獲得格式化的文字,或可選的分詞後的文字。
conversation = [ { “role”: “user”, “content”: [ {“type”: “image”, “url”: “https://www.ilankelman.org/stopsigns/australia.jpg”}, {“type”: “text”, “text”: “請詳細描述這張圖片。”}, ], }, ]
檢查傳入引數的類是否與預期的 transformers 類匹配。如果預期類與實際類之間出現意外不匹配,則會引發錯誤。否則,返回正確檢索到的類。
from_args_and_dict
< 源 >( args processor_dict: dict **kwargs ) → ~processing_utils.ProcessingMixin
從一個 Python 引數字典例項化 `~processing_utils.ProcessingMixin` 型別的物件。
from_pretrained
< 源 >( pretrained_model_name_or_path: typing.Union[str, os.PathLike] cache_dir: typing.Union[str, os.PathLike, NoneType] = None force_download: bool = False local_files_only: bool = False token: typing.Union[str, bool, NoneType] = None revision: str = 'main' **kwargs )
引數
- pretrained_model_name_or_path (
str
oros.PathLike
) — 這可以是以下之一:- 一個字串,即託管在 huggingface.co 模型倉庫中的預訓練 feature_extractor 的 *模型 id*。
- 一個包含使用 save_pretrained() 方法儲存的特徵提取器檔案的 *目錄* 的路徑,例如,`./my_model_directory/`。
- 一個已儲存的特徵提取器 JSON *檔案* 的路徑或 URL,例如,`./my_model_directory/preprocessor_config.json`。
- **kwargs — 傳遞給 from_pretrained() 和 `~tokenization_utils_base.PreTrainedTokenizer.from_pretrained` 的附加關鍵字引數。
例項化與預訓練模型關聯的處理器。
此類方法僅呼叫特徵提取器的 from_pretrained()、影像處理器的 ImageProcessingMixin 和分詞器的 `~tokenization_utils_base.PreTrainedTokenizer.from_pretrained` 方法。請參閱上述方法的文件字串以獲取更多資訊。
get_processor_dict
< 源 >( pretrained_model_name_or_path: typing.Union[str, os.PathLike] **kwargs ) → tuple[Dict, Dict]
從一個 `pretrained_model_name_or_path` 解析出一個引數字典,用於使用 `from_args_and_dict` 例項化一個 `~processing_utils.ProcessingMixin` 型別的處理器。
post_process_image_text_to_text
< 源 >( generated_outputs skip_special_tokens = True **kwargs ) → list[str]
後處理視覺語言模型(VLM)的輸出以解碼文字。
將可選的位置引數與處理器類中的 `optional_call_args` 中的相應名稱按它們傳遞給處理器呼叫的順序進行匹配。
請注意,這隻應在具有特殊引數的處理器的 `__call__` 方法中使用。特殊引數是指既不是 `text`、`images`、`audio`、`videos`,也不是傳遞給分詞器、影像處理器等的引數。這類處理器的例子有:
CLIPSegProcessor
LayoutLMv2Processor
OwlViTProcessor
另請注意,透過位置向處理器呼叫傳遞引數現已棄用,並將在未來版本中被禁止。我們保留此功能僅為向後相容。
例如:假設處理器類有 `optional_call_args = ["arg_name_1", "arg_name_2"]`。
我們定義 call 方法如下:
def __call__(
self,
text: str,
images: Optional[ImageInput] = None,
*arg,
audio=None,
videos=None,
)
push_to_hub
< 源 >( 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 processor"`。 - private (
bool
, 可選) — 是否將倉庫設為私有。如果為 `None` (預設),除非組織的預設設定為私有,否則倉庫將為公開。如果倉庫已存在,則忽略此值。 - token (
bool
orstr
, 可選) — 用於遠端檔案 HTTP 持有者授權的令牌。如果為 `True`,將使用執行 `huggingface-cli login` 時生成的令牌 (儲存在 `~/.huggingface` 中)。如果未指定 `repo_url`,則預設為 `True`。 - max_shard_size (
int
orstr
, 可選, 預設為"5GB"
) — 僅適用於模型。在分片前檢查點的最大大小。檢查點分片的大小將小於此大小。如果表示為字串,需要是數字後跟一個單位 (如 `"5MB"`)。我們將其預設為 `"5GB"`,以便使用者可以輕鬆在免費的 Google Colab 例項上載入模型,而不會出現 CPU 記憶體不足的問題。 - create_pr (
bool
, 可選, 預設為False
) — 是為上傳的檔案建立一個拉取請求(PR)還是直接提交。 - safe_serialization (
bool
, 可選, 預設為True
) — 是否將模型權重轉換為 safetensors 格式以實現更安全的序列化。 - revision (
str
, 可選) — 推送上傳檔案到的分支。 - commit_description (
str
, 可選) — 將要建立的提交的描述 - tags (
list[str]
, 可選) — 要推送到 Hub 的標籤列表。
將處理器檔案上傳到 🤗 模型中心。
示例
from transformers import AutoProcessor
processor = AutoProcessor.from_pretrained("google-bert/bert-base-cased")
# Push the processor to your namespace with the name "my-finetuned-bert".
processor.push_to_hub("my-finetuned-bert")
# Push the processor to an organization with the name "my-finetuned-bert".
processor.push_to_hub("huggingface/my-finetuned-bert")
register_for_auto_class
< 源 >( auto_class = 'AutoProcessor' )
向給定的自動類註冊此類。這隻應用於自定義特徵提取器,因為庫中的特徵提取器已經與 `AutoProcessor` 對映。
save_pretrained
< 源 >( save_directory push_to_hub: bool = False **kwargs )
引數
- save_directory (
str
oros.PathLike
) — 將儲存特徵提取器 JSON 檔案和分詞器檔案的目錄(如果不存在,將建立該目錄)。 - push_to_hub (
bool
, 可選, 預設為False
) — 是否在儲存模型後將其推送到 Hugging Face 模型中心。您可以使用 `repo_id` 指定要推送到的倉庫(將預設為您名稱空間中 `save_directory` 的名稱)。 - kwargs (
dict[str, Any]
, 可選) — 傳遞給 push_to_hub() 方法的附加關鍵字引數。
將此處理器(特徵提取器、分詞器…)的屬性儲存在指定目錄中,以便可以使用 from_pretrained() 方法重新載入。
這個類方法只是簡單地呼叫 save_pretrained() 和 save_pretrained()。有關更多資訊,請參閱上述方法的文件字串。
將此例項序列化為 Python 字典。
to_json_file
< source >( json_file_path: typing.Union[str, os.PathLike] )
將此例項儲存到 JSON 檔案。
將此例項序列化為 JSON 字串。
已棄用的處理器
所有處理器都遵循相同的架構,即 DataProcessor 的架構。處理器返回一個 InputExample 列表。這些 InputExample 可以被轉換為 InputFeatures,以便輸入到模型中。
序列分類資料集的資料轉換器基類。
獲取開發集的一組 InputExample。
get_example_from_tensor_dict
< source >( tensor_dict )
從帶有 tensorflow 張量的字典中獲取示例。
獲取此資料集的標籤列表。
獲取測試集的一組 InputExample。
獲取訓練集的一組 InputExample。
一些 tensorflow_datasets 資料集的格式與 GLUE 資料集的格式不同。此方法將示例轉換為正確的格式。
class transformers.InputExample
< source >( guid: str text_a: str text_b: typing.Optional[str] = None label: typing.Optional[str] = None )
用於簡單序列分類的單個訓練/測試示例。
將此例項序列化為 JSON 字串。
class transformers.InputFeatures
< source >( input_ids: list attention_mask: typing.Optional[list[int]] = None token_type_ids: typing.Optional[list[int]] = None label: typing.Union[int, float, NoneType] = None )
一組資料特徵。屬性名稱與模型的相應輸入名稱相同。
將此例項序列化為 JSON 字串。
GLUE
通用語言理解評估(GLUE)是一個基準測試,用於評估模型在各種現有 NLU 任務上的效能。它與論文 GLUE: A multi-task benchmark and analysis platform for natural language understanding 一同釋出。
該庫共託管了 10 個用於以下任務的處理器:MRPC、MNLI、MNLI (mismatched)、CoLA、SST2、STSB、QQP、QNLI、RTE 和 WNLI。
這些處理器是
~data.processors.utils.MrpcProcessor
~data.processors.utils.MnliProcessor
~data.processors.utils.MnliMismatchedProcessor
~data.processors.utils.Sst2Processor
~data.processors.utils.StsbProcessor
~data.processors.utils.QqpProcessor
~data.processors.utils.QnliProcessor
~data.processors.utils.RteProcessor
~data.processors.utils.WnliProcessor
此外,以下方法可用於從資料檔案中載入值,並將其轉換為 InputExample 列表。
transformers.glue_convert_examples_to_features
< source >( examples: typing.Union[list[transformers.data.processors.utils.InputExample], ForwardRef('tf.data.Dataset')] tokenizer: PreTrainedTokenizer max_length: typing.Optional[int] = None task = None label_list = None output_mode = None )
將資料檔案載入到 `InputFeatures` 列表中
XNLI
跨語言 NLI 語料庫 (XNLI) 是一個評估跨語言文字表示質量的基準測試。XNLI 是一個基於 MultiNLI 的眾包資料集:為 15 種不同語言(包括高資源語言如英語和低資源語言如斯瓦希里語)的文字對標註了文字蘊含註釋。
它與論文 XNLI: Evaluating Cross-lingual Sentence Representations 一同釋出。
此庫託管了用於載入 XNLI 資料的處理器。
~data.processors.utils.XnliProcessor
請注意,由於測試集上提供了真實標籤,評估是在測試集上進行的。
在 run_xnli.py 指令碼中給出了使用這些處理器的示例。
SQuAD
斯坦福問答資料集 (SQuAD) 是一個評估模型問答效能的基準測試。有兩個版本可用,v1.1 和 v2.0。第一個版本 (v1.1) 與論文 SQuAD: 100,000+ Questions for Machine Comprehension of Text 一同釋出。第二個版本 (v2.0) 與論文 Know What You Don’t Know: Unanswerable Questions for SQuAD 一同釋出。
這個庫為這兩個版本中的每一個都提供了一個處理器。
處理器
這些處理器是
~data.processors.utils.SquadV1Processor
~data.processors.utils.SquadV2Processor
它們都繼承自抽象類 ~data.processors.utils.SquadProcessor
用於 SQuAD 資料集的處理器。由 SquadV1Processor 和 SquadV2Processor 覆蓋,分別用於 SQuAD 的 1.1 版本和 2.0 版本。
get_dev_examples
< source >( data_dir filename = None )
從資料目錄返回評估示例。
get_examples_from_dataset
< source >( dataset evaluate = False )
使用 TFDS 資料集建立 `SquadExample` 列表。
get_train_examples
< source >( data_dir filename = None )
從資料目錄返回訓練示例。
此外,可以使用以下方法將 SQuAD 示例轉換為可作為模型輸入的 `~data.processors.utils.SquadFeatures`。
transformers.squad_convert_examples_to_features
< source >( examples tokenizer max_seq_length doc_stride max_query_length is_training padding_strategy = 'max_length' return_dataset = False threads = 1 tqdm_enabled = True )
引數
- examples — `SquadExample` 的列表
- tokenizer — 一個 PreTrainedTokenizer 的子類的例項
- max_seq_length — 輸入的最大序列長度。
- doc_stride — 當上下文過長並被分割成多個特徵時使用的步長。
- max_query_length — 查詢的最大長度。
- is_training — 是為模型評估還是模型訓練建立特徵。
- padding_strategy — 預設為“max_length”。使用哪種填充策略。
- return_dataset — 預設為 False。可以是 'pt' 或 'tf'。如果為 'pt':返回一個 torch.data.TensorDataset,如果為 'tf':返回一個 tf.data.Dataset。
- threads — 多處理執行緒。
將樣本列表轉換為可直接作為模型輸入的特徵列表。它依賴於具體模型,並利用分詞器的許多功能來建立模型的輸入。
示例
processor = SquadV2Processor()
examples = processor.get_dev_examples(data_dir)
features = squad_convert_examples_to_features(
examples=examples,
tokenizer=tokenizer,
max_seq_length=args.max_seq_length,
doc_stride=args.doc_stride,
max_query_length=args.max_query_length,
is_training=not evaluate,
)
這些處理器以及上述方法既可以用於包含資料的檔案,也可以與 tensorflow_datasets 包一起使用。下面給出了一些示例。
用法示例
這是一個使用處理器和轉換方法處理資料檔案的示例
# Loading a V2 processor
processor = SquadV2Processor()
examples = processor.get_dev_examples(squad_v2_data_dir)
# Loading a V1 processor
processor = SquadV1Processor()
examples = processor.get_dev_examples(squad_v1_data_dir)
features = squad_convert_examples_to_features(
examples=examples,
tokenizer=tokenizer,
max_seq_length=max_seq_length,
doc_stride=args.doc_stride,
max_query_length=max_query_length,
is_training=not evaluate,
)
使用 tensorflow_datasets 和使用資料檔案一樣簡單
# tensorflow_datasets only handle Squad V1.
tfds_examples = tfds.load("squad")
examples = SquadV1Processor().get_examples_from_dataset(tfds_examples, evaluate=evaluate)
features = squad_convert_examples_to_features(
examples=examples,
tokenizer=tokenizer,
max_seq_length=max_seq_length,
doc_stride=args.doc_stride,
max_query_length=max_query_length,
is_training=not evaluate,
)
另一個使用這些處理器的示例在 run_squad.py 指令碼中給出。
< > 在 GitHub 上更新