Encoder

cnn_encoder

CNN编码器模块

class mindnlp.modules.encoder.cnn_encoder.CNNEncoder(embedding, convs, conv_layer_activation=Tanh<>, output_dim=None)[源代码]

基类:EncoderBase

CNN编码器。

由`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)`。

get_input_dim()[源代码]

返回输入向量的维数

get_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。

reorder_encoder_out(encoder_out, new_order)[源代码]

根据`new_order`重新排序编码器的输出顺序

参数
  • encoder_out (Union[Tensor, tuple]) – 编码器的输出

  • new_order (Tensor) – 预期的顺序

返回

Tuple类型,返回根据`new_order`重新排列的编码器输出

transformer_encoder

Encoder class