主要内容

使用深度学习分类文本数据

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

文本数据的自然顺序。一段文字是一个序列的话,可能他们之间的依赖关系。学习并使用长期依赖分类序列数据,使用一个LSTM神经网络。LSTM网络是一种递归神经网络(RNN),可以学习长期时间步骤的序列数据之间的依赖关系。

输入文本LSTM网络,首先将文本数据转换为数字序列。您可以使用一个字编码实现这个地图文件序列的数字指标。对于更好的结果,也包括网络中的嵌入层。字嵌入的词在词汇映射到数值向量而不是标量指数。这些嵌入的捕捉语义细节的话说,这词的含义也有类似的向量。他们还通过矢量运算模型之间的关系的话。例如,关系”罗马是意大利巴黎是法国方程所描述的”是意大利- - - - - -法国巴黎罗马+ =。

有四个步骤的培训和使用LSTM网络在这个例子:

  • 导入和数据进行预处理。

  • 将文字转换为数字序列编码使用一个词。

  • 创建和火车LSTM网络与一个字嵌入层。

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

导入数据

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

文件名=“factoryReports.csv”;data = readtable(文件名,“TextType”,“字符串”);头(数据)
ans =8×5表类别描述紧急解决成本_____________________________________________________________________ ____________________ ________ ____________________ _____”项目是偶尔陷入扫描仪卷。”"Mechanical Failure" "Medium" "Readjust Machine" 45 "Loud rattling and banging sounds are coming from assembler pistons." "Mechanical Failure" "Medium" "Readjust Machine" 35 "There are cuts to the power when starting the plant." "Electronic Failure" "High" "Full Replacement" 16200 "Fried capacitors in the assembler." "Electronic Failure" "High" "Replace Components" 352 "Mixer tripped the fuses." "Electronic Failure" "Low" "Add to Watch List" 55 "Burst pipe in the constructing agent is spraying coolant." "Leak" "High" "Replace Components" 371 "A fuse is blown in the mixer." "Electronic Failure" "Low" "Replace Components" 441 "Things continue to tumble off of the belt." "Mechanical Failure" "Low" "Readjust Machine" 38

这个例子的目的是对事件的标签进行分类类别列。把数据分成类,将这些标签转换为分类。

数据。类别=分类(data.Category);

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

图直方图(data.Category);包含(“类”)ylabel (“频率”)标题(“类分配”)

下一步是将其划分为训练集和验证。数据分割成一个培训分区和伸出的分区进行验证和测试。指定抵抗百分比为20%。

本量利= cvpartition (data.Category,“坚持”,0.2);dataTrain =数据(训练(cvp):);dataValidation =数据(测试(cvp):);

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

textDataTrain = dataTrain.Description;textDataValidation = dataValidation.Description;YTrain = dataTrain.Category;YValidation = dataValidation.Category;

检查正确地导入了数据,可视化培训文本数据使用一个词云。

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

预处理文本数据

创建一个函数符和文本数据进行预处理。这个函数preprocessText上市的例子,执行以下步骤:

  1. 在标记文本使用tokenizedDocument

  2. 将文本转换为小写较低的

  3. 删除标点符号使用erasePunctuation

预处理使用训练数据和验证数据preprocessText函数。

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

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

documentsTrain (1:5)
ans = 5×1 tokenizedDocument: 9令牌:项目中偶尔陷入扫描仪线轴10令牌:大声作响,声音来自汇编活塞10令牌:削减能力,启动植物5令牌:油炸电容器在汇编程序4令牌:搅拌机绊倒保险丝

将文档转换成序列

输入的文件到一个LSTM网络,使用一个词编码将文档转换成数字序列指数。

创建一个词编码,使用wordEncoding函数。

内附= wordEncoding (documentsTrain);

下一个转换步骤是垫和截断文件,所以他们都是一样的长度。的trainingOptions函数提供了选项板和自动截断输入序列。然而,这些选项并不是适合的词序列向量。相反,垫和手动截短的序列。如果你left-pad和截断的词序列向量,然后训练可能会提高。

垫和截断文件,首先选择一个目标长度,然后截断文档超过left-pad文档比它短。为达到最佳效果,目标长度应该短而丢弃大量数据。找到一个合适的目标长度,查看直方图培训文档的长度。

documentLengths = doclength (documentsTrain);图直方图(documentLengths)标题(“文档长度”)包含(“长度”)ylabel (“文件”)

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

将文档转换成数字序列指标使用doc2sequence。截断或left-pad序列长度10,设置“长度”选择10。

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

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

XValidation = doc2sequence (enc documentsValidation,“长度”,sequenceLength);

创建和火车LSTM网络

定义LSTM网络体系结构。序列数据输入网络,包括序列输入层和设置输入大小为1。接下来,包括50字嵌入层尺寸和相同数量的词为“编码”这个词。接下来,包括一组LSTM层和隐藏单位的数量到80年。使用LSTM层sequence-to-label分类问题,设置输出模式“最后一次”。最后,添加一个完全连接层的大小和类的数量相同,softmax层和一层分类。

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

指定培训选项

指定培训选项:

  • 火车用亚当的能手。

  • 指定一个mini-batch 16的大小。

  • 混乱的数据每一时代。

  • 通过设置监控培训进展“阴谋”选项“训练进步”

  • 指定验证数据使用“ValidationData”选择。

  • 抑制详细输出通过设置“详细”选项

默认情况下,trainNetwork使用GPU如果一个是可用的。否则,它使用CPU。手动指定执行环境,使用“ExecutionEnvironment”名称-值对的观点trainingOptions。培训在CPU可以显著长于GPU。培训与GPU需要并行计算工具箱™和支持GPU设备。金宝app支持设备的信息,请参阅金宝appGPU的金宝app支持版本(并行计算工具箱)

选择= trainingOptions (“亚当”,“MiniBatchSize”,16岁,“GradientThreshold”2,“洗牌”,“every-epoch”,“ValidationData”{XValidation, YValidation},“阴谋”,“训练进步”,“详细”、假);

火车LSTM网络使用trainNetwork函数。

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

预测使用新数据

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

reportsNew = [“冷却池下面分选机。”“在启动分选机把保险丝烧断了。”“有一些非常响亮的哒哒声来自汇编程序。”];

预处理文本数据使用的预处理步骤作为培训文档。

documentsNew = preprocessText (reportsNew);

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

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

使用训练LSTM网络分类的新序列。

XNew labelsNew =分类(净)
labelsNew =3×1分类泄漏电子机械失败

预处理功能

这个函数preprocessText执行以下步骤:

  1. 在标记文本使用tokenizedDocument

  2. 将文本转换为小写较低的

  3. 删除标点符号使用erasePunctuation

函数文件= preprocessText (textData)%在标记文本。文件= tokenizedDocument (textData);%转换为小写。文件=低(文件);%擦掉标点符号。= erasePunctuation文件(文档);结束

另请参阅

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

相关的话题