域名备案查询网站备案,陕西建设网官方网站,网站建设英文字体,小公司企业简介怎么写文章目录 0. 首先聊聊什么是RNN1. 理解LSTM#xff0c;从数据如何喂给 LSTM开始2. LSTM每个门是如何处理序列数据的#xff1f;2.1 遗忘门#xff08;Forget Gate#xff09;#xff1a;该忘掉哪些信息#xff1f;2.2 输入门#xff08;Input Gate#xff09;#xff… 文章目录 0. 首先聊聊什么是RNN1. 理解LSTM从数据如何喂给 LSTM开始2. LSTM每个门是如何处理序列数据的2.1 遗忘门Forget Gate该忘掉哪些信息2.2 输入门Input Gate该记住哪些新信息2.3 输出门Output Gate此刻该吐露什么 3. 用代码实现文本情感识别**数据预处理****构建LSTM模型** 4. 总结LSTM如何发掘情感5. 内容延展6.参考资料 想象这样一个任务你希望训练一个模型它能说出一段文字的情感是“正面”还是“负面”比如
“这部电影简直太棒了” → 正面情感“糟糕透顶浪费了两个小时的时间。” → 负面情感
这就是一个典型的文本情感识别任务而LSTM长短期记忆网络特别适合这种顺序依赖的数据。
接下来我们通过这个具体的例子从输入文本到情感分类逐步剖析LSTM的内部机制结合每一个“门”的作用帮助你理解它是如何工作的。
0. 首先聊聊什么是RNN
思考问题时人类不是每一时刻都是从零开始的。当你阅读这篇短文时对于每一个词的理解都是基于这个词之前的词的含义。你不会把前面看到的丢弃然后从零开始。你的思考是连贯的。
传统的神经网络无法做到这一点并且这是它的一个主要的缺点。例如假如你想清楚地知道在一个电影的每一个片段发生了什么样的事情。现在还不能确定传统的神经网络如何能够基于已知的事件推断出将要发生的事件。
循环神经网络致力于解决该问题。这样的网络通过环回链接保持信息的连贯性。 带环的循环神经网络 在上图中A是一个神经网络的一部分输入 x t x_t xt得到输出 h t h_t ht。环回链接控制信息被从网络的一层传递到下一层。
这些环回链接使得循环神经网络看起来有些神秘。但是如果你更进一步地思考它与普通的神经网络没有太大的区别。一个循环神经网络可以被认为是一个网络的多个拷贝每一个把信息传递给下一个。对循环神经网络做循环展开后它就是下面的样子
循环展开的循环神经网络 这种链式的本质说明了循环神经网络本质上与序列和链表相关。它天生就是要应用到这样的数据上。
RNNs最令人着迷的是它也许能够将当前的任务与之前的信息联系起来。例如通过视频以播放过的帧来理解当前的这一帧。如果RNNs能做到它的作用是巨大的。RNNs能做到吗在某些条件下是的。 有些时候当前的任务是可以依据最近的信息推测出来的。例如依据前面已经出现的词推测下一个词的语言模型。当我们推测“the clouds are in the sky”这句话的最后一个词时已经不需要其他的上下文了非常明显这个词是“sky”或者mountain。在这种情况下相关联的词汇间的距离很短RNNs能够学习如何使用这些信息。
但是在某些情况下需要更多的上下文。例如预测这句话 - “I grew up in France… I speak fluent French.” - 的最后一个词。与目标词最近的相关信息表明这个词很可能指某个语言。但是如果把这个词缩小到某个具体的语言上就需要与距离较远的France的上下文考虑到。 与目标点相关的信息与目标点之间的间隔非常的大这是完全可能的。
不幸的是随着距离的增加RNNs就不能学习到这些关联信息。
在理论上RNNs绝对能够处理长距离间的依赖关系。通过仔细挑选参数能够在一些实验性的玩具项目上取得很好的效果。不幸的是在现实中RNNs不能学习使用这些信息。Hochreiter (1991) [German] 和 Bengio, et al. (1994), 在这方面做了深入的研究他们的研究结果揭示了一些RNNs在这方面的本质上的缺陷。
令人欣慰的是LSTMs能解决这个问题 1. 理解LSTM从数据如何喂给 LSTM开始
在情感识别中输入是一段文本比如
输入句子 “This movie is fantastic and I love it!” LSTM接收的数据要求是一个序列型输入因此我们需要以下预处理步骤 分词和索引化 将句子分割成单词并用数值表示。例如 This movie is fantastic and I love it! → [1, 2, 3, 4, 5, 6, 7] 假设 “This” 对应索引 1“movie” 对应索引 2依此类推。 嵌入向量表示 每个单词会用一个固定长度的向量表示例如通过**词嵌入Embedding**生成300维向量 [1, 2, 3, 4, 5, 6, 7] →
[[0.5, 0.8, ...], [0.2, 0.9, ...], ..., [0.7, 0.4, ...]]输入的数据就变成了一个二维矩阵形状为 (单词数, 每个单词的向量维度) (7, 300) 2. LSTM每个门是如何处理序列数据的 现在我们以这句输入 “This movie is fantastic and I love it!” 为例逐步拆解 LSTM 的门机制看看它是如何从文字序列中提取情感特征的。
2.1 遗忘门Forget Gate该忘掉哪些信息
首先遗忘门会接收当前单词的表示如第一个单词 “This” 的嵌入向量和上一时间步的信息即隐藏状态 h t − 1 h_{t-1} ht−1决定过去哪些记忆应该被“遗忘”。
公式如下 f t σ ( W f [ h t − 1 , x t ] b f ) f_t \sigma(W_f[h_{t-1}, x_t] b_f) ftσ(Wf[ht−1,xt]bf) x t x_t xt当前时间步的输入如 “This” 的向量表示。 h t − 1 h_{t-1} ht−1上一时间步的隐藏状态尚未产生。 f t f_t ft遗忘门输出向量值在 0 和 1 之间。接近1的值会保留过去信息接近0的值会遗忘。
在解读句子的时候“This”和情感无关因此模型可能输出低遗忘比例例如 f t [ 0.3 , 0.1 , 0.2 , . . . ] f_t [0.3, 0.1, 0.2, ...] ft[0.3,0.1,0.2,...]表示对当前单词“This”相关的记忆会部分清除。 2.2 输入门Input Gate该记住哪些新信息
遗忘了无关信息后输入门决定哪些新信息需要记住。两个核心过程 生成候选记忆内容 C ~ t \tilde{C}_t C~t 当前单词向量如fantastic经过权重变换和激活函数处理生成可能的记忆内容 C ~ t tanh ( W C [ h t − 1 , x t ] b C ) \tilde{C}_t \tanh(W_C[h_{t-1}, x_t] b_C) C~ttanh(WC[ht−1,xt]bC) 例如“fantastic” 强烈关联到积极情感候选记忆向量 C ~ t \tilde{C}_t C~t 的值可能表示强正面情感。 输入门决定记忆的权重 i t i_t it i t σ ( W i [ h t − 1 , x t ] b i ) i_t \sigma(W_i[h_{t-1}, x_t] b_i) itσ(Wi[ht−1,xt]bi) 输入门输出 i t i_t it 决定该候选记忆的比重。 更新记忆单元 C t C_t Ct 最终记忆单元的更新公式为 C t f t ⋅ C t − 1 i t ⋅ C ~ t C_t f_t \cdot C_{t-1} i_t \cdot \tilde{C}_t Ctft⋅Ct−1it⋅C~t
在处理fantastic时输入门可能输出 i t [ 0.9 , 0.8 , 0.7 , . . . ] i_t [0.9, 0.8, 0.7, ...] it[0.9,0.8,0.7,...]表示“要记住这个强正面情感的单词”。然后结合候选记忆单元 C ~ t \tilde{C}_t C~t将它添加到记忆中。 2.3 输出门Output Gate此刻该吐露什么
最后输出门决定当前记忆中哪些信息需要释放给下一层或时间步用于接续处理或最终的分类。 计算输出门权重 o t o_t ot o t σ ( W o [ h t − 1 , x t ] b o ) o_t \sigma(W_o[h_{t-1}, x_t] b_o) otσ(Wo[ht−1,xt]bo) 生成隐藏状态 h t h_t ht h t o t ⋅ tanh ( C t ) h_t o_t \cdot \tanh(C_t) htot⋅tanh(Ct) h t h_t ht 是 LSTM 的输出会直接用于下一时间步的计算或通过全连接层参与情感分类。
在处理到句子最后的 “it” 时LSTM 的隐藏状态已经累积了上下文信息。此时的 h t h_t ht 可能非常接近“正面情感”的特征表示。 3. 用代码实现文本情感识别
以下代码演示如何用 TensorFlow 构建一个简单的 LSTM 模型用于情感分类任务。
数据预处理
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences# 样本数据
texts [This movie is fantastic and I love it!, # 正面情感This film is horrible, I hate it! # 负面情感
]# 标签 (1 表示正面, 0 表示负面)
labels [1, 0]# 分词与索引化
tokenizer Tokenizer(num_words10000)
tokenizer.fit_on_texts(texts)
sequences tokenizer.texts_to_sequences(texts)# 填充序列到固定长度
maxlen 10
X pad_sequences(sequences, maxlenmaxlen, paddingpost)
y labels
print(输入形状:, X.shape)构建LSTM模型
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, LSTM, Dense# 定义LSTM情感分类模型
model Sequential([Embedding(input_dim10000, output_dim300, input_lengthmaxlen),LSTM(128, return_sequencesFalse),Dense(1, activationsigmoid)
])model.compile(optimizeradam, lossbinary_crossentropy, metrics[accuracy])
model.summary()# 假设使用训练数据进行训练
model.fit(X, y, batch_size2, epochs10)4. 总结LSTM如何发掘情感
结合我们的例子可以看到
遗忘门过滤掉“无关”单词对情感的影响比如 “This”。输入门捕捉关键情感词汇比如 “fantastic”、“horrible”。输出门输出情感特征逐步累积句子的情感信息。
最后通过分类器我们得到了精准的情感判断 “This movie is fantastic and I love it!” → Positive
从这一任务中可以感受到 LSTM 对时间序列建模的强大能力它让机器逐步理解了句子的情感含义 5. 内容延展
虽然LSTM在处理文本、音频和其他序列数据时表现十分优秀但它也有一定的局限性例如当序列非常长时仍然可能有信息丢失的问题。近年来更加先进的模型正在逐渐取代LSTM Transformer Transformer模型通过自注意力机制建模长距离依赖极大提升了序列数据的建模能力。在自然语言处理任务如机器翻译中Transformer已成为主流。 Conformer 在语音识别任务中Conformer结合了卷积网络和Transformer的优势是处理语音序列的强大模型。 Mamba Mamba 是一种由斯坦福大学研究团队在 2023 年底提出的新型状态空间模型架构它专为信息密集型任务如长序列数据或高维数据而生。与LSTM相比Mamba使用选择性状态空间模型Selective State Space Model, SSM能够以线性时间复杂度处理长序列数据。
在后续内容中我们将逐步介绍这些更现代、更强大的模型敬请期待 6.参考资料
[1] 理解LSTM网络 (https://colah.github.io/posts/2015-08-Understanding-LSTMs/).
[2] 深入理解LSTM (https://xiaohutou.github.io/2018/05/01/understanding-lstm-networks/).
[3] LSTM情绪识别实战 (https://github.com/lukasgarbas/nlp-text-emotion). 感谢各位读者耐心看到这里如果这篇文章对您有所启发请收藏、点赞和分享给更多的朋友让我们一起交流人工智能的魅力。如果您有任何问题或想法欢迎在评论区留言我会尽量回复每一条评论
期待我们在学习之路上的共同成长