Python Keras-如何使用学习的嵌入()层进行输入和输出?

Python Keras-如何使用学习的嵌入()层进行输入和输出?,python,tensorflow,deep-learning,keras,lstm,Python,Tensorflow,Deep Learning,Keras,Lstm,我想训练一个模型来生成文本,类似于 据我所知,该模型使用以下体系结构 [字索引顺序]->[嵌入]->[LSTM]->[1热编码的“下一个字”] 基本上,作者将该过程建模为分类问题,其中输出层的维度与语料库中的单词数量相同 我想将这个过程建模为回归问题,通过重新使用学习到的嵌入,然后最小化预测嵌入和实际嵌入之间的距离 基本上: [字索引顺序]->[嵌入]->[LSTM]->[下一个字的嵌入向量] 我的问题是,当模型正在动态学习嵌入时,我怎么能像输入一样输入输出(作为单词索引),然后告诉模型“但是

我想训练一个模型来生成文本,类似于

据我所知,该模型使用以下体系结构
[字索引顺序]->[嵌入]->[LSTM]->[1热编码的“下一个字”]

基本上,作者将该过程建模为分类问题,其中输出层的维度与语料库中的单词数量相同


我想将这个过程建模为回归问题,通过重新使用学习到的嵌入,然后最小化预测嵌入和实际嵌入之间的距离

基本上:

[字索引顺序]->[嵌入]->[LSTM]->[下一个字的嵌入向量]

我的问题是,当模型正在动态学习嵌入时,我怎么能像输入一样输入输出(作为单词索引),然后告诉模型“但是在使用输出之前,用嵌入向量替换它”



非常感谢您在培训阶段提供的所有帮助:-)

您可以使用两个输入(一个用于目标,一个用于输入,这两个序列之间的偏移量为1)并重用嵌入层。 若你们输入的句子是[1,2,3,4],你们可以从中生成两个序列:in=[1,2,3],out=[2,3,4]。然后您可以使用Keras的函数API重用嵌入层:

emb1 = Embedding(in)
emb2 = Embedding(out)
predict_emb = LSTM(emb1)
loss = mean_squared_error(emb2, predict_emb)
注意,这不是Keras代码,只是伪代码

测试阶段:

通常,您需要编写自己的解码函数。首先,你选择一个词(或几个词)作为开始。然后,将这个单词(或短单词序列)输入网络,以预测下一个单词的嵌入。在这一步中,您可以定义自己的样本函数,比如:您可能希望选择嵌入距离预测单词最近的单词作为下一个单词,或者您可能希望从分布中采样下一个单词,在该分布中,嵌入距离预测嵌入较近的单词被选择的概率较大。一旦你选择了下一个单词,然后将其输入网络并预测下一个单词,以此类推

因此,您需要一次生成一个单词(换言之,一个嵌入),而不是将整个序列输入网络。

如果上述陈述对您来说过于抽象,下面是一个很好的例子:


第85行是引言部分,从语料库中随机选取一小段文本进行研究。从第90行开始,有一个循环,其中每个步骤对一个字符进行采样(这是一个字符rnn,因此每个时间步输入一个字符。对于您的情况,它应该是一个字,而不是一个字符):L95预测下一个字符的分布,L96从分布中采样。希望这足够清楚。

非常感谢,这对培训很有意义!但在运行时该怎么做呢?当我想预测“输出”而不是将其反馈给网络时?你是否成功了?如果是这样的话,任何指向代码/博客的链接(甚至是一个自我答案)——正确标记的答案只显示分类方法,而不是你想要做的回归方法。