4

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

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

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

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

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

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

4

2 回答 2

5

我不知道你指的论文。

但这里有一个关于我如何在 TensorFlow 中实现这样的东西的想法:

您可以创建 2 个LSTMCells

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

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

但我想知道这种方法与首先进行拼写更正然后使用标准词嵌入相比如何。然后,您可以使用一些标准的嵌入工具和带有 dynamic_rnn 的单个 LSTMCell。

于 2016-06-21T01:30:01.420 回答
1

您可能正在谈论这篇论文。他们似乎没有发布他们的代码..

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

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

(是否有意义?)

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

于 2018-04-05T12:45:57.267 回答