【问题标题】:Tensorflow sequence-to-sequence LSTM within LSTM (nested)LSTM中的Tensorflow序列到序列LSTM(嵌套)
【发布时间】:2016-10-20 09:37:54
【问题描述】:

我想构建一个带有特殊词嵌入的 LSTM,但我对它的工作原理有一些疑问。

您可能知道,一些 LSTM 对字符进行操作,因此它是字符输入,字符输出。我也想做同样的事情,对单词进行抽象,以通过嵌套的 LSTM 学习强大的嵌入,以抵抗轻微的字符级错误。

因此,一个微小的 LSTM 会在单词的每个字母上展开,然后这将创建单词的嵌入。然后将句子中的每个嵌入单词作为输入馈送到更高级别的 LSTM,该 LSTM 将在每个时间步在单词级别上操作,而不是在字符上操作。

问题: - 我再也找不到谈论那个的研究论文了。如果你知道我在说什么,我想给我想做的事情起个名字。 - 是否已经存在一些 TensorFlow 开源代码? - 否则,您对如何实现它有想法吗?神经网络的输出可能更难处理,因为我们需要撤消词嵌入以使用输出嵌套 LSTM 对字符进行训练。整个事情应该作为一个单元训练一次(工作流程:LSTM chars in,LSTM on words,LSTM chars out)。

我猜rnn_cell.MultiRNNCell 会将 LSTM 堆叠在一起而不是嵌套它们。

您是否会建议将嵌入(输入和输出)训练为主 LSTM 之外的自动编码器?

【问题讨论】:

    标签: python tensorflow deep-learning lstm word-embedding


    【解决方案1】:

    您可能在谈论this paper。他们似乎没有发布他们的代码..

    我认为您不必“撤消词嵌入”,因为您可以同时针对两个目标进行训练:

    • 对于每个单词,相对于单词的真实字符,产生的字符损失一次。 CE 损失看起来很好。
    • 相对于编码器中产生的词嵌入(通过应用于字符的外部 LSTM),解码器中产生的“词嵌入”(由内部 LSTM)产生的一个损失。例如,我正在考虑 MSE 损失。

    (有意义吗?)

    出于好奇,您是否设法实现了这个想法?我打算在 Pytorch 中尝试一下

    【讨论】:

      【解决方案2】:

      我不知道你指的是哪篇论文。

      但这里有一个关于如何在 TensorFlow 中实现类似的想法:

      您可以创建 2 个LSTMCells

      如果您想支持每个单词的可变数量的字符和每个序列的可变数量的单词,您可以复制和调整 dynamic_rnn 的代码(参见 rnn.py) 您将创建一个嵌套的 while 循环,而不是单个 while 循环。内部操作调用第一个 LSTMCell 并在每个单词之后重置状态的字符。外层对嵌入的单词(内层循环的输出)进行操作并调用第二个 LSTMCell。

      通常,您是否应该单独训练嵌入取决于您有多少可用数据。如果您没有大量数据训练单独的嵌入(在可能不同的数据集上)可能是有意义的。如果您负担得起并且您的模型训练良好,那么与整个网络一起训练嵌入可能会带来好处,因为字符的含义可以是特定于任务的。

      但我想知道这种方法与首先进行拼写纠正然后使用标准词嵌入相比如何。然后你可以使用一些standard embedding tools 和一个带有dynamic_rnn 的LSTMCell。

      【讨论】:

        猜你喜欢
        • 2021-02-21
        • 2018-04-13
        • 1970-01-01
        • 1970-01-01
        • 2017-05-28
        • 1970-01-01
        • 2019-06-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多