我想用注意机制实现Q& A系统。我有两个输入;形状为context
和query
的{{1}}和(batch_size, context_seq_len, embd_size)
我正在关注以下文件。
使用Match-LSTM和答案指针的机器理解。 https://arxiv.org/abs/1608.07905
然后,我想获得一个形状为(batch_size, query_seq_len, embd_size)
的注意力矩阵。在论文中,他们计算每一行的值(这意味着论文中的每个上下文单词,G_i,alpha_i)。
我的代码在下方并且正在运行。但我不确定我的方式是好还是不好。例如,我使用(batch_size, context_seq_len, query_seq_len, embd_size)
生成序列数据(for loop
)。为了获得每一行,我使用像for i in range(T):
那样的就地操作符,G[:,i,:,:]
在pytorch中是一个好方法吗?如果没有,我应该在哪里更改代码?
如果你注意到其他问题,请告诉我。我是这个领域的新手和pytorch。对不起我的含糊不清的问题。
embd_context[:,i,:].clone()
答案 0 :(得分:1)
我认为您的代码很好。您无法避免循环:for i in range(T):
,因为在论文(https://openreview.net/pdf?id=B1-q5Pqxl)中的等式(2)中,存在来自Match-LSTM单元的隐藏状态,该状态涉及计算{{} 1}}和G_i
向量,它们用于计算Match-LSTM的下一个时间步的输入。因此,您需要为Match-LSTM的每个时间步执行循环,我还没有看到另一种方法来避免alpha_i
循环。