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⚠️学不会打我! 半小时学会基本操作 8⚠️ 新闻分类