首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Keras --如何使用所学的Embedding()层进行输入和输出?

Keras --如何使用所学的Embedding()层进行输入和输出?
EN

Stack Overflow用户
提问于 2017-02-15 15:47:42
回答 1查看 4.8K关注 0票数 4

我想训练一个生成文本的模型,类似于这篇博客文章

据我所知,该模型使用了以下体系结构

->嵌入-> LSTM -> 1热编码“下一个单词”的词义序列

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

我想把这个过程建模为回归问题,方法是重用所学的嵌入,然后最小化预测和实际嵌入之间的距离。

基本上:

->嵌入-> LSTM ->嵌入序列-下一个单词的向量

我的问题是,当模型正在动态地学习嵌入式时,我如何才能像输入(作为单词索引)那样提供输出,然后告诉模型“但是在使用输出之前,用它的嵌入向量替换它”?

非常感谢大家的帮助:-)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-16 06:07:56

训练阶段的

您可以使用两个输入(一个用于目标,一个用于输入,这两个序列之间的偏移量为1)并重用嵌入层。如果输入的句子是1,2,3,4,可以从它生成两个序列: in = 1,2,3,out = 2,3,4。然后可以使用Keras的functional重用嵌入层:

代码语言:javascript
复制
emb1 = Embedding(in)
emb2 = Embedding(out)
predict_emb = LSTM(emb1)
loss = mean_squared_error(emb2, predict_emb)

注意,这不是Keras代码,只是伪代码。

测试阶段的

通常,您需要编写自己的解码函数。首先,你选择一个单词(或几个词)开始。然后,将这个单词(或短的单词序列)提供给网络,以预测下一个单词的嵌入。在这一步中,您可以定义自己的示例函数,例如:您可能希望选择嵌入与预测词最近的单词作为下一个单词,或者您可能希望从一个分布中抽取下一个单词,在该分布中,嵌入更接近预测嵌入的单词被选择的概率更大。一旦您选择了下一个单词,然后将其提供给网络,并预测下一个单词,等等。

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

如果上述语句对您来说太抽象了,下面是一个很好的示例:generation.py

第85行是导论部分,从语料库中随机选取一小块文本进行研究。在第90行中有一个循环,每个步骤都采样一个字符(这是一个char-rnn,所以每个时间步骤都输入一个字符。对于您的情况,应该是一个单词,而不是char):L95预测下一个char的分布,L96样本来自发行版。希望这已经足够清楚了。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42253934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档