RNN 用于序列标注2024年8月28日 | 阅读 7 分钟 什么是 RNN?循环神经网络(Recurrent Neural Network),简称 **RNN**,是一种**人工神经网络**,用于处理**时间序列或序列数据**。这些深度学习技术常用于处理有序和时间相关的问题,例如语言翻译、自然语言处理(NLP)、语音识别和图像字幕生成。RNN 在多个应用中都有使用,例如**Siri、语音搜索和谷歌翻译**。循环神经网络像前馈神经网络和卷积神经网络(CNN)一样,从**训练输入**中学习。 循环神经网络在处理**自然语言处理 (NLP)** 任务方面非常高效。**序列标注**为序列中的每个元素分配标签,用于**词性标注、命名实体识别、情感分析**等目的。 RNN 由于能够保持捕捉先前时间步信息的隐藏状态,因此在处理**序列数据**方面表现出色。RNN 是序列标注的自然选择,因为它涉及为序列中的每个元素分配标签。 循环神经网络的架构循环单元是 RNN 的基本构建块,在每个时间步接收输入并产生输出。隐藏状态充当网络的记忆,并根据当前输入和先前的隐藏状态进行更新。每个时间步的输出可用于各种目的,例如分类或进一步处理。 用于序列标注的循环神经网络在序列标注中,根据上下文为序列中的每个元素分配一个标签。例如,在词性标注中,短语中的每个单词都会被标记其词性。 RNN 中的序列标注通常使用多对多架构,其中输入和输出序列的长度相同。然后将输入元素馈送到 RNN,每个时间步的结果用于预测该元素的标签。 让我们看看使用 RNN 进行序列标注的数学形式和实现。 数学实现我们用 X 表示输入序列,用 Y 表示输出序列。我们可以将这些输入和输出序列表示为 X = [x1, x2, x3,……., xn] Y = [y1, y2, y3,…….., yn] RNN 的计算可以表示为
其中 f 表示循环单元函数,
使用 RNN 进行序列标注的过程让我们结合数学表达式和示例,看看使用 RNN 进行序列标注的步骤。 1. 数据准备: 第一步是准备数据集。对于序列标注,我们需要一个带标签的数据集用于训练和评估。数据集必须包含输入序列及其输出标签。例如,命名实体识别任务的数据集必须包含句子及其标签。 2. 输入和输出编码: 下一步是将输入和输出数据编码为 RNN 可接受的格式。在 NLP 中,输入通常表示为词嵌入或独热向量,而输出通常表示为数值标签或独热向量。 3. 架构: 下一步是为序列标注选择合适的 RNN 架构。长短期记忆(LSTM)和门控循环单元(GRU)是两种最常见的 RNN 架构,因为它们能够识别长期依赖关系。 4. 选择合适的 RNN 架构后,我们必须处理输入序列并生成输出序列。这个使用输入序列生成输出序列的过程称为前向传播。 我们用 X 表示输入序列,用 Y 表示输出序列。我们可以将这些输入和输出序列表示为 X = [x1, x2, x3,……., xn] Y = [y1, y2, y3,…….., yn] 使用 LSTM 通过执行以下方程来计算隐藏状态和输出:
其中,σ 是 sigmoid 激活函数,
5. 计算损失: 需要一个损失函数来计算实际输出 Ot 和预测输出 y 之间的差异。交叉熵损失和分类损失通常是序列标注任务的损失函数。它可以计算为 Lt = loss (yt, Ot) 总损失 L 可以计算为所有损失的总和:L = ∑ Lt。 6. 时间反向传播 (BPTT): 时间反向传播 (BPTT) 用于更新模型参数和最小化损失。在每个时间步,计算损失关于参数的梯度,并使用梯度下降优化来更新参数。 7. 数据集的训练和评估: 下一步是使用带标签的数据集训练 RNN。在验证数据集上计算损失。必须通过减小损失函数来防止过拟合。在 RNN 训练完成后对其进行评估,以检查其准确率、精确率和效率。 让我们通过命名实体识别任务来理解序列标注。我们需要标记和识别句子中的实体。例如,以简单句子“红堡在德里。”为例,它会为句子中的每个实体给出标签,如 [FAC, FAC, O, O, GPE]。 在此,FAC 指建筑物名称,GPE 指地点。 说明 我们将输入文本根据其含义转换为标签,并将标签表示为向量。我们使用基于 LSTM 的 RNN 逐词处理输入序列,在每个时间步更新隐藏状态。每个时间步的最终输出用于预测该单词的标签。 在训练过程中,我们将使用损失函数来比较预测标签和实际标签。使用BPTT计算梯度,并通过梯度下降更新 LSTM 的参数。 最后,在测试数据集上评估训练好的模型以检查其准确性。 使用 Python 中的 RNN 实现序列标注我们可以使用 Python 提供的深度学习库来实现 RNN 序列标注:Tensorflow。我们将实现 RNN 的序列标注来执行命名实体识别 (NER)。 在此实现中,我们将训练一个LSTM 模型来预测句子中实体的标签。 首先,我们将使用各种带标签的句子的数据集,其中每个单词都用其标签进行标记。然后,我们将训练模型以学习单词与标签之间的模式和关系。 程序:使用 Tensorflow 实现 RNN 序列标注并理解 LSTM 模型 代码 输出 Model: "sequential_2" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= embedding_1 (Embedding) (None, 80, 200) 3000000 lstm_1 (LSTM) (None, 80, 74) 81400 time_distributed_1 (TimeDi (None, 80, 5) 375 stributed) ================================================================= Total params: 3081775 (11.76 MB) Trainable params: 3081775 (11.76 MB) Non-trainable params: 0 (0.00 Byte) _________________________________________________________________ 说明 步骤 1: 我们已经实现了所需的库,包括 Tensorflow 及其模型。 步骤 2: 我们创建了一个用于序列标注的 RNN 模型。它包含多个参数。
步骤 3: 在创建 RNN 模型(rnn_model)的函数中,我们创建了一个顺序模型并添加了多个层,包括嵌入层、LSTM 层、密集层和 TimeDistributed 层。 这些层的工作方式如下:
步骤 4:返回模型: rnn_model 函数返回 RNN 模型。 步骤 5:使用模型:我们为 RNN 模型参数(如词汇量大小、标签等)赋值。最后,我们使用 summary() 打印了 LSTM 模型的摘要,以获取模型层和输出形状。 下一个主题机器学习中的 CatBoost |
我们请求您订阅我们的新闻通讯以获取最新更新。