Gui*_*ier 3 python deep-learning lstm tensorflow word-embedding
我想构建一个带有特殊词嵌入的 LSTM,但我对其如何工作有一些疑问。
您可能知道,一些 LSTM 对字符进行操作,因此它是字符输入,字符输出。我想做同样的事情,对单词进行抽象,以使用嵌套的 LSTM 来学习对它们的鲁棒嵌入,以抵抗轻微的字符级错误。
因此,一个微小的 LSTM 会在单词的每个字母上展开,然后这将创建单词的嵌入。然后,句子中的每个嵌入单词都将作为输入提供给更高级别的 LSTM,该级别 LSTM 将在每个时间步对单词级别进行操作,而不是对字符进行操作。
问题: - 我再也找不到谈论这个的研究论文了。如果你知道我在说什么,我想为我想做的事情命名。- 是否已经存在一些 TensorFlow 开源代码?- 否则,您对如何实施有想法吗?神经网络的输出可能更难处理,因为我们需要撤消单词嵌入,以使用输出嵌套 LSTM 对字符进行训练。整个事情应该作为一个单元进行一次训练(工作流程:LSTM 字符输入,LSTM 字符输入,LSTM 字符输出)。
我猜这rnn_cell.MultiRNNCell会将 LSTM 堆叠在一起而不是嵌套它们。
否则,您会建议将嵌入(输入和输出)训练为主 LSTM 之外的自动编码器吗?
小智 5
我不知道你指的论文。
但这里有一个关于我将如何在 TensorFlow 中实现这样的东西的想法:
您可以创建 2 个LSTMCells。
如果您想支持每个单词的可变字符数和每个序列的可变单词数,您可以复制和调整 dynamic_rnn 的代码(参见 rnn.py)。您可以创建嵌套的 while 循环,而不是单个 while 循环。内部操作调用第一个 LSTMCell 并在每个单词后重置状态的字符。外层操作嵌入的字(内循环的输出)并调用第二个 LSTMCell。
通常,您是否应该单独训练嵌入取决于您有多少可用数据。如果您没有大量数据训练,单独嵌入(在可能不同的数据集上)可能是有意义的。如果你负担得起并且你的模型训练得很好,那么训练嵌入和你的整个网络会有好处,因为字符的含义可以是特定于任务的。
但我想知道这种方法与首先进行拼写校正然后使用标准词嵌入相比如何。然后你可以使用一些标准的嵌入工具和一个带有 dynamic_rnn 的 LSTMCell。