主要内容

利用深度学习对文本数据进行分类

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

文本数据自然是连续的。一段文本是一个单词序列,它们之间可能存在依赖关系。要学习和使用长期依赖关系对序列数据进行分类,请使用LSTM神经网络。LSTM网络是一种递归神经网络(RNN),可以学习序列数据时间步长之间的长期依赖关系。

要将文本输入到LSTM网络,请首先将文本数据转换为数字序列。您可以使用将文档映射到数字索引序列的单词编码来实现这一点。为了获得更好的结果,还可以在网络中包含单词嵌入层。单词嵌入将词汇表中的单词映射到数字向量,而不是标量索引。这些嵌入捕获了单词的语义细节,因此具有相似语义的单词具有相似的向量。它们还通过向量算法对单词之间的关系进行建模。例如,关系“罗马之于意大利巴黎是去法国吗是由等式意大利来描述的罗马+巴黎=法国。

在本例中,培训和使用LSTM网络有四个步骤:

  • 导入并预处理数据。

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

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

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

导入数据

导入工厂报告数据。此数据包含工厂事件的标记文本描述。若要将文本数据作为字符串导入,请指定要导入的文本类型“字符串”.

文件名=“factoryReports.csv”; 数据=可读性(文件名,“文本类型”,“字符串”);总目(数据)
ans=8×5表UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU“机械故障”“介质”“重新调整机器”“45”“机械故障”“中等”“重新调整机器”“35”“启动设备时电源中断”“电子故障”“高”“完全更换”16200“装配机中的油炸电容器”“电子故障”“高”“更换部件”“352”混合器使保险丝跳闸。”“电子故障”“低”“添加到观察列表”“55”“施工剂中的爆裂管正在喷射冷却剂”“泄漏”“高”“更换部件”“371”“混合器中的保险丝熔断”“电子故障”“低”“更换部件”“441”“皮带继续脱落”“机械故障”“低”“重新调整机器”38

本例的目标是通过中的标签对事件进行分类类别列。要将数据划分为类,请将这些标签转换为分类。

data.Category=分类(data.Category);

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

图表直方图(数据.类别);xlabel(“类”) ylabel (“频率”)头衔(“阶级分布”)

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

cvp=cvpartition(data.Category,“坚持”,0.2); 数据训练=数据(训练(cvp),:);数据验证=数据(测试(cvp),:);

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

textDataTrain=dataTrain.Description;textDataValidation=dataValidation.Description;YTrain=数据列车。类别;YValidation=dataValidation.Category;

要检查是否正确导入了数据,请使用word cloud可视化培训文本数据。

图wordcloud(textDataTrain);标题(“培训数据”)

预处理文本数据

创建一个标记和预处理文本数据的函数预处理文本,将执行以下步骤:

  1. 使用tokenizedDocument.

  2. 使用将文本转换为小写降低.

  3. erasePunctuation.

使用预处理文本作用

documentsTrain = preprocessText (textDataTrain);documentsValidation = preprocessText (textDataValidation);

查看前几个预处理的培训文档。

压力(1:5)
ans=5×1标记化文档:9个标记:项目偶尔卡在扫描仪线轴中10个标记:装配机活塞发出巨大的卡嗒卡嗒声和砰砰声10个标记:启动设备时电源切断5个标记:装配机中的炸电容器4个标记:混合器跳闸保险丝

将文档转换为序列

要将文档输入LSTM网络,请使用文字编码将文档转换为数字索引序列。

要创建单词编码,请使用文字编码作用

enc=文字编码(documentsTrain);

下一个转换步骤是填充和截断文档,使其长度相同。这个trainingOptions函数提供自动填充和截断输入序列的选项。但是,这些选项不太适合字向量序列。相反,手动填充和截断序列。如果你left-pad并对词向量序列进行截断,可以提高训练效果。

若要填充和截断文档,请首先选择目标长度,然后截断比它长的文档,并左填充比它短的文档。为了获得最佳结果,目标长度应该很短,而不会丢弃大量数据。要找到合适的目标长度,请查看培训文档长度的直方图。

DocumentLength=文件长度(DocumentStrance);图表直方图(DocumentLength)标题(“文档长度”)包含(“长度”) ylabel (“文件数量”)

大多数培训文档的令牌数少于10个。请将其用作截断和填充的目标长度。

使用将文档转换为数字索引序列DOC2序列. 要截断或左填充长度为10的序列,请将“长度”选择10。

sequenceLength = 10;XTrain = doc2sequence (enc documentsTrain,“长度”,序列长度);XTrain(1:5)
ans=5×1单元阵列{1×10 double} {1×10 double} {1×10 double} {1×10 double} {1×10 double}

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

XValidation=doc2sequence(enc、文档验证、,“长度”, sequenceLength);

建立和培训LSTM网络

定义LSTM网络架构。要将序列数据输入到网络中,需要包含一个序列输入层,并设置输入大小为1。接下来,包括一个维度为50的单词嵌入层和与单词编码相同的单词数量。接下来,包括一个LSTM层,并设置隐藏单元的数量为80。若要将LSTM层用于序列到标签的分类问题,请将输出模式设置为“最后”。最后,添加一个与类数相同大小的完全连接层、一个softmax层和一个分类层。

inputSize=1;embeddingDimension=50;numHiddenUnits=80;numWords=enc.numWords;numClasses=numel(类别(YTrain));图层=[...sequenceInputLayer(inputSize)wordEmbeddingLayer(embeddingDimension,numWords)lstmLayer(numHiddenUnits,“输出模式”,“最后”)fullyConnectedLayer(NumClass)softmaxLayer classificationLayer]
层x1 = 6层阵列层:1“1维2序列输入序列输入”字嵌入层字嵌入层和50个维度和423个独特的单词3”LSTM LSTM 80隐藏单位4”完全连接4完全连接层5”Softmax Softmax 6”crossentropyex分类输出

指定培训选项

指定培训选项:

  • 使用Adam解算器进行训练。

  • 指定最小批量大小为16。

  • 每个历元对数据进行洗牌。

  • 通过设置“情节”选项“培训进度”.

  • 使用“ValidationData”选择。

  • 通过设置“冗长”选项错误的.

默认情况下,列车网络如果GPU可用,则使用GPU。否则,使用CPU。要手动指定执行环境,请使用“执行环境”的名称-值对参数trainingOptions. 在CPU上的培训可能比在GPU上的培训花费更长的时间。使用GPU进行培训需要并行计算工具箱™ 以及受支持的GPU设备。有关支持的设备的信息,请参阅金宝appGPU版金宝app本支持(并行计算工具箱).

选择= trainingOptions (“亚当”,...“MiniBatchSize”,16,...“梯度阈值”2....“洗牌”,“every-epoch”,...“ValidationData”{XValidation, YValidation},...“情节”,“培训进度”,...“冗长”、假);

使用列车网络作用

网= trainNetwork (XTrain、YTrain层,选择);

使用新数据进行预测

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

reportsNew = [...“冷却液在分拣机下方聚集。”“分类器在启动时烧断保险丝。”“从组装器里传出很响的咔哒声。”];

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

documentsNew=预处理文本(reportsNew);

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

XNew = doc2sequence (enc documentsNew,“长度”, sequenceLength);

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

labelsNew=分类(净,XNew)
新标签=3×1范畴泄漏电子故障机械故障

预处理功能

这个函数预处理文本执行以下步骤:

  1. 使用tokenizedDocument.

  2. 使用将文本转换为小写降低.

  3. erasePunctuation.

函数文档=预处理文本(文本数据)%标记文本。文档=标记化文档(textData);%转换成小写。文件=低(文件);%擦掉标点符号。文件=标点符号(文件);终止

另见

|||(深度学习工具箱)|(深度学习工具箱)|(深度学习工具箱)||(深度学习工具箱)|

相关的话题