基于卷积神经网络的文本数据分类
这个例子展示了如何使用卷积神经网络对文本数据进行分类。
要使用卷积对文本数据进行分类,请使用在输入的时间维度上进行卷积的1-D卷积层。
这个例子用不同宽度的一维卷积滤波器训练一个网络。每个过滤器的宽度对应于过滤器可以看到的单词数(n-gram长度)。该网络有多个卷积层分支,因此它可以使用不同的n-gram长度。
加载数据
中的数据创建表格文本数据存储factoryReports.csv
并查看前几个报告。
数据=可读数据(“factoryReports.csv”);头(数据)
ans =8×5表类别描述紧急解决成本 _______________________________________________________________________ ______________________ __________ ______________________ _____ {' 项目是偶尔陷于扫描器线轴。'}{'机械故障'}{'中等'}{'重新调整机器'}45{'巨大的嘎嘎声和砰砰声来自装配活塞。'}{'机械故障'}{'中等'}{'重新调整机器'}35{'启动工厂时电源有切断。'}{'电子故障'}{'高'}{'完全替换'}16200{'汇编程序中的烧坏电容器。'}{'电子故障'}{'高'}{'更换组件'}352{'混频器触发熔断器。'}{'电子故障'}{'低'}{'添加到观察列表'}55{'施工剂中的爆裂管道正在喷射冷却剂。'}{'泄漏'}{'高'}{'更换组件'}371{'混合器内保险丝熔断。'}{'电子故障'}{'低'}{'更换组件'}441{'东西继续从皮带上脱落。'}{'机械故障'}{'低'}{'重新调整机器'}38
将数据划分为训练分区和验证分区。将80%的数据用于训练,其余数据用于验证。
cvp = cvpartition(data.Category,Holdout=0.2);dataTrain = data(training(cvp),:);dataValidation = data(test(cvp),:);
预处理文本数据
方法中提取文本数据“描述”
列的初始化,并使用preprocessText
函数,在本节中列出预处理文本功能这个例子。
documentsTrain = preprocessText(dataTrain.Description);
方法中提取标签“类别”
列并将其转换为分类。
TTrain = categorical(dataTrain.Category);
查看类名和观察数。
classNames =唯一的(TTrain)
一会=4×1分类电子故障泄漏机械故障软件故障
numObservations = numel(TTrain)
numObservations = 384
使用相同的步骤提取和预处理验证数据。
documentsValidation = preprocessText(datavalid . description);TValidation = categorical(datavalid . category);
将文档转换为序列
要将文档输入神经网络,请使用单词编码将文档转换为数字索引序列。
从文档中创建单词编码。
enc = worddencoding (documentsTrain);
查看单词编码的词汇量大小。词汇量大小是单词编码中唯一单词的数量。
numWords = c. numWords
numWords = 436
方法将文档转换为整数序列doc2sequence
函数。
XTrain = doc2sequence(enc,documentsTrain);
使用从训练数据创建的字编码将验证文档转换为序列。
XValidation = doc2sequence(enc,documentsValidation);
定义网络架构
定义分类任务的网络体系结构。
下面介绍组网结构。
指定输入大小为1,它对应于整数序列输入的通道维度。
使用维数为100的词嵌入输入。
对于长度为2、3、4和5的n-gram,创建包含卷积层、批处理规范化层、ReLU层、dropout层和最大池化层的层块。
对于每个块,指定200个大小为1 × -的卷积滤波器N和全局最大池化层。
将输入层连接到每个块,并使用连接层连接块的输出。
为了对输出进行分类,需要包含一个具有输出大小的全连接层K为softmax层,为classification层,其中K是类的数量。
指定网络超参数。
embeddingDimension = 100;ngramlength = [2 3 4 5];numFilters = 200;
首先,创建一个包含输入层和维度为100的单词嵌入层的层图。要帮助将单词嵌入层连接到卷积层,请将单词嵌入层名称设置为“循证”
.若要检查卷积层在训练期间不将序列卷积为长度为零,请设置最小长度
选择训练数据中最短序列的长度。
minLength = min(docclth (documentsTrain));layers = [sequenceInputLayer(1,MinLength= MinLength) wordEmbeddingLayer(embeddingDimension,numWords,Name=“循证”));lgraph = layerGraph(图层);
对于每个n-gram长度,创建一个1-D卷积、批处理归一化、ReLU、dropout和1-D全局最大池化层的块。将每个块连接到单词嵌入层。
numBlocks = nummel (ngramlength);为j = 1:numBlocks N = ngramlength (j);block = [convolution1dLayer(N,numFilters,Name= .“conv”+ N,填充=“相同”) batchNormalizationLayer (Name =“bn”+ N) reluLayer (Name =“relu”+ N) dropoutLayer (0.2, Name =“下降”+ N) globalMaxPooling1dLayer (Name =“马克斯”+ N));lgraph = addLayers(lgraph,block);lgraph = connectLayers(“循证”,“conv”+ N);结束
添加连接层、全连接层、softmax层和分类层。
numClasses = numel(classNames);layers = [concatenationLayer(1,numBlocks,Name= .“猫”) fullyConnectedLayer (numClasses Name =“俱乐部”) softmaxLayer (Name =“软”) classificationLayer (Name =“分类”));lgraph = addLayers(lgraph,layers);
将全局最大池化层连接到连接层,并在图中查看网络体系结构。
为j = 1:numBlocks N = ngramlength (j);lgraph = connectLayers(“马克斯”+ N,“猫/”+ j);结束图表(lgraph)标题(“网络架构”)
列车网络的
指定培训选项:
用128个小批量进行训练。
使用验证数据验证网络。
返回具有最低验证损失的网络。
显示训练进度图并抑制详细输出。
选项= trainingOptions(“亚当”,...MiniBatchSize = 128,...ValidationData = {XValidation, TValidation},...OutputNetwork =“best-validation-loss”,...情节=“训练进步”,...Verbose = false);
训练网络使用trainNetwork
函数。
net = trainNetwork(XTrain,TTrain,lgraph,options);
测试网络
利用训练好的网络对验证数据进行分类。
YValidation = category (net,XValidation);
在困惑图表中可视化预测。
图confusionchart (TValidation YValidation)
计算分类精度。准确率是正确预测的标签的比例。
accuracy = mean(TValidation == YValidation)
准确度= 0.9375
使用新数据进行预测
对三个新报告的事件类型进行分类。创建包含新报告的字符串数组。
reportsNew = [“冷却剂在分拣机下面。”“分拣机在启动时炸断保险丝。”“有一些非常响亮的咔嗒声从组装。”];
将预处理步骤作为训练和验证文档对文本数据进行预处理。
documentsNew = preprocessText(reportsNew);XNew = doc2sequence(enc,documentsNew);
利用训练好的网络对新序列进行分类。
YNew = category (net,XNew)
YNew =3×1分类泄漏电子故障机械故障
预处理文本功能
的preprocessTextData
函数接受文本数据作为输入,并执行以下步骤:
标记文本。
将文本转换为小写。
函数documents = preprocessText(textData) documents = tokenizedDocument(textData);文档=较低(文档);结束
另请参阅
fastTextWordEmbedding
(文本分析工具箱)|wordcloud
(文本分析工具箱)|wordEmbedding
(文本分析工具箱)|layerGraph
|convolution2dLayer
|batchNormalizationLayer
|trainingOptions
|trainNetwork
|doc2sequence
(文本分析工具箱)|tokenizedDocument
(文本分析工具箱)|变换
相关的话题
- 使用深度学习分类文本数据(文本分析工具箱)
- 使用自定义小批量数据存储对内存不足的文本数据进行分类(文本分析工具箱)
- 创建简单的文本分类模型(文本分析工具箱)
- 使用主题模型分析文本数据(文本分析工具箱)
- 使用多词短语分析文本数据(文本分析工具箱)
- 训练一个情感分类器(文本分析工具箱)
- 使用深度学习的序列分类
- 用于深度学习的数据存储
- MATLAB深度学习