Matlab用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类

科技   科技   2024-09-13 21:54   浙江  

全文链接:http://tecdat.cn/?p=23151


这个例子展示了如何使用深度学习长短期记忆(LSTM)网络对文本数据进行分类。


文本数据是有顺序的。一段文字是一个词的序列,它们之间可能有依赖关系。为了学习和使用长期依赖关系来对序列数据进行分类,可以使用LSTM神经网络。LSTM网络是一种递归神经网络(RNN),可以学习序列数据的时间顺序之间的长期依赖关系。

相关视频




要向LSTM网络输入文本,首先要将文本数据转换成数字序列。你可以使用单词编码来实现这一点,该编码将文件映射为数字指数的序列。为了获得更好的结果,还可以在网络中加入一个词嵌入层。词汇嵌入将词汇映射为数字向量,而不是标量索引。这些嵌入发现了单词的语义细节,因此具有相似含义的单词具有相似的向量。它们还通过向量算术来模拟单词之间的关系。例如,"罗马之于意大利就像巴黎之于法国 "的关系由方程式意大利-罗马+巴黎=法国来描述。

在这个例子中,训练和使用LSTM网络有四个步骤。

  • 导入并预处理数据。

  • 使用单词编码将单词转换为数字序列。

  • 创建并训练一个带有单词嵌入层的LSTM网络。

  • 使用训练好的LSTM网络对新的文本数据进行分类。

导入数据

导入工厂报告数据。该数据包含对工厂事件的标签化文本描述。要把文本数据导入为字符串,指定文本类型为 "字符串"。

head(data)

这个例子的目的是通过类别栏中的标签对事件进行分类。为了将数据划分为类别,将这些标签转换为分类的。

Category = categorical(Category);

使用直方图查看数据中的类别分布。

figure
histogram(Category);



点击标题查阅往期内容


用于NLP的Python:使用Keras的多标签文本LSTM神经网络分类


左右滑动查看更多


01

02

03

04


下一步是将其划分为训练和验证的集合。将数据划分为一个训练分区和一个用于验证和测试的保留分区。指定保留的百分比为20%。

cvp = cv(Category,'Holdout',0.2);

从分区的表中提取文本数据和标签。

DataTrain = Description;
DataValidation = Description;

为了检查你是否正确地导入了数据,可以用词云来可视化训练文本数据。

wordcloud(DataTrain);

预处理文本数据

创建一个函数,对文本数据进行标记和预处理。列在例子末尾的函数preprocessText,执行这些步骤。

  • 使用tokenizedDocument对文本进行标记。

  • 使用lower将文本转换为小写。

  • 使用 erasePunctuation 擦除标点符号。

对训练数据和验证数据进行预处理。

Train = preprocessText(DataTrain);

查看最初几个预处理的训练文件。

documentsTrain(1:5)

将文件转换为序列

为了将文档输入到LSTM网络中,使用一个单词编码将文档转换为数字指数序列。

创建一个词的编码 

下一个转换步骤是对文件进行填充和截断,使它们的长度都相同。

要填充和截断文件,首先要选择一个目标长度,然后截断比它长的文件,左移比它短的文件。为了达到最佳效果,目标长度应该很短,而不会丢弃大量的数据。为了找到一个合适的目标长度,可以查看训练文档长度的直方图。

histogram(documentLengths)

大多数的训练文件都少于10个标记。将此作为截断和填充的目标长度。

将文档转换为数字索引序列。要截断或向左填充序列的长度为10,将 "长度 "选项设置为10。

doc2sequence(enc,'Length');

使用相同的选项将验证文件转换为序列。

sequence(Length);

创建和训练LSTM网络

定义LSTM网络结构。为了向网络输入序列数据,包括一个序列输入层,并将输入大小设置为1。接下来,包括一个维度为50的词嵌入层,词的数量与词的编码相同。接下来,包括一个LSTM层,并将隐藏单元的数量设置为80。最后,添加一个与类的数量相同的全连接层,一个softmax层,以及一个分类层。

inputSize = 1;
Dimension = 50;
HiddenUnits = 80;

指定训练选项

  • 使用Adam优化器进行训练.

  • 指定一个16的小批处理量。

  • 每隔一段时间对数据进行随机化。

  • 通过设置 "Plots "选项为 "training-progress "来监测训练进度。

  • 使用'ValidationData'选项指定验证数据。

  • 通过将'Verbose'选项设置为false来抑制输出。

默认情况下,如果有GPU,会使用GPU(需要并行计算工具箱™和支持CUDA®的计算能力3.0以上的GPU)。否则,它将使用CPU。在CPU上训练的时间可能比在GPU上训练的时间长很多。

options('adam'...
    'BatchSize',16...
    'Shuffle','every-epoch'...);

训练LSTM网络。

使用新数据进行预测

对三个新报告的事件类型进行分类。创建一个包含新报告的字符串数组。 

使用预处理步骤对文本数据进行预处理,作为训练文档。

preprocessText(New);

将文本数据转换为序列,选项与创建训练序列时相同。

sequence(enc,sequenceLength);

使用训练好的LSTM网络对新序列进行分类。

classify(XNew)






本文中分析的数据、代码分享到会员群,扫描下面二维码即可加群! 



点击文末“阅读原文”

获取全文完整资料


本文选自《Matlab用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类》。


点击标题查阅往期内容

RNN循环神经网络 、LSTM长短期记忆网络实现时间序列长期利率预测
结合新冠疫情COVID-19股票价格预测:ARIMA,KNN和神经网络时间序列分析
深度学习:Keras使用神经网络进行简单文本分类分析新闻组数据
用PyTorch机器学习神经网络分类预测银行客户流失模型
PYTHON用LSTM长短期记忆神经网络的参数优化方法预测时间序列洗发水销售数据
Python用Keras神经网络序列模型回归拟合预测、准确度检查和结果可视化
Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析
R语言中的神经网络预测时间序列:多层感知器(MLP)和极限学习机(ELM)数据分析报告
R语言深度学习:用keras神经网络回归模型预测时间序列数据
Matlab用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类
R语言KERAS深度学习CNN卷积神经网络分类识别手写数字图像数据(MNIST)
MATLAB中用BP神经网络预测人体脂肪百分比数据
Python中用PyTorch机器学习神经网络分类预测银行客户流失模型
R语言实现CNN(卷积神经网络)模型进行回归数据分析
SAS使用鸢尾花(iris)数据集训练人工神经网络(ANN)模型
【视频】R语言实现CNN(卷积神经网络)模型进行回归数据分析
Python使用神经网络进行简单文本分类
R语言用神经网络改进Nelson-Siegel模型拟合收益率曲线分析
R语言基于递归神经网络RNN的温度时间序列预测
R语言神经网络模型预测车辆数量时间序列
R语言中的BP神经网络模型分析学生成绩
matlab使用长短期记忆(LSTM)神经网络对序列数据进行分类
R语言实现拟合神经网络预测和结果可视化
用R语言实现神经网络预测股票实例
使用PYTHON中KERAS的LSTM递归神经网络进行时间序列预测
python用于NLP的seq2seq模型实例:用Keras实现神经网络机器翻译
用于NLP的Python:使用Keras的多标签文本LSTM神经网络分类


拓端数据部落
拓端(tecdat.cn)创立于2016年,提供专业的数据分析与挖掘服务,致力于充分挖掘数据价值。
 最新文章