多层注意力网络机制(Hierarchical Attention Network)

发布于:2023-02-02 ⋅ 阅读:(848) ⋅ 点赞:(0)

该层次attention模型总共分为3层

  • word sequence encoder + word-level attention layer

  • line encoder + line-level attention layer

  • hunk sequence encoder + hunk attention layer

模型结构如下:

 Word encoder.给定一行 𝑠𝑖𝑗,其中包含单词序列 𝑤𝑖𝑗𝑘,我们使用双向 GRU 来从两个方向的单词上下文中总结信息。为了捕获此上下文信息,双向 GRU 包括一个前向 GRU,它从𝑤𝑖𝑗1 到𝑤𝑖𝑗𝑊 读取行𝑠𝑖𝑗,以及一个从𝑤𝑖𝑗从𝑤𝑖𝑗读取行的反向 GRU。ℎ𝑖𝑗𝑘总结了单词𝑤𝑖𝑗𝑘并考虑了它的邻接单词。

Word attention.基于邻接词对于预测结果并不全都是同等重要的,我们使用注意机制来突出对预测很重要的单词日志消息的内容和行嵌入向量。首先,通过一个全连接层以获得隐藏的表示。

其中 ReLU 是校正后的线性单元激活函数。定义一个词向量,能够固定回答“什么是最有用的词”。词向量是随机初始化的,且在训练过程中进行学习。然后,我们将𝑢𝑖𝑗𝑘与单词上下文向量𝑢𝑤的相似度作为单词的重要性衡量,并通过softmax函数获得归一化的重要性权重𝛼𝑖𝑗𝑘:

最后,对于每一行𝑠𝑖𝑗,其向量根据词的重要性计算为词嵌入向量的加权和,输入到Line encoder层,如下所示:

 Line encoder.和word encoder相似,同样使用了双向GRU从两个方向的单词上下文中总结信息并考虑了它的邻接单词。

Line attention.我们使用注意力机制来学习用于形成一个大块向量的重要线,如下所示:W𝑠 是我们需要向其提供给定线注释的完全连接层(即𝑠𝑖𝑗). 我们定义𝑢𝑠 作为行上下文向量,可以被视为固定查询“什么是信息行”答案的高级表示。𝑢𝑠 在训练过程中随机初始化并学习。𝑡𝑖 是𝑖-删除(添加)代码中的i-th hunk的大块向量。

 Hunk encoder.给定一个大块向量ti,继续使用双向GRU形成移除(添加)代码的嵌入向量,如下所示:

 Hunk attention.我们再次使用注意力机制学习用于形成移除(添加)代码嵌入向量的重要大块,如下所示:

 Wh是用于为给定hunk提供注释的完全连接层(即ℎ𝑖). 𝑢𝑡 是一个大块头上下文向量,它可以被视为对固定查询“什么是有信息的大块头”的答案的高级表示。类似𝑢𝑤 和𝑢𝑠 , 𝑢𝑡 在训练过程中随机初始化和学习。e, 本部分末尾收集的是删除(添加)代码的嵌入向量。为了方便起见,我们表示e𝑟 和e𝑎 分别作为删除代码和添加代码的嵌入向量


网站公告

今日签到

点亮在社区的每一天
去签到