Transformers 文件

處理器

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

處理器

在 Transformers 庫中,處理器(Processors)可能指兩種不同的東西:

  • 用於預處理多模態模型輸入的對​​象,例如 Wav2Vec2(語音和文字)或 CLIP(文字和視覺)。
  • 在舊版庫中用於為 GLUE 或 SQUAD 預處理資料的已棄用物件。

多模態處理器

任何多模態模型都需要一個物件來編碼或解碼組合了多種模態(文字、視覺、音訊)的資料。這由稱為處理器的物件處理,這些物件組合了兩個或多個處理物件,例如分詞器(用於文字模態)、影像處理器(用於視覺)和特徵提取器(用於音訊)。

這些處理器繼承自以下基類,該基類實現了儲存和載入功能:

class transformers.ProcessorMixin

< >

( *args **kwargs )

這是一個混入(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] )

引數

  • conversation (Union[list[Dict, [str, str]], list[list[dict[str, str]]]]) — 要格式化的對話。
  • chat_template (Optional[str], 可選) — 用於格式化對話的 Jinja 模板。如果未提供,則使用分詞器的聊天模板。

與分詞器上的 `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”: “請詳細描述這張圖片。”}, ], }, ]

check_argument_for_proper_class

< >

( argument_name argument )

檢查傳入引數的類是否與預期的 transformers 類匹配。如果預期類與實際類之間出現意外不匹配,則會引發錯誤。否則,返回正確檢索到的類。

from_args_and_dict

< >

( args processor_dict: dict **kwargs ) ~processing_utils.ProcessingMixin

引數

  • processor_dict (dict[str, Any]) — 用於例項化處理器物件的字典。此類字典可以利用 `~processing_utils.ProcessingMixin.to_dict` 方法從預訓練的檢查點中檢索。
  • kwargs (dict[str, Any]) — 用於初始化處理器物件的附加引數。

返回

~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 or os.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 (str or os.PathLike) — 我們想要獲取引數字典的預訓練檢查點的識別符號。
  • subfolder (str, 可選, 預設為 "") — 如果相關檔案位於 huggingface.co 上的模型倉庫的子資料夾中,可以在此處指定資料夾名稱。

返回

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]

引數

  • generated_outputs (torch.Tensor or np.ndarray) — 模型 `generate` 函式的輸出。輸出應為一個形狀為 `(batch_size, sequence_length)` 或 `(sequence_length,)` 的張量。
  • skip_special_tokens (bool, 可選, 預設為 True) — 是否在輸出中移除特殊標記。此引數會傳遞給分詞器的 `batch_decode` 方法。
  • **kwargs — 要傳遞給分詞器 `batch_decode` 方法的附加引數。

返回

list[str]

解碼後的文字。

後處理視覺語言模型(VLM)的輸出以解碼文字。

prepare_and_validate_optional_call_args

< >

( *args )

將可選的位置引數與處理器類中的 `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,
)

那麼,如果我們這樣呼叫處理器:

images = [...]
processor("What is common in these images?", images, arg_value_1, arg_value_2)

此方法將返回:

{
    "arg_name_1": arg_value_1,
    "arg_name_2": arg_value_2,
}
然後我們可以將其作為 kwargs 傳遞給 `self._merge_kwargs`

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 or str, 可選) — 用於遠端檔案 HTTP 持有者授權的令牌。如果為 `True`,將使用執行 `huggingface-cli login` 時生成的令牌 (儲存在 `~/.huggingface` 中)。如果未指定 `repo_url`,則預設為 `True`。
  • max_shard_size (int or str, 可選, 預設為 "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' )

引數

  • auto_class (str or type, 可選, 預設為 "AutoProcessor") — 要註冊此新特徵提取器的自動類。

向給定的自動類註冊此類。這隻應用於自定義特徵提取器,因為庫中的特徵提取器已經與 `AutoProcessor` 對映。

save_pretrained

< >

( save_directory push_to_hub: bool = False **kwargs )

引數

  • save_directory (str or os.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()。有關更多資訊,請參閱上述方法的文件字串。

to_dict

< >

( ) dict[str, Any]

返回

dict[str, Any]

包含構成此處理器例項的所有屬性的字典。

將此例項序列化為 Python 字典。

to_json_file

< >

( json_file_path: typing.Union[str, os.PathLike] )

引數

  • json_file_path (str or os.PathLike) — 用於儲存此處理器例項引數的 JSON 檔案的路徑。

將此例項儲存到 JSON 檔案。

to_json_string

< >

( ) str

返回

字串

包含此 feature_extractor 例項所有屬性的 JSON 格式字串。

將此例項序列化為 JSON 字串。

已棄用的處理器

所有處理器都遵循相同的架構,即 DataProcessor 的架構。處理器返回一個 InputExample 列表。這些 InputExample 可以被轉換為 InputFeatures,以便輸入到模型中。

class transformers.DataProcessor

< >

( )

序列分類資料集的資料轉換器基類。

get_dev_examples

< >

( data_dir )

獲取開發集的一組 InputExample

get_example_from_tensor_dict

< >

( tensor_dict )

引數

  • tensor_dict — 鍵和值應與相應的 Glue tensorflow_dataset 示例匹配。

從帶有 tensorflow 張量的字典中獲取示例。

get_labels

< >

( )

獲取此資料集的標籤列表。

get_test_examples

< >

( data_dir )

獲取測試集的一組 InputExample

get_train_examples

< >

( data_dir )

獲取訓練集的一組 InputExample

tfds_map

< >

( example )

一些 tensorflow_datasets 資料集的格式與 GLUE 資料集的格式不同。此方法將示例轉換為正確的格式。

class transformers.InputExample

< >

( guid: str text_a: str text_b: typing.Optional[str] = None label: typing.Optional[str] = None )

引數

  • guid — 示例的唯一 ID。
  • text_a — 字串。第一個序列的未分詞文字。對於單序列任務,只需指定此序列。
  • text_b — (可選)字串。第二個序列的未分詞文字。僅在序列對任務中必須指定。
  • label — (可選)字串。示例的標籤。應為訓練和開發示例指定,但不為測試示例指定。

用於簡單序列分類的單個訓練/測試示例。

to_json_string

< >

( )

將此例項序列化為 JSON 字串。

class transformers.InputFeatures

< >

( 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 )

引數

  • input_ids — 詞彙表中輸入序列標記的索引。
  • attention_mask — 用於避免對填充標記索引執行注意力操作的掩碼。掩碼值選自 `[0, 1]`:通常,對於未被掩碼的標記為 `1`,對於被掩碼(填充)的標記為 `0`。
  • token_type_ids — (可選)段標記索引,用於指示輸入的第一部分和第二部分。只有部分模型使用它們。
  • label — (可選)與輸入對應的標籤。對於分類問題是整數,對於迴歸問題是浮點數。

一組資料特徵。屬性名稱與模型的相應輸入名稱相同。

to_json_string

< >

( )

將此例項序列化為 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

< >

( 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 )

引數

  • examples — `InputExamples` 的列表或包含示例的 `tf.data.Dataset`。
  • tokenizer — 將對示例進行分詞的分詞器例項
  • max_length — 最大示例長度。預設為分詞器的 max_len
  • task — GLUE 任務
  • label_list — 標籤列表。可以使用 `processor.get_labels()` 方法從處理器獲取
  • output_mode — 指示輸出模式的字串。可以是 `regression` 或 `classification`

將資料檔案載入到 `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

class transformers.data.processors.squad.SquadProcessor

< >

( )

用於 SQuAD 資料集的處理器。由 SquadV1Processor 和 SquadV2Processor 覆蓋,分別用於 SQuAD 的 1.1 版本和 2.0 版本。

get_dev_examples

< >

( data_dir filename = None )

引數

  • data_dir — 包含用於訓練和評估的資料檔案的目錄。
  • filename — 預設為 None,如果評估檔案的名稱與原始檔案不同,請指定此項。對於 SQuAD 1.1 和 2.0 版本,原始檔名分別為 `dev-v1.1.json` 和 `dev-v2.0.json`。

從資料目錄返回評估示例。

get_examples_from_dataset

< >

( dataset evaluate = False )

引數

  • dataset — 從 *tensorflow_datasets.load(“squad”)* 載入的 tfds 資料集
  • evaluate — 布林值,指定是處於評估模式還是訓練模式

使用 TFDS 資料集建立 `SquadExample` 列表。

示例

>>> import tensorflow_datasets as tfds

>>> dataset = tfds.load("squad")

>>> training_examples = get_examples_from_dataset(dataset, evaluate=False)
>>> evaluation_examples = get_examples_from_dataset(dataset, evaluate=True)

get_train_examples

< >

( data_dir filename = None )

引數

  • data_dir — 包含用於訓練和評估的資料檔案的目錄。
  • filename — 預設為 None,如果訓練檔案的名稱與原始檔案不同,請指定此項。對於 SQuAD 1.1 和 2.0 版本,原始檔名分別為 `train-v1.1.json` 和 `train-v2.0.json`。

從資料目錄返回訓練示例。

此外,可以使用以下方法將 SQuAD 示例轉換為可作為模型輸入的 `~data.processors.utils.SquadFeatures`。

transformers.squad_convert_examples_to_features

< >

( 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 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.