深度学习中的LSTM及其在文本分类中的应用

在探索深度学习领域时,一定会遇到诸如神经网络、循环神经网络、LSTM、GRU等术语。本文将解释LSTM在Python中的使用以及其在文本分类中的作用。

目录

  • 什么是LSTM
  • 为什么选择LSTM?
  • LSTM在Python中的工作原理
  • LSTMPython文本分类中的应用
  • 模型定义
  • 训练LSTMPython模型
  • 预测
  • 准确性
  • 常见问题解答

什么是LSTM

LSTM代表长短期记忆网络。LSTM是一种循环神经网络,与传统的循环神经网络相比,在记忆方面表现更好。LSTM能够很好地记忆某些模式,因此在性能上表现更优。与其他神经网络一样,LSTM可以有多个隐藏层,并且在通过每一层时,相关信息被保留,所有不相关的信息在每个单元中被丢弃。它是如何做到保留和丢弃的呢?

为什么选择LSTM?

传统的神经网络存在短期记忆的问题。此外,一个很大的缺点是梯度消失问题(在反向传播过程中,梯度变得非常小,趋向于0,这样的神经元在进一步处理中没有用处)。LSTM通过记忆重要信息并找到模式,有效提高了性能。

LSTM在Python中的工作原理

LSTM有三个主要的门:

  • 遗忘门(FORGET Gate)
  • 输入门(INPUT Gate)
  • 输出门(OUTPUT Gate)

让快速看一下它们每一个。

这个门负责决定哪些信息被保留用于计算单元状态,哪些是不相关的可以被丢弃。来自前一个隐藏状态(前一个单元)的信息是ht-1,来自当前单元的信息是xt。这两个是遗忘门的两个输入。它们通过sigmoid函数,趋向于0的被丢弃,其他的被传递以计算单元状态。

输入门更新单元状态,并决定哪些信息是重要的,哪些不是。正如遗忘门帮助丢弃信息一样,输入门帮助找出重要信息并存储某些数据在记忆中。ht-1和xt是输入,它们都通过sigmoid和tanh函数。tanh函数调节网络并减少偏差。

所有获得的信息然后被用来计算新的单元状态。单元状态首先与遗忘门的输出相乘。如果乘以接近0的值,单元状态中的值有可能被丢弃。然后与输入门的输出进行逐点相加,更新单元状态为神经网络认为相关的新值。

最后一个门是输出门,它决定下一个隐藏状态应该是什么。ht-1和xt被传递到sigmoid函数。然后新修改的单元状态通过tanh函数,并与sigmoid输出相乘,以决定隐藏状态应该携带的信息。

LSTMPython文本分类中的应用

有许多经典的分类算法,如决策树、随机森林、支持向量机,它们可以很好地完成工作,那么为什么要使用LSTM进行分类呢?使用LSTM的一个好理由是它在记忆重要信息方面是有效的。

如果看其他非神经网络分类技术,它们是在多个单词作为单独输入进行训练的,这些单词只是没有实际意义的句子中的单词,而在预测类别时,它会根据统计数据而不是根据意义给出输出。这意味着,每个单词都被分类到一个类别中。

LSTM则不同。在LSTM中,可以使用多个单词字符串来找出它所属的类别。这在自然语言处理中非常有用。如果在LSTM中使用适当的嵌入和编码层,模型将能够找出输入字符串的实际含义,并给出最准确的输出类别。以下代码将详细说明如何使用LSTM进行文本分类。

定义LSTM Python模型以训练数据。

# 模型定义 embedding_vector_features=45 model=Sequential() model.add(Embedding(voc_size,embedding_vector_features,input_length=sent_length)) model.add(LSTM(128,input_shape=(embedded_docs.shape),activation='relu',return_sequences=True)) model.add(Dropout(0.2)) model.add(LSTM(128,activation='relu')) model.add(Dropout(0.2)) # for units in [128,128,64,32]: # model.add(Dense(units,activation='relu')) # model.add(Dropout(0.2)) model.add(Dense(32,activation='relu')) model.add(Dropout(0.2)) model.add(Dense(4,activation='softmax')) model.compile(loss='sparse_categorical_crossentropy',optimizer='adam',metrics=['accuracy']) print(model.summary())

定义了一个顺序模型,并添加了各种层。

现在模型准备好了,数据被分割成训练数据和测试数据。这里的比例是90-10。X_final和y_final是独立和依赖数据集。

from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X_final, y_final, test_size=0.1, random_state=42,stratify=y_final)

下一步是使用训练数据训练LSTM模型,测试数据用于验证。Model.fit()用于此目的。

model.fit(X_train,y_train,validation_data=(X_test,y_test),epochs=120,batch_size=64)

epochs是这个过程将被重复的次数。它可以是20、120、2000、20000,任何数字。批量大小是64,即每个epoch,将使用64个输入批量来训练模型。这主要取决于数据集的大小。

训练完成后,是时候找出结果并使用模型进行预测了。

results = model.evaluate(X_test,y_test)

模型被评估,计算模型对数据分类的准确性。“results”将有准确性分数和损失。在某些情况下,增加epochs的数量可以提高准确性,因为模型得到了更好的训练。

要使用训练好的模型进行预测,使用predict()函数。

y_pred = model.predict(embedded_docs_pred)
Q1. 可以使用LSTM进行文本分类吗?
A. 是的,LSTM(长短期记忆)网络通常用于文本分类任务,因为它们能够捕捉序列数据(如文本)中的长期依赖关系。
Q2. LSTM可以用于文本生成吗?
A. 是的,LSTM确实可以用于文本生成任务。它学习模式和生成序列的能力使其适合于各种领域的文本生成应用。
Q3. 可以使用LSTM进行NLP吗?
A. 当然可以,LSTM在自然语言处理(NLP)任务中被广泛使用,如情感分析、机器翻译和命名实体识别,因为它在处理像语言这样的序列数据方面非常有效。
Q4. LSTM适合分类吗?
A. 是的,LSTM可以有效地用于NLP中的分类任务,因为它能够捕捉文本数据中的复杂模式和依赖关系,从而在情感分析或文档分类等任务中做出准确的预测。
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485