NLP学不会打我 半小时学会基本操作 11 Seq2Seq 代码实战

Posted 我是小白呀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NLP学不会打我 半小时学会基本操作 11 Seq2Seq 代码实战相关的知识,希望对你有一定的参考价值。

【NLP】学不会打我 半小时学会基本操作 11 Seq2seq 实战

概述

从今天开始我们将开启一段自然语言处理 (NLP) 的旅程. 自然语言处理可以让来处理, 理解, 以及运用人类的语言, 实现机器语言和人类语言之间的沟通桥梁.

Seq2seq

Seq2seq 由 Encoder 和 Decoder 两个 RNN 组成. Encoder 将变长序列输出, 编码成 encoderstate 再由 Decoder 输出变长序列.

Encoder 实现

class Encoder(tf.keras.Model):
    """
    定义Encoder
    """

    def __init__(self):
        super(Encoder, self).__init__()

        # embedding层, 将字母转换为向量
        self.embedding = tf.keras.layers.Embedding(VOCAB_SIZE, EMBEDDING_DIM)

        # LSTM层
        self.lstm = tf.keras.layers.LSTM(256, return_state=True, return_sequences=True)

    def call(self, inputs, **kwargs):
        
        # Embedding
        out = self.embedding(inputs)
        output, state_h, state_c = self.lstm(out)

        # 返回结果, 状态
        return output, state_h, state_c

Decoder 实现

class Decoder(tf.keras.Model):
    """
    定义Decoder
    """

    def __init__(self):
        super(Decoder, self).__init__()

        # Embedding层, 将字母转换为向量
        self.embedding = tf.keras.layers.Embedding(VOCAB_SIZE, EMBEDDING_DIM)

        # LSTM层
        self.lstm = tf.keras.layers.LSTM(256, return_state=True, return_sequences=True)

        # 注意力层
        self.attention = tf.keras.layers.Attention()

    def call(self, inputs, **kwargs):

        # 获取状态
        state = kwargs.get('state')

        # Embedding层
        x = self.embedding(inputs)

        # LSTM层
        output, state_h, state_c = self.lstm(x, initial_state=state)

        return output, state_h, state_c

Seq2Seq 模型

def Seq2Seq():
    """
    seq2seq 模型
    """

    # 输入层
    encoder_inputs = tf.keras.Input(shape=(MAX_LENGTH,), name="encode_input")
    decoder_inputs = tf.keras.Input(shape=(None,), name="decode_input")

    # Encoder
    encoder = Encoder()
    enc_outputs, enc_state_h, enc_state_c = encoder(encoder_inputs)
    dec_states_inputs = [enc_state_h, enc_state_c]

    # Decoder
    decoder = Decoder()
    attention_output, dec_state_h, dec_state_c = decoder(decoder_inputs, state=dec_states_inputs)

    # 全连接层
    dense_outputs = tf.keras.layers.Dense(VOCAB_SIZE, activation='softmax', name="dense")(attention_output)

    # 创建模型
    model = Model(inputs=[encoder_inputs, decoder_inputs], outputs=dense_outputs)

    return model

以上是关于NLP学不会打我 半小时学会基本操作 11 Seq2Seq 代码实战的主要内容,如果未能解决你的问题,请参考以下文章

NLP⚠️学不会打我! 半小时学会基本操作 10⚠️ Seq2seq

NLP学不会打我 半小时学会基本操作 13 孪生网络

NLP学不会打我 半小时学会基本操作 12 命名实例提取

NLP⚠️学不会打我! 半小时学会基本操作 8⚠️ 新闻分类

NLP⚠️学不会打我! 半小时学会基本操作 8⚠️ 新闻分类

NLP⚠️学不会打我! 半小时学会基本操作 1⚠️ 分词