BiLSTM-Attention论文笔记

BiLSTM-Attention

Attention-Based Bidirectional Long Short-Term Memory Networks for Relation Classification》论文笔记

Overview

这篇文章提出了一种特征提取和文本表示的模型。作者提到在文本分类领域,常用的监督学习需要大量的人工标注样本,并且常常需要构建如POS-tagging、NER、dependency parsing等更高级的特征,耗时耗力。为了解决这样的问题,作者提出了这种Attention based的BiLSTM网络,并取得了很好的效果。模型的结构其实很简单,这篇文章也有年头了,但作为之前的经典文章,还是觉得值得复现一下。

Model Structure

模型主要分为五大部分:

  1. Input Layer:输入层
  2. Embedding Layer:词嵌入层,本文使用了词向量
  3. LSTM Layer :BiLSTM层
  4. Attention Layer :Attention层
  5. Output Layer:输出层

在这里插入图片描述

LSTM Layer

LSTM层中使用的是双向LSTM,这没什么特别的。值得注意的是,本文的LSTM采用了peephole connection,简单来说就是每个时刻的输入增加了上一时刻的cell state,计算公式稍有变化:
i t   =   σ ( W x i x t + U h i h t − 1 + V c i c t − 1 + b i ) f t   =   σ ( W x f x t + U h f h t − 1 + V c f c t − 1 + b f ) g t   =   t a n h ( W x x t + W h h t − 1 + W c c t − 1 + b ) c t   =   i t g t   + f t c t − 1 o t   =   σ ( W x o x t + U h o h t − 1 + V c o c t − 1 + b o ) h t   =   o t t a n h ( c t ) i_t\ =\ \sigma(W_{xi}x_t+U_{hi}h_{t-1}+V_{ci}c_{t-1}+b_i) \\ f_t\ =\ \sigma(W_{xf}x_t+U_{hf}h_{t-1}+V_{cf}c_{t-1}+b_f) \\ g_t\ =\ tanh(W_{x}x_t+W_{h}h_{t-1}+W_{c}c_{t-1}+b) \\ c_t\ =\ i_tg_t\ +f_tc_{t-1} \\ o_t\ =\ \sigma(W_{xo}x_t+U_{ho}h_{t-1}+V_{co}c_{t-1}+b_o) \\ h_t\ =\ o_ttanh(c_t) it = σ(Wxixt+

### 使用LSTM进行方面级情感分析的方法 #### 方法概述 方面级情感分析的目标是从给定的文本中识别特定方面的意见或情绪。为了实现这一目标,可以利用长短时记忆网络(LSTM),它是一种特殊的循环神经网络(RNN),能够有效捕捉序列中的长期依赖关系[^1]。 在具体实现过程中,通常会结合注意力机制来增强模型的表现力。例如,在论文Attention-based LSTM for Aspect-level Sentiment Classification》中提到,通过引入注意力机制,可以使模型更加关注与目标方面相关的上下文单词,从而提高分类准确性。 #### 模型结构设计 一种常见的做法是构建一个双通道输入的模型框架,其中一个通道用于处理整个句子的信息,另一个通道则专注于提取目标方面的特征。这种设计可以通过以下方式实现: 1. **嵌入层** 首先将输入文本和目标方面分别转换成词向量形式。这一步骤通常是通过预训练的语言模型或者随机初始化的方式完成的[^3]。 2. **双向LSTM编码器** 利用双向LSTM对句子和方面分别进行编码,获取它们的时间步隐藏状态表示。对于句子 \(S\) 和方面 \(A\) ,其对应的隐藏状态分别为 \(\{h_1, h_2,..., h_n\}\) 和 \(\{a_1, a_2,..., a_m\}\)。 3. **注意力机制** 计算句子中每个词语相对于目标方面的权重系数,以此衡量各个词语对该方面的影响程度。具体的计算公式如下所示: \[ e_{ij} = f(h_j, A), \quad w_i = softmax(e_i) \] 这里,\(f\) 表示某种相似度函数,比如点积操作;而最终得到的加权平均值即为句子关于此方面的全局表征。 4. **融合并预测** 将上述所得的结果与其他辅助信息结合起来送入全连接层做最后的情感类别判定工作。值得注意的是,还可以加入dropout技术防止过拟合现象发生。 以下是基于Python语言的一个简单代码片段展示如何搭建这样一个基本框架: ```python import tensorflow as tf from tensorflow.keras.layers import Input, Embedding, Bidirectional, LSTM, Dense, Attention, Concatenate, Dropout from tensorflow.keras.models import Model # 参数设置 vocab_size = 10000 # 字典大小 embedding_dim = 300 # 嵌入维度 hidden_units = 128 # LSTM单元数 max_len_sentence = 50 # 句子最大长度 aspect_length = 5 # 方面最大长度 num_classes = 3 # 类别数目 (正面/负面/中立) # 输入定义 input_text = Input(shape=(max_len_sentence,), name="text_input") # 文本输入 input_aspect = Input(shape=(aspect_length,), name="aspect_input") # 方面输入 # 共享Embedding层 shared_embedding = Embedding(input_dim=vocab_size, output_dim=embedding_dim) embedded_text = shared_embedding(input_text) # 获取文本嵌入 embedded_aspect = shared_embedding(input_aspect) # 获取方面嵌入 # Bi-LSTM 编码 encoded_text = Bidirectional(LSTM(hidden_units, return_sequences=True))(embedded_text) # 句子编码 encoded_aspect = Bidirectional(LSTM(hidden_units, return_sequences=False))(embedded_aspect) # 方面编码 # 注意力机制 attention_weights = Attention()([encoded_text, encoded_aspect]) # 计算注意力权重 attended_representation = tf.reduce_sum(attention_weights * encoded_text, axis=1) # 加权求和 # 融合特征 concatenated_features = Concatenate()([attended_representation, encoded_aspect]) dense_output = Dense(64, activation='relu')(concatenated_features) dropout_layer = Dropout(rate=0.5)(dense_output) output = Dense(num_classes, activation='softmax', name="sentiment_output")(dropout_layer) model = Model(inputs=[input_text, input_aspect], outputs=output) model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) model.summary() ``` #### 实验验证 研究表明,在餐馆评论数据集Restaurants14以及笔记本电脑评论数据集Laptop14上的测试结果显示,相比传统LSTM架构,采用上述改进后的模型不仅提升了性能表现,而且运行速度更快约15倍,同时具备更强稳定性与鲁棒性特点[^2]。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值