为文本摘要模型添加注意力机制:采用LSTM的编解码器模型实现(二)

简介: 为文本摘要模型添加注意力机制:采用LSTM的编解码器模型实现(二)

添加一些注意力

首先,我们需要了解什么是注意力。

为了在时间步长t生成一个单词,我们需要对输入序列中的每个单词给予多少关注?这就是注意力机制概念背后的关键直觉。

让我们用一个简单的例子来理解这一点:

Question: In the last decade, *who* is the best *Footballer*?

Answer: *Lionel Messi* is the best *player*.

在上面的例子中,问题中的第五个单词和梅西有关,第九个单词足球运动员和第六个单词球员有关。

因此,我们可以增加源序列中产生目标序列的特定部分的重要性,而不是查看源序列中的所有单词。这是注意力机制背后的基本思想。

根据被关注上下文向量的推导方式,有两种不同的注意机制:

Global Attention

在这里,注意力被放在所有的源位置上。换句话说,为了得到参与的上下文向量,我们考虑了编码器的所有隐藏状态。在这个总结任务中,我们将使用Global Attention。

Local Attention

在这里,注意力只放在几个源位置上。在推导参与上下文向量时,只考虑编码器的少数隐藏状态。

现在让我们了解这种注意力是如何真正起作用的:

编码器输出源序列中每个时间步长j的隐藏状态(hj)同样,解码器输出目标序列中每一个时间步长i的隐藏状态(si)我们计算一个称为对齐分数(eij)的分数,在这个分数的基础上,使用一个评分函数将源单词与目标单词对齐。利用score函数从源隐藏状态hj和目标隐藏状态si计算对齐得分。由:

image.png

其中eij为目标时间步长i和源时间步长j的对齐得分。

我们使用softmax函数对对齐分数进行归一化,以检索注意力权重(aij):

image.png

计算编码器hj的注意权值aij与隐藏状态的乘积的线性和,得到上下文向量Ci:

image.png

将所述解码器在时间步长i时的参与上下文向量与目标隐藏状态连接,生成参与隐藏向量Si,其中Si= concatenate([Si;Ci)然后将参与的隐藏向量Si送入稠密层产生yi, yi=dense(Si)。

让我们通过一个示例来理解上面的注意机制步骤。假设源文本序列为[x1, x2, x3, x4],目标摘要序列为[y1, y2]。

编码器读取整个源序列并输出每个时间步长的隐藏状态,例如h1, h2, h3, h4

image.png

解码器读取由一个时间步长偏移的整个目标序列,并输出每个时间步长(例如s1、s2、s3)的隐藏状态

image.png

目标timestep i = 1

利用score函数从源隐藏状态hi和目标隐藏状态s1计算对齐得分e1j:

e11= score(s1, h1)
e12= score(s1, h2)
e13= score(s1, h3)
e14= score(s1, h4)

使用softmax对对齐分数e1j进行归一化,得到注意力权重a1j:

a11= exp(e11)/((exp(e11)+exp(e12)+exp(e13)+exp(e14))
a12= exp(e12)/(exp(e11)+exp(e12)+exp(e13)+exp(e14))
a13= exp(e13)/(exp(e11)+exp(e12)+exp(e13)+exp(e14))
a14= exp(e14)/(exp(e11)+exp(e12)+exp(e13)+exp(e14))

由编码器隐藏状态hj与对齐得分a1j的乘积的线性和得到上下文向量C1:

C1= h1 * a11 + h2 * a12 + h3 * a13 + h4 * a14

image.png

连接上下文向量C1和目标隐藏状态s1,生成隐藏向量s1

S1= concatenate([s1; C1])

然后将注意力隐藏向量S1输入到稠密层,产生y1

y1= dense(S1)

我们可以用同样的方法计算Y2。

实施

在本文中,我们将使用亚马逊食品评论数据集。让我们来看看数据:

https://www.kaggle.com/snap/amazon-fine-food-reviews


cccc.png

数据清洗

我们首先需要清理我们的数据,所以我们需要遵循的步骤是:

将所有内容转换为小写字母删除HTML标记收缩映射删除(的)删除括号()内的任何文本消除标点和特殊字符删除stopwords。删除短词

数据分布

然后,我们将分析评语和总结的长度,从而对文章的长度分布有一个总体的认识。这将帮助我们确定序列的最大长度。

ccc.png

标记数据:

记号赋予器构建词汇表并将单词序列转换为整数序列。我们将使用Keras’ Tokenizer来标记句子。

模型建立

我们终于到了模型制作部分。但在此之前,我们需要熟悉一些术语,这些术语在构建模型之前是必需的。

  • Return Sequences= True:当参数设置为True时,LSTM为每个时间步长生成隐藏状态和单元格状态
  • Return State = True:当Return State = True时,LSTM只生成最后一个时间步骤的隐藏状态和单元格状态
  • Initial State:用于初始化第一个时间步骤的LSTM的内部状态
  • Stacked LSTM:Stacked LSTM有多层的LSTM堆叠在彼此之上。这样可以更好地表示序列。我鼓励您试验堆叠在彼此之上的LSTM的多个层

cc.png

训练和Early Stopping:

这就是在训练过程中验证损失减少的原因,我们可以推断在 epoch10之后验证损失略有增加。因此,在这个 epoch之后,我们将停止训练模型。

c.png

推理

现在,我们将为编码器和解码器建立推断。在这里,编码器和解码器将一起工作,以产生摘要。所述解码器将堆叠在所述编码器之上,所述解码器的输出将再次馈入所述解码器以产生下一个字。

Review: right quantity japanese green tea able either drink one sitting save later tastes great sweet  
Original summary: great japanese product  
Predicted summary: great teaReview: love body wash smells nice works great feels great skin add fact subscribe save deal great value sold
Original summary: great product and value  
Predicted summary: great productReview: look like picture include items pictured buy gift recipient disappointed  
Original summary: very disappointed  
Predicted summary: not what expected

总结

在本文中,我们了解了如何使用序列到序列模型总结文本。我们可以通过增加数据集、使用双向LSTM、 Beam Search策略等方法进一步改进该模型。

目录
相关文章
|
1月前
|
机器学习/深度学习 自然语言处理 数据可视化
数据代码分享|PYTHON用NLP自然语言处理LSTM神经网络TWITTER推特灾难文本数据、词云可视化
数据代码分享|PYTHON用NLP自然语言处理LSTM神经网络TWITTER推特灾难文本数据、词云可视化
|
14天前
|
机器学习/深度学习 存储 人工智能
算法金 | LSTM 原作者带队,一个强大的算法模型杀回来了
**摘要:** 本文介绍了LSTM(长短期记忆网络)的发展背景和重要性,以及其创始人Sepp Hochreiter新推出的xLSTM。LSTM是为解决传统RNN长期依赖问题而设计的,广泛应用于NLP和时间序列预测。文章详细阐述了LSTM的基本概念、核心原理、实现方法和实际应用案例,包括文本生成和时间序列预测。此外,还讨论了LSTM与Transformer的竞争格局。最后,鼓励读者深入学习和探索AI领域。
24 7
算法金 | LSTM 原作者带队,一个强大的算法模型杀回来了
|
4天前
|
机器学习/深度学习 自然语言处理 PyTorch
【自然语言处理NLP】Bert预训练模型、Bert上搭建CNN、LSTM模型的输入、输出详解
【自然语言处理NLP】Bert预训练模型、Bert上搭建CNN、LSTM模型的输入、输出详解
21 0
|
30天前
|
机器学习/深度学习 算法
【MATLAB】基于VMD-SSA-LSTM的回归预测模型
【MATLAB】基于VMD-SSA-LSTM的回归预测模型
39 4
|
30天前
|
机器学习/深度学习 算法
【MATLAB】基于EMD-PCA-LSTM的回归预测模型
【MATLAB】基于EMD-PCA-LSTM的回归预测模型
35 0
【MATLAB】基于EMD-PCA-LSTM的回归预测模型
|
1月前
|
机器学习/深度学习 数据可视化 TensorFlow
【视频】LSTM模型原理及其进行股票收盘价的时间序列预测讲解|附数据代码1
【视频】LSTM模型原理及其进行股票收盘价的时间序列预测讲解|附数据代码
|
1月前
|
机器学习/深度学习 Python 数据处理
Python中利用长短期记忆模型LSTM进行时间序列预测分析 - 预测电力负荷数据
Python中利用长短期记忆模型LSTM进行时间序列预测分析 - 预测电力负荷数据
Python中利用长短期记忆模型LSTM进行时间序列预测分析 - 预测电力负荷数据
|
1月前
|
机器学习/深度学习 数据处理 计算机视觉
Python中利用长短期记忆模型LSTM进行时间序列预测分析 - 预测电力消耗数据
Python中利用长短期记忆模型LSTM进行时间序列预测分析 - 预测电力消耗数据
|
1月前
|
机器学习/深度学习 存储 数据可视化
【视频】LSTM模型原理及其进行股票收盘价的时间序列预测讲解|附数据代码2
【视频】LSTM模型原理及其进行股票收盘价的时间序列预测讲解|附数据代码
|
1月前
|
机器学习/深度学习 自然语言处理 算法
Python遗传算法GA对长短期记忆LSTM深度学习模型超参数调优分析司机数据|附数据代码
Python遗传算法GA对长短期记忆LSTM深度学习模型超参数调优分析司机数据|附数据代码

热门文章

最新文章