我正在尝试开发一种神经网络,它将根据上下文向量(标签的一键编码数组)生成短句。
简化的输入向量-[isCat?,isFish?,isDog?,hasFurr?]
输出向量-['数字,数字,数字,数字...']-数字表示词汇索引。
示例输入: [0,0,1,1]-狗
示例输出: [“真是个好狗狗!”,“他肯定喜欢吃”]
示例输入: [1,0,0,1]-猫
示例输出: ['Kinda cute cat :)','Meow meow meow!']
哪种架构最适合我的需求?
我已经阅读了一些文章并通过了教程,但通常有Seq2Seq(编码器-解码器)模型。我认为情况并非如此,因为我没有一系列输入,并且标签对顺序不敏感。
到目前为止,我已经收集了所有数据,矢量化的输入和输出-句子以词汇索引(大约5000个单词)表示-并尝试在不使用任何RNN的情况下制作了DNN,但效果确实很差。 / p>
我是ML的初学者,但我认为应该有一些RNN(LSTM,GRU),它的标记用作输入,弹出一些单词并传递内部状态 (之前的单词+标记输入)和单词输出到下一次迭代,直到达到预期的句子长度。但是我不确定如何实现这一目标。
我的简单DNN方法无法解决的示例。它使用长度为input_size的标签数组,并返回10个单词的句子,其中3490是当前词汇量。接受了大约1万个句子的训练。
model = keras.Sequential([
keras.layers.Dense(512, activation=tf.nn.relu, input_shape=(input_size,)),
keras.layers.Dense(512, activation=tf.nn.relu),
keras.layers.Dense(512, activation=tf.nn.relu),
keras.layers.Dense(34900, activation=None),
keras.layers.Reshape((10, 3490)),
keras.layers.Activation("softmax")])