乐趣区

关于算法:拓端tecdatMatlab用深度学习长短期记忆LSTM神经网络对文本数据进行分类

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

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

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

要向 LSTM 网络输出文本,首先要将文本数据转换成数字序列。你能够应用单词编码来实现这一点,该编码将文件映射为数字指数的序列。为了取得更好的后果,还能够在网络中退出一个词嵌入层。词汇嵌入将词汇映射为数字向量,而不是标量索引。这些嵌入发现了单词的语义细节,因而具备类似含意的单词具备类似的向量。它们还通过向量算术来模仿单词之间的关系。例如,” 罗马之于意大利就像巴黎之于法国 “ 的关系由方程式意大利 - 罗马 + 巴黎 = 法国来形容。

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

  • 导入并预处理数据。
  • 应用单词编码将单词转换为数字序列。
  • 创立并训练一个带有单词嵌入层的 LSTM 网络。
  • 应用训练好的 LSTM 网络对新的文本数据进行分类。

导入数据

导入工厂报告数据。该数据蕴含对工厂事件的标签化文本形容。要把文本数据导入为字符串,指定文本类型为 “ 字符串 ”。

head(data)

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

Category = categorical(Category);

应用直方图查看数据中的类别散布。

figure
histogram(Category);

下一步是将其划分为训练和验证的汇合。将数据划分为一个训练分区和一个用于验证和测试的保留分区。指定保留的百分比为 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)



最受欢迎的见解

1. 探析大数据期刊文章钻研热点

2.618 网购数据盘点 - 剁手族在关注什么

3.r 语言文本开掘 tf-idf 主题建模,情感剖析 n -gram 建模钻研

4.python 主题建模可视化 lda 和 t -sne 交互式可视化

5. 疫情下的新闻数据察看

6.python 主题 lda 建模和 t -sne 可视化

7.r 语言中对文本数据进行主题模型 topic-modeling 剖析

8. 主题模型:数据凝听人民网留言板的那些“网事”

9.python 爬虫进行 web 抓取 lda 主题语义数据分析

退出移动版