主要内容

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

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

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

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

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

  • 导入和预处理数据。

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

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

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

进口数据

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

filename =“factoryReports.csv”;数据= readtable(文件名,“TextType”“字符串”);头(数据)
ans =8×5表描述类别紧急解析成本__________________________________________________________________________________________“物品偶尔地陷入扫描仪线轴上。”“机械故障”“中等”“Readjust机器”45“响亮的嘎嘎声和敲打声音来自装配者活塞。”“机械故障”“中等”“Readjust机器”35“在启动工厂时会导致电力。”“电子失效”“高”“”完全更换“16200”油炸电容器在汇编器中。““电子失效”“高”“替换组件”352“搅拌机跳闸保险丝。”“电子失效”“低”“添加到观察列表”55“突发管在构造代理中喷涂冷却液。”“泄漏”“高”“替换组件”371“在混合器中吹入保险丝。”“电子失败”“低”“替换组件”441“的东西继续滚动皮带。”“机械故障”“低”“ReadJust Machine”38

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

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

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

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

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

cvp = cvpartition(data.category,'坚持',0.2);DataTrain =数据(培训(CVP),:);datavalidation = data(测试(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令牌Document:9个令牌:物品偶尔地陷入扫描仪线轴10令牌:响亮的嘎嘎声和敲打声音来自装配者活塞10令牌:在启动工厂时,换电器5令牌:油炸电容器在汇编器4令牌:混音器跳过保险丝

将文档转换为序列

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

要创建单词编码,请使用Wordencoding.函数。

内附= wordEncoding (documentsTrain);

下一个转换步骤是填充和截断文档,使它们都具有相同的长度。的trainingOptions函数提供了自动填充和截断输入序列的选项。然而,这些选项不适用于单词向量序列。相反,手动填充和截断序列。如果你left-pad并对词向量序列进行截断,可以提高训练效果。

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

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

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

使用。将文档转换为数字索引序列doc2sequence.截断或左键填充序列以具有长度10,请设置“长度”选择10。

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

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

xvalidation = doc2sequence(enc,docuitsvalidation,“长度”, sequenceLength);

建立和培训LSTM网络

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

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

指定培训选项

指定培训选项:

  • 用亚当解算器训练。

  • 指定迷你批处理大小为16。

  • 每纪元播放数据。

  • 通过设置来监测培训进度'plots'选项'培训 - 进步'

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

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

默认情况下,trainNetwork如果GPU可用,则使用GPU。否则,使用CPU。要手动指定执行环境,请使用“ExecutionEnvironment”的名称-值对参数trainingOptions.对CPU的培训可能比GPU的培训显着更长。使用GPU的培训需要并行计算工具箱™和支持的GPU设备。金宝app有关支持设备的信息,请参阅金宝appGPU支金宝app持情况(并行计算工具箱)

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

使用培训LSTM网络trainNetwork函数。

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

预测使用新数据

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

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

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

documentsNew = preprocessText (reportsNew);

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

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

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

Labelsnew =分类(Net,Xnew)
labelsNew =3×1分类泄漏电子故障机械故障

预处理功能

功能preprocessText执行以下步骤:

  1. 使用标记文本tokenizedDocument

  2. 将文本转换为小写字母使用较低的

  3. erasePunctuation

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

另请参阅

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

相关的话题