KerasHub:預訓練模型 / API 文件 / 預處理層 / MaskedLMMaskGenerator 層

MaskedLMMaskGenerator 層

[原始碼]

MaskedLMMaskGenerator 類別

keras_hub.layers.MaskedLMMaskGenerator(
    vocabulary_size,
    mask_selection_rate,
    mask_token_id,
    mask_selection_length=None,
    unselectable_token_ids=[0],
    mask_token_rate=0.8,
    random_token_rate=0.1,
    **kwargs
)

套用語言模型遮罩的層。

此層適用於準備遮罩語言模型 (MaskedLM) 任務的輸入。它遵循 原始 BERT 論文中描述的遮罩策略。給定符號化的文字,它會隨機選擇一定數量的符號進行遮罩。然後,對於每個選定的符號,它有機會(可配置)被替換為「遮罩符號」或隨機符號,或保持不變。

輸入資料應以張量、tf.RaggedTensor 或列表的形式傳遞。對於批次輸入,輸入應為列表的列表或二階張量。對於非批次輸入,每個元素應為列表或一階張量。

此層可以與 tf.data 搭配使用,以在訓練期間動態產生遮罩。

引數

  • vocabulary_size:整數,詞彙表的大小。
  • mask_selection_rate:浮點數,符號被選中進行遮罩的機率。
  • mask_token_id:整數。遮罩符號的 ID。
  • mask_selection_length:整數。每個序列中選取進行遮罩的最大符號數量。如果設定,則輸出 mask_positionsmask_idsmask_weights 將被填充為長度為 mask_selection_length 的密集張量,否則輸出將為 RaggedTensor。預設為 None
  • unselectable_token_ids:不應被視為符合遮罩條件的符號 ID 列表。預設情況下,我們假設 0 對應於填充符號並忽略它。預設為 [0]
  • mask_token_rate:浮點數。mask_token_rate 必須介於 0 和 1 之間,表示遮罩符號替換選取進行遮罩的符號的頻率。預設為 0.8
  • random_token_rate:浮點數。random_token_rate 必須介於 0 和 1 之間,表示隨機符號替換選取進行遮罩的符號的頻率。注意:mask_token_rate + random_token_rate <= 1,對於 (1 - mask_token_rate - random_token_rate),符號將保持不變。預設為 0.1

返回

  • 包含 4 個鍵的字典:token_ids:張量或 RaggedTensor,具有與輸入相同的類型和形狀。遮罩後的序列。mask_positions:張量,或 RaggedTensor(如果 mask_selection_length 為 None)。被遮罩的 token_ids 的位置。mask_ids:張量,或 RaggedTensor(如果 mask_selection_length 為 None)。遮罩位置的原始符號 ID。mask_weights:張量,或 RaggedTensor(如果 mask_selection_length 為 None)。mask_weights 的形狀與 mask_positionsmask_ids 相同。mask_weights 中的每個元素應為 0 或 1,1 表示 mask_positions 中的對應位置是實際遮罩,0 表示它是填充。

範例

基本用法。

masker = keras_hub.layers.MaskedLMMaskGenerator(
    vocabulary_size=10,
    mask_selection_rate=0.2,
    mask_token_id=0,
    mask_selection_length=5
)
# Dense input.
masker([1, 2, 3, 4, 5])

# Ragged input.
masker([[1, 2], [1, 2, 3, 4]])

遮罩包含特殊符號的批次。

pad_id, cls_id, sep_id, mask_id = 0, 1, 2, 3
batch = [
    [cls_id,   4,    5,      6, sep_id,    7,    8, sep_id, pad_id, pad_id],
    [cls_id,   4,    5, sep_id,      6,    7,    8,      9, sep_id, pad_id],
]

masker = keras_hub.layers.MaskedLMMaskGenerator(
    vocabulary_size = 10,
    mask_selection_rate = 0.2,
    mask_selection_length = 5,
    mask_token_id = mask_id,
    unselectable_token_ids = [
        cls_id,
        sep_id,
        pad_id,
    ]
)
masker(batch)