分类文本数据使用Deep学习

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

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

输入文本到LSTM网络,第一文本数据转换成数字序列。您可以使用文字编码,这映射文件,以数字索引的顺序实现这一目标。为了获得更好的效果,还包括一个字在网络中埋层。Word中的嵌入的词汇数值向量,而不是标量指数映射的话。这些的嵌入捕捉的话语义细节,让具有类似意义的词语,也有类似的载体。他们还通过向量算法模型词之间的关系。例如,关系“罗马是意大利的巴黎是法国“由下式描述的意大利-罗马+巴黎=法国。

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

  • 导入和预处理数据。

  • 转换的话使用编码字数字序列。

  • 创建并使用文字埋层训练的LSTM网络。

  • 用训练LSTM网络分类新文本数据。

导入数据

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

文件名=“factoryReports.csv”;数据= readtable(文件名,'TextType''串');头(数据)
ANS =8×5表说明类别紧急分辨率成本_____________________________________________________________________ ____________________ ____________________ ________ _____“的相关文件偶尔会卡在扫描器卷轴。”“机械故障”,“中等”,“重新调整机” 45“大声剑拔弩张和敲打的声音从汇编活塞都来了。”“机械故障”,“中等”,“重新调整机” 35“有削减电力启动设备时。”“电子故障”“高”“完全替代” 16200“在汇编炒电容器。”“电子故障”“高”“替换组件” 352“混音器跳闸保险丝。”“电子故障”“低”“添加到收藏” 55“在构建代理爆管被喷洒冷却液。”“泄漏”“高”“替换组件” 371“A熔丝在混合器吹”。“电子故障”“低”“替换组件” 441“事情继续翻滚带了。”“机械故障”,“低”,“重新调整机” 38

这个例子的目的是将事件归由标签类别柱。为了将数据分成类,这些标签转换为分类。

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

查看类的数据用柱状图的分布。

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

下一步是将其划分为集培训和验证。将数据划分为训练分区,并进行验证和测试使用保留分区。指定抵抗比例为20%。

CVP = cvpartition(data.Category,'坚持',0.2);dataTrain =数据(训练(CVP),:);资料验证=数据(测试(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功能。

ENC = wordEncoding(documentsTrain);

下一个转换步骤是垫和截断文档,以便它们都具有相同的长度。该trainingOptions功能提供的选项用于垫和自动截断输入序列。然而,这些选项不能很好适合于字矢量的序列。取而代之的是,垫和手动截断序列。如果你左垫并截断字向量的序列,那么训练可能会提高。

要垫和截断的文件,先选择一个目标长度,然后是比它和左垫文件是比它短长截断文件。为获得最佳结果,目标长度应短而不丢弃大量的数据。找到一个合适的目标长度,查看训练文件长度的直方图。

documentLengths = doclength(documentsTrain);图直方图(documentLengths)标题(“文件长度”)xlabel(“长度”)ylabel(“文件数量”

大部分的训练文档少于10个令牌。以此为截断和填充你的目标长度。

将文档转换为使用数字索引序列doc2sequence。要截断或左垫序列具有长度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层,设置输出模式为'持续'。最后,用相同的尺寸的类的数量,一个SOFTMAX层和分类层中添加完全连接层。

inputSize = 1;embeddingDimension = 50;numHiddenUnits = 80;NUMWORDS = enc.NumWords;numClasses = numel(类别(YTrain));层= [...sequenceInputLayer(inputSize)wordEmbeddingLayer(embeddingDimension,NUMWORDS)lstmLayer(numHiddenUnits,'输出outputmode''持续')fullyConnectedLayer(numClasses)softmaxLayer classificationLayer]
层= 6×1层阵列层:1“”字埋设层字嵌入与50点的尺寸层和423个的唯一字3“” LSTM LSTM用80个隐藏单元4“充分完全连接4”“序列与1名维2输入序列输入”连接层5 '' 使用SoftMax SOFTMAX 6 '' 分类输出crossentropyex

指定培训选项

指定培训方式:

  • 培养使用ADAM求解。

  • 指定16的小批量大小。

  • 洗牌每一个时代的数据。

  • 监控通过设置训练进度“情节”选项“训练进度”

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

  • 禁止通过设置详细的输出“放牧”选项

默认,trainNetwork使用GPU(如果可用)(需要并行计算工具箱™和启用CUDA®GPU计算能力3.0或更高版本)。否则,它使用的CPU。要手动指定执行环境中,使用“执行环境”的名称 - 值对参数trainingOptions。在CPU上训练能比在GPU训练显著需要更长的时间。

选项= trainingOptions('亚当'...'MiniBatchSize'16,...'GradientThreshold',2,...“洗牌”“每个历元”...'ValidationData'{XValidation,YValidation}...“情节”“训练进度”...“放牧”,假);

使用训练LSTM网络trainNetwork功能。

净= trainNetwork(XTrain,YTrain,层,选项);

预计使用新数据

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

reportsNew = [...“冷却液池下方分拣机。”“分拣机吹熔丝的启动。”“有一些来自汇编未来很响的声音乱撞。”]。

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

documentsNew = preprocessText(reportsNew);

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

XNew = doc2sequence(ENC,documentsNew,'长度',sequenceLength);

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

labelsNew =分类(净,XNew)
labelsNew =3×1分类泄漏故障的电子机械故障

预处理功能

功能preprocessText执行下列步骤操作:

  1. 使用令牌化文本tokenizedDocument

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

  3. 使用擦除标点符号erasePunctuation

功能文档= preprocessText(的TextData)%记号化的文字。文档= tokenizedDocument(的TextData);%转换为小写。文档=低级(文件);%擦除标点符号。文档= erasePunctuation(文件);结束

也可以看看

||||||||

相关话题