paddlespeech.s2t.modules.attention 模块

多头注意力层的定义。

class paddlespeech.s2t.modules.attention.MultiHeadedAttention(n_head: int, n_feat: int, dropout_rate: float)[来源]

基础: Layer

多头注意力层。

方法

__call__(*inputs, **kwargs)

将self作为一个函数调用。

add_parameter(name, parameter)

添加一个参数实例。

add_sublayer(name, sublayer)

添加一个子层实例。

apply(fn)

递归地将 fn 应用到每个子层(由 .sublayers() 返回)以及自身。

buffers([include_sublayers])

返回当前层及其子层中的所有缓冲区的列表。

children()

返回一个迭代器,遍历直接子层。

clear_gradients()

清除此层所有参数的梯度。

create_parameter(shape[, attr, dtype, ...])

为该层创建参数。

create_tensor([name, persistable, dtype])

为该层创建张量。

create_variable([name, persistable, dtype])

为该层创建张量。

eval()

将该层及其所有子层设置为评估模式。

extra_repr()

该层的额外表示,您可以自定义实现自己的层。

forward(query, key, value[, mask, ...])

计算缩放点积注意力。 参数: query (paddle.Tensor): 查询张量 (#batch, time1, size)。 key (paddle.Tensor): 键张量 (#batch, time2, size)。 value (paddle.Tensor): 值张量 (#batch, time2, size)。 mask (paddle.Tensor): 掩码张量 (#batch, 1, time2) 或 (#batch, time1, time2)。 1. 当在解码器与编码器之间应用交叉注意力时,输入的批次填充掩码形状为 (#batch, 1, T)。 2. 当应用编码器的自注意力时,掩码的形状为 (#batch, T, T)。 3. 当应用解码器的自注意力时,掩码的形状为 (#batch, L, L)。 4. 如果解码器中的不同位置看到编码器的不同块,例如 Mocha,传入的掩码可以具有 (#batch, L, T) 的形状。但在当前的 Wenet 中没有这种情况。 cache (paddle.Tensor): 缓存张量 (1, head, cache_t, d_k * 2), 其中 cache_t == chunk_size * num_decoding_left_chunks 并且 head * d_k == size 返回: paddle.Tensor: 输出张量 (#batch, time1, d_model)。 paddle.Tensor: 缓存张量 (1, head, cache_t + time1, d_k * 2) 其中 cache_t == chunk_size * num_decoding_left_chunks 并且 head * d_k == size

forward_attention(value, scores[, mask, ...])

计算注意力上下文向量。 参数: value (paddle.Tensor): 转换后的值,大小为 (#batch, n_head, time2, d_k)。 scores (paddle.Tensor): 注意力分数,大小为 (#batch, n_head, time1, time2)。 mask (paddle.Tensor): 掩码,大小为 (#batch, 1, time2) 或 (#batch, time1, time2),(0, 0, 0) 表示虚假掩码。 返回: paddle.Tensor: 经注意力分数加权的转换值 (#batch, time1, d_model) (#batch, time1, time2)。

forward_qkv(query, key, value)

转换查询、键和值。参数: query (paddle.Tensor): 查询张量 (#batch, time1, size)。 key (paddle.Tensor): 键张量 (#batch, time2, size)。 value (paddle.Tensor): 值张量 (#batch, time2, size)。 返回: paddle.Tensor: 转换后的查询张量,大小 (#batch, n_head, time1, d_k)。 paddle.Tensor: 转换后的键张量,大小 (#batch, n_head, time2, d_k)。 paddle.Tensor: 转换后的值张量,大小 (#batch, n_head, time2, d_k)。

full_name()

此层的完整名称,由 name_scope + "/" + MyLayer.__class__.__name__ 组成

load_dict(state_dict[, use_structured_name])

从 state_dict 设置参数和可持久化缓存。

named_buffers([prefix, include_sublayers])

返回一个迭代器,遍历层中的所有缓冲区,生成名称和张量的元组。

named_children()

返回一个直接子层的迭代器,同时提供层的名称和层本身。

named_parameters([prefix, include_sublayers])

返回一个迭代器,遍历层中的所有参数,生成名称和参数的元组。

named_sublayers([prefix, include_self, ...])

返回Layer中所有子层的迭代器,生成名称和子层的元组。

parameters([include_sublayers])

返回当前层及其子层的所有参数的列表。

register_buffer(name, tensor[, persistable])

将一个张量注册为该层的缓冲区。

register_forward_post_hook(hook)

为层注册一个前向后钩子。

register_forward_pre_hook(hook)

为层注册一个前向预钩子。

set_dict(state_dict[, use_structured_name])

从 state_dict 设置参数和可持久化的缓冲区。

set_state_dict(state_dict[, use_structured_name])

从state_dict设置参数和持久化缓冲区。

state_dict([destination, include_sublayers, ...])

获取当前层及其子层的所有参数和可持久化缓冲区。

sublayers([include_self])

返回子层的列表。

to([device, dtype, blocking])

通过给定的设备、数据类型和阻塞方式转换层的参数和缓冲区。

to_static_state_dict([destination, ...])

获取当前层及其子层的所有参数和缓冲区。

train()

将此层及其所有子层设置为训练模式。

向后

注册状态字典钩子

forward(query: ~paddle.Tensor, key: ~paddle.Tensor, value: ~paddle.Tensor, mask: ~paddle.Tensor = Tensor(shape=[0, 0, 0], dtype=bool, place=Place(cpu), stop_gradient=True,        []), pos_emb: ~paddle.Tensor = Tensor(shape=[0], dtype=float32, place=Place(cpu), stop_gradient=True,        []), cache: ~paddle.Tensor = Tensor(shape=[0, 0, 0, 0], dtype=float32, place=Place(cpu), stop_gradient=True,        [])) Tuple[Tensor, Tensor][来源]

计算缩放点积注意力。

参数:

query (paddle.Tensor): 查询张量 (#batch, time1, size). key (paddle.Tensor): 键张量 (#batch, time2, size). value (paddle.Tensor): 值张量 (#batch, time2, size). mask (paddle.Tensor): 掩码张量 (#batch, 1, time2) 或

(#batch, time1, time2). 1.当在解码器和编码器之间应用交叉注意力时,输入的批处理填充掩码形状为 (#batch, 1, T)。 2.当应用编码器的自注意力时,掩码的形状为 (#batch, T, T)。 3.当应用解码器的自注意力时,掩码的形状为 (#batch, L, L)。 4.如果解码器的不同位置看到编码器的不同块,例如 Mocha,传入的掩码可以是 (#batch, L, T) 形状。但在当前的 Wenet 中没有这样的情况。

cache (paddle.Tensor): Cache tensor (1, head, cache_t, d_k * 2),

其中 cache_t == chunk_size * num_decoding_left_chunkshead * d_k == size

Returns:

paddle.Tensor: 输出张量 (#batch, time1, d_model). paddle.Tensor: 缓存张量 (1, head, cache_t + time1, d_k * 2)

其中 cache_t == chunk_size * num_decoding_left_chunkshead * d_k == size

forward_attention(value: ~paddle.Tensor, scores: ~paddle.Tensor, mask: ~paddle.Tensor = Tensor(shape=[0, 0, 0], dtype=bool, place=Place(cpu), stop_gradient=True,        [])) Tensor[来源]

计算注意力上下文向量。

参数:

value (paddle.Tensor): Transformed value, size

(#batch, n_head, time2, d_k).

scores (paddle.Tensor): Attention score, size

(#batch, n_head, time1, time2).

mask (paddle.Tensor): Mask, size (#batch, 1, time2) or

(#batch, time1, time2), (0, 0, 0) 意味着假掩码。

Returns:
paddle.Tensor: Transformed value (#batch, time1, d_model)

根据注意力得分加权 (#batch, time1, time2)。

forward_qkv(query: Tensor, key: Tensor, value: Tensor) Tuple[Tensor, Tensor, Tensor][来源]

转换查询、键和值。
参数:

query (paddle.Tensor): 查询张量 (#batch, time1, size). key (paddle.Tensor): 键张量 (#batch, time2, size). value (paddle.Tensor): 值张量 (#batch, time2, size).

Returns:
paddle.Tensor: Transformed query tensor, size

(#batch, n_head, time1, d_k).

paddle.Tensor: Transformed key tensor, size

(#batch, n_head, time2, d_k).

paddle.Tensor: Transformed value tensor, size

(#batch, n_head, time2, d_k).

class paddlespeech.s2t.modules.attention.RelPositionMultiHeadedAttention(n_head, n_feat, dropout_rate, adaptive_scale=False, init_weights=False)[来源]

基础: MultiHeadedAttention

具有相对位置编码的多头注意力层。

方法

__call__(*inputs, **kwargs)

将self作为一个函数调用。

add_parameter(name, parameter)

添加一个参数实例。

add_sublayer(name, sublayer)

添加一个子层实例。

apply(fn)

递归地将 fn 应用到每个子层(由 .sublayers() 返回)以及自身。

buffers([include_sublayers])

返回当前层及其子层中的所有缓冲区的列表。

children()

返回一个迭代器,遍历直接子层。

clear_gradients()

清除此层所有参数的梯度。

create_parameter(shape[, attr, dtype, ...])

为该层创建参数。

create_tensor([name, persistable, dtype])

为该层创建张量。

create_variable([name, persistable, dtype])

为该层创建张量。

eval()

将该层及其所有子层设置为评估模式。

extra_repr()

该层的额外表示,您可以自定义实现自己的层。

forward(query, key, value[, mask, ...])

计算“缩放点积注意力”,带有相对位置编码。参数: query (paddle.Tensor): 查询张量 (#batch, time1, size)。 key (paddle.Tensor): 键张量 (#batch, time2, size)。 value (paddle.Tensor): 值张量 (#batch, time2, size)。 mask (paddle.Tensor): 掩码张量 (#batch, 1, time2) 或 (#batch, time1, time2),(0, 0, 0)表示虚假掩码。 pos_emb (paddle.Tensor): 位置嵌入张量 (#batch, time2, size)。 cache (paddle.Tensor): 缓存张量 (1, head, cache_t, d_k * 2),其中 cache_t == chunk_size * num_decoding_left_chunkshead * d_k == size 返回: paddle.Tensor: 输出张量 (#batch, time1, d_model)。 paddle.Tensor: 缓存张量 (1, head, cache_t + time1, d_k * 2),其中 cache_t == chunk_size * num_decoding_left_chunkshead * d_k == size

forward_attention(value, scores[, mask, ...])

计算注意力上下文向量。 参数: value (paddle.Tensor): 转换后的值,大小 (#batch, n_head, time2, d_k)。 scores (paddle.Tensor): 注意力得分,大小 (#batch, n_head, time1, time2)。 mask (paddle.Tensor): 掩码,大小 (#batch, 1, time2) 或 (#batch, time1, time2),(0, 0, 0) 表示假掩码。 返回: paddle.Tensor: 转换后的值 (#batch, time1, d_model) 按照注意力得分加权 (#batch, time1, time2)。

forward_qkv(query, key, value)

转换查询、键和值。参数: query (paddle.Tensor): 查询张量 (#batch, time1, size)。 key (paddle.Tensor): 键张量 (#batch, time2, size)。 value (paddle.Tensor): 值张量 (#batch, time2, size)。 返回: paddle.Tensor: 转换后的查询张量,大小 (#batch, n_head, time1, d_k)。 paddle.Tensor: 转换后的键张量,大小 (#batch, n_head, time2, d_k)。 paddle.Tensor: 转换后的值张量,大小 (#batch, n_head, time2, d_k)。

full_name()

此层的完整名称,由 name_scope + "/" + MyLayer.__class__.__name__ 组成

load_dict(state_dict[, use_structured_name])

从 state_dict 设置参数和可持久化缓存。

named_buffers([prefix, include_sublayers])

返回一个迭代器,遍历层中的所有缓冲区,生成名称和张量的元组。

named_children()

返回一个直接子层的迭代器,同时提供层的名称和层本身。

named_parameters([prefix, include_sublayers])

返回一个迭代器,遍历层中的所有参数,生成名称和参数的元组。

named_sublayers([prefix, include_self, ...])

返回Layer中所有子层的迭代器,生成名称和子层的元组。

parameters([include_sublayers])

返回当前层及其子层的所有参数的列表。

register_buffer(name, tensor[, persistable])

将一个张量注册为该层的缓冲区。

register_forward_post_hook(hook)

为层注册一个前向后钩子。

register_forward_pre_hook(hook)

为层注册一个前向预钩子。

rel_shift(x[, zero_triu])

计算相对位置编码。 参数: x (paddle.Tensor): 输入张量 (batch, head, time1, time1)。 zero_triu (bool): 如果为真,返回矩阵的下三角部分。 返回: paddle.Tensor: 输出张量。(batch, head, time1, time1)。

set_dict(state_dict[, use_structured_name])

从 state_dict 设置参数和可持久化的缓冲区。

set_state_dict(state_dict[, use_structured_name])

从state_dict设置参数和持久化缓冲区。

state_dict([destination, include_sublayers, ...])

获取当前层及其子层的所有参数和可持久化缓冲区。

sublayers([include_self])

返回子层的列表。

to([device, dtype, blocking])

通过给定的设备、数据类型和阻塞方式转换层的参数和缓冲区。

to_static_state_dict([destination, ...])

获取当前层及其子层的所有参数和缓冲区。

train()

将此层及其所有子层设置为训练模式。

向后

初始化权重

注册状态字典钩子

forward(query: ~paddle.Tensor, key: ~paddle.Tensor, value: ~paddle.Tensor, mask: ~paddle.Tensor = Tensor(shape=[0, 0, 0], dtype=bool, place=Place(cpu), stop_gradient=True,        []), pos_emb: ~paddle.Tensor = Tensor(shape=[0], dtype=float32, place=Place(cpu), stop_gradient=True,        []), cache: ~paddle.Tensor = Tensor(shape=[0, 0, 0, 0], dtype=float32, place=Place(cpu), stop_gradient=True,        [])) Tuple[Tensor, Tensor][来源]

计算 '缩放点积注意力' 及相对位置编码。
参数:

query (paddle.Tensor): 查询张量 (#batch, time1, size). key (paddle.Tensor): 键张量 (#batch, time2, size). value (paddle.Tensor): 值张量 (#batch, time2, size). mask (paddle.Tensor): 掩码张量 (#batch, 1, time2) 或

(#batch, time1, time2), (0, 0, 0) 意味着假掩码。

pos_emb (paddle.Tensor): Positional embedding tensor

(#batch, time2, size).

cache (paddle.Tensor): Cache tensor (1, head, cache_t, d_k * 2),

其中 cache_t == chunk_size * num_decoding_left_chunkshead * d_k == size

Returns:

paddle.Tensor: 输出张量 (#batch, time1, d_model). paddle.Tensor: 缓存张量 (1, head, cache_t + time1, d_k * 2)

其中 cache_t == chunk_size * num_decoding_left_chunkshead * d_k == size

init_weights()[来源]
rel_shift(x, zero_triu: bool = False)[来源]

计算相对位置编码。

参数:

x (paddle.Tensor): 输入张量 (批量, 头, 时间1, 时间1).

zero_triu (bool): 如果为真,返回下三角部分

矩阵。

Returns:

paddle.Tensor: 输出张量。 (batch, head, time1, time1)

class paddlespeech.s2t.modules.attention.RoPERelPositionMultiHeadedAttention(n_head, n_feat, dropout_rate, adaptive_scale=False, init_weights=False)[来源]

基础: MultiHeadedAttention

具有RoPE相对位置编码的多头注意力层。

方法

__call__(*inputs, **kwargs)

将self作为一个函数调用。

add_parameter(name, parameter)

添加一个参数实例。

add_sublayer(name, sublayer)

添加一个子层实例。

align(tensor, axes[, ndim])

重新对齐tensor(批量版expand_dims) axes:原来的第i维对齐新tensor的第axes[i]维; ndim:新tensor的维度。

apply(fn)

递归地将 fn 应用到每个子层(由 .sublayers() 返回)以及自身。

apply_rotary_position_embeddings(sinusoidal, ...)

应用RoPE到tensors中 其中,sinusoidal.shape=[B, T, D],tensors为tensor的列表,而 tensor.shape=[B, T, ..., D], or (B,H,T,D/H)

buffers([include_sublayers])

返回当前层及其子层中的所有缓冲区的列表。

children()

返回一个迭代器,遍历直接子层。

clear_gradients()

清除此层所有参数的梯度。

create_parameter(shape[, attr, dtype, ...])

为该层创建参数。

create_tensor([name, persistable, dtype])

为该层创建张量。

create_variable([name, persistable, dtype])

为该层创建张量。

eval()

将该层及其所有子层设置为评估模式。

extra_repr()

该层的额外表示,您可以自定义实现自己的层。

forward(query, key, value[, mask, ...])

计算“缩放点积注意力”带有相对位置编码。参考: https://github.com/facebookresearch/llama/blob/main/llama/model.py 参数: query (paddle.Tensor): 查询张量 (#batch, time1, size)。 key (paddle.Tensor): 键张量 (#batch, time2, size)。 value (paddle.Tensor): 值张量 (#batch, time2, size)。 mask (paddle.Tensor): 掩码张量 (#batch, 1, time2) 或 (#batch, time1, time2), (0, 0, 0) 表示假掩码。 pos_emb (paddle.Tensor): 位置嵌入张量 (#batch, time2, size)。 cache (paddle.Tensor): 缓存张量 (1, head, cache_t, d_k * 2),其中 cache_t == chunk_size * num_decoding_left_chunkshead * d_k == size 返回: paddle.Tensor: 输出张量 (#batch, time1, d_model)。 paddle.Tensor: 缓存张量 (1, head, cache_t + time1, d_k * 2) 其中 cache_t == chunk_size * num_decoding_left_chunkshead * d_k == size.

forward_attention(value, scores[, mask, ...])

计算注意力上下文向量。 参数: value (paddle.Tensor): 转换后的值,大小 (#batch, n_head, time2, d_k)。 scores (paddle.Tensor): 注意力得分,大小 (#batch, n_head, time1, time2)。 mask (paddle.Tensor): 掩码,大小 (#batch, 1, time2) 或 (#batch, time1, time2),(0, 0, 0) 表示假掩码。 返回: paddle.Tensor: 转换后的值 (#batch, time1, d_model) 按照注意力得分加权 (#batch, time1, time2)。

forward_qkv(query, key, value)

转换查询、关键字和值。参数: query (paddle.Tensor): 查询张量 (#batch, time1, size)。 key (paddle.Tensor): 关键字张量 (#batch, time2, size)。 value (paddle.Tensor): 值张量 (#batch, time2, size)。 返回: paddle.Tensor: 转换后的查询张量,大小 (#batch, n_head, time1, d_k)。 paddle.Tensor: 转换后的关键字张量,大小 (#batch, n_head, time2, d_k)。 paddle.Tensor: 转换后的值张量,大小 (#batch, n_head, time2, d_k)。

full_name()

此层的完整名称,由 name_scope + "/" + MyLayer.__class__.__name__ 组成

load_dict(state_dict[, use_structured_name])

从 state_dict 设置参数和可持久化缓存。

named_buffers([prefix, include_sublayers])

返回一个迭代器,遍历层中的所有缓冲区,生成名称和张量的元组。

named_children()

返回一个直接子层的迭代器,同时提供层的名称和层本身。

named_parameters([prefix, include_sublayers])

返回一个迭代器,遍历层中的所有参数,生成名称和参数的元组。

named_sublayers([prefix, include_self, ...])

返回Layer中所有子层的迭代器,生成名称和子层的元组。

parameters([include_sublayers])

返回当前层及其子层的所有参数的列表。

register_buffer(name, tensor[, persistable])

将一个张量注册为该层的缓冲区。

register_forward_post_hook(hook)

为层注册一个前向后钩子。

register_forward_pre_hook(hook)

为层注册一个前向预钩子。

set_dict(state_dict[, use_structured_name])

从 state_dict 设置参数和可持久化的缓冲区。

set_state_dict(state_dict[, use_structured_name])

从state_dict设置参数和持久化缓冲区。

state_dict([destination, include_sublayers, ...])

获取当前层及其子层的所有参数和可持久化缓冲区。

sublayers([include_self])

返回子层的列表。

to([device, dtype, blocking])

通过给定的设备、数据类型和阻塞方式转换层的参数和缓冲区。

to_static_state_dict([destination, ...])

获取当前层及其子层的所有参数和缓冲区。

train()

将此层及其所有子层设置为训练模式。

向后

注册状态字典钩子

align(tensor: Tensor, axes: List[int], ndim=None)[来源]

重新对齐tensor(批量版expand_dims) axes:原来的第i维对齐新tensor的第axes[i]维; ndim:新tensor的维度。

apply_rotary_position_embeddings(sinusoidal, *tensors)[来源]

应用RoPE到tensors中 其中,sinusoidal.shape=[B, T, D],tensors为tensor的列表,而 tensor.shape=[B, T, ..., D], or (B,H,T,D/H)

forward(query: ~paddle.Tensor, key: ~paddle.Tensor, value: ~paddle.Tensor, mask: ~paddle.Tensor = Tensor(shape=[0, 0, 0], dtype=bool, place=Place(cpu), stop_gradient=True,        []), pos_emb: ~paddle.Tensor = Tensor(shape=[0], dtype=float32, place=Place(cpu), stop_gradient=True,        []), cache: ~paddle.Tensor = Tensor(shape=[0, 0, 0, 0], dtype=float32, place=Place(cpu), stop_gradient=True,        [])) Tuple[Tensor, Tensor][来源]

计算“缩放点积注意力”与相对位置编码。 参考: https://github.com/facebookresearch/llama/blob/main/llama/model.py 参数:

query (paddle.Tensor): 查询张量 (#batch, time1, size). key (paddle.Tensor): 键张量 (#batch, time2, size). value (paddle.Tensor): 值张量 (#batch, time2, size). mask (paddle.Tensor): 掩码张量 (#batch, 1, time2) 或

(#batch, time1, time2), (0, 0, 0) 意味着假掩码。

pos_emb (paddle.Tensor): Positional embedding tensor

(#batch, time2, size).

cache (paddle.Tensor): Cache tensor (1, head, cache_t, d_k * 2),

其中 cache_t == chunk_size * num_decoding_left_chunkshead * d_k == size

Returns:

paddle.Tensor: 输出张量 (#batch, time1, d_model). paddle.Tensor: 缓存张量 (1, head, cache_t + time1, d_k * 2)

其中 cache_t == chunk_size * num_decoding_left_chunkshead * d_k == size