Keras 3 API 文档 / KerasHub / 预处理层 / 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 或列表传递。对于批处理输入,输入应为列表的列表或秩为 2 的张量。对于非批处理输入,每个元素应为列表或秩为 1 的张量。

此层可与 tf.data 一起使用,以在训练期间动态生成掩码。

参数

  • vocabulary_size:int,词汇量的大小。
  • mask_selection_rate:float,标记被选中用于掩码的概率。
  • mask_token_id:int。掩码标记的 ID。
  • mask_selection_length:int。每个序列中用于掩码的选定标记的最大数量。如果设置,输出 mask_positionsmask_idsmask_weights 将被填充为长度为 mask_selection_length 的密集张量,否则输出将为 RaggedTensor。默认值为 None
  • unselectable_token_ids:一个应该不被认为有资格掩码的标记 ID 列表。默认情况下,我们假设 0 对应于填充标记并忽略它。默认值为 [0]
  • mask_token_rate:float。mask_token_rate 必须介于 0 和 1 之间,它指示掩码标记替换选定用于掩码的标记的频率。默认值为 0.8
  • random_token_rate:float。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:张量,如果 mask_selection_lengthNone,则为 RaggedTensor。被掩码的 token_ids 的位置。mask_ids:张量,如果 mask_selection_lengthNone,则为 RaggedTensor。被掩码位置处的原始 token_id。mask_weights:张量,如果 mask_selection_lengthNone,则为 RaggedTensor。mask_weightsmask_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)