我有一个完全工作的 seq2seq 注意力模型,带有光束搜索,它确实提供了改进的结果。但是在 k=5(k 是我的假设)的情况下进行推理(批量大小 1024)需要 > 1 分钟,因为它们都没有被并行化。一切都一次发生 1 个样本。
任务(简体)
目标是句子翻译,15 个单词 Lang A 到 15 个单词 Lang B。
- 编码器是一个 RNN,它接收 15 个单词的句子并对它的表示进行编码,给出一个 [timestep, 512] 矩阵以及最终的隐藏状态。
- 解码器是另一种 RNN,将编码器隐藏状态作为初始状态,使用 [timestep, 512] 矩阵进行注意力,并输出翻译后的单词 [batch] 一次一个时间步长。当然,到目前为止,还有某种形式的并行化。
- 在推理阶段,使用波束搜索。在解码器的每个时间步,我不是采用概率最高的预测词,而是采用 k 个最佳词。并提供 k 个单词作为下一个时间步的输入,以便它可以预测句子中的下一个单词(算法的其余部分如下所示)。算法使得解码不那么贪婪地预测结果,在后续时间步中具有更高的总概率。
for each element in the test-set
calculate initial k (decoder-encoder step)
for range(timesteps-1)
for each prev k
get hidden state
obtain its best k
save hidden state
find new k from k*k possible ones
##update hypotheses based on new found k
for element in k
copy hidden state
change hypotheses if necessary
append new k to hypotheses
有 6 个张量和 2 个列表来跟踪和处理状态变化。这里有加速或并行化的空间吗?也许每个 k 可以同时通过编码解码?任何帮助深表感谢。