Encoder
cnn_encoder
CNN编码器模块
- class mindnlp.modules.encoder.cnn_encoder.CNNEncoder(embedding, convs, conv_layer_activation=Tanh<>, output_dim=None)[源代码]
基类:
EncoderBaseCNN编码器。
由`len(卷积)`层组成的卷积编码器。
- 参数
embedding (Cell) – 嵌入层
convs (list[Cell]) – 卷积单元的列表。
conv_layer_activation (Module) – 在卷积层之后使用的激活操作。
output_dim (int) – 卷积和合并后收集的特征的输出向量。如果此值为空值,则返回最大池化的结果,即输出形状。
- 抛出
TypeError – 如果`embedding`不是一个Cell对象。
TypeErrpr – 如果`convs`不是一个list[Cell]对象。
TypeError – 如果`conv_layer_activation`不是一个Module对象。
TypeError – 如果``output_dim`不是一个int对象。
RuntimeError – 如果`embedding`为空值。
RuntimeError – 如果`convs`为空值。
示例
>>> vocab_size = 1000 >>> embedding_size = 32 >>> num_filter = 128 >>> ngram_filter_sizes = (2, 3, 4, 5) >>> output_dim = 16 >>> embedding = nn.Embedding(vocab_size, embedding_size) >>> convs = [ ... nn.Conv2d(in_channels=1, ... out_channels=num_filter, ... kernel_size=(i, embedding_size), ... pad_mode="pad") for i in ngram_filter_sizes ... ] >>> cnn_encoder = CNNEncoder(embedding, convs, output_dim=output_dim) >>> src_tokens = Tensor(np.ones([8, 16]), mindspore.int32) >>> result = cnn_encoder(src_tokens) >>> print(result.shape) (8, 16)
- construct(src_token, src_length=None, mask=None)[源代码]
CNN编码器的析构函数。
- 参数
src_token (Tensor) – 源语言中的token,shape为[batch, max_len]。
mask (Tensor) – 用于判断对应的输入token是否为padding部分。若值为1,则不是padding部分;若值为0,则是padding部分。默认值:None
- 返回
向量,如果`output_dim`为空值,则结果形状为`(batch_size, len(convs) * num_filter)`,数据类型为`float`;如果不是,则结果形状为`(batch_size, output_dim)`。
rnn_encoder
RNN编码器模块
- class mindnlp.modules.encoder.rnn_encoder.RNNEncoder(embedding, rnn)[源代码]
基类:
EncoderBase循环神经网络(RNN)编码器
- 参数
embedding (Cell) – 嵌入层
rnn (Cell) – RNN层
示例
>>> vocab_size = 1000 >>> embedding_size = 32 >>> hidden_size = 16 >>> num_layers = 2 >>> has_bias = True >>> dropout = 0.1 >>> bidirectional = False >>> embedding = nn.Embedding(vocab_size, embedding_size) >>> rnn = nn.RNN(embedding_size, hidden_size, num_layers=num_layers, has_bias=has_bias, ... batch_first=True, dropout=dropout, bidirectional=bidirectional) >>> rnn_encoder = RNNEncoder(embedding, rnn) >>> src_tokens = Tensor(np.ones([8, 16]), mindspore.int32) >>> src_length = Tensor(np.ones([8]), mindspore.int32) >>> mask = Tensor(np.ones([8, 16]), mindspore.int32) >>> output, hiddens_n, mask = rnn_encoder(src_tokens, src_length, mask=mask) >>> print(output.shape) >>> print(hiddens_n.shape) >>> print(mask.shape) (8, 16, 16) (2, 8, 16) (8, 16)
- construct(src_token, src_length=None, mask=None)[源代码]
Cell的construct方法
- 参数
src_token (Tensor) – 源语言中的token,shape为[batch, max_len]。
src_length (Tensor) – 输入batch的序列长度,shape为[batch]。
mask (Tensor) – 用于判断对应的输入token是否为padding部分。若值为1,则不是padding部分;若值为0,则是padding部分。默认值:None
- 返回
Tuple类型,返回一个包含(output, hiddens_n, mask)的tuple。 - output (Tensor): shape为(seq_len, batch_size, num_directions * hidden_size)的Tensor。 - hiddens_n (Tensor): shape为(num_directions * num_layers, batch_size, hidden_size)的Tensor。 - mask (Tensor): 需要在解码器中使用的Mask Tensor。
transformer_encoder
Encoder class