使用卷积神经网络分类文本数据
这个例子展示了如何使用卷积神经网络分类文本数据。
对文本数据进行分类使用曲线玲珑,你必须将文本数据转换为图像。为此,垫或截断观测长度不变年代和文档转换成序列词向量的长度C使用嵌入。然后,您可以将文档表示为1 -年代——- - - - - -C图像(图像1高度,宽度年代,C渠道)。
将文本数据从CSV文件图片,创建一个tabularTextDatastore
对象。将读取的数据tabularTextDatastore
对象为深度学习通过调用图像变换
与一个定制的转换函数。的transformTextData
函数,列出的示例中,将数据从数据存储和读取pretrained字嵌入,并将每个观察词向量的一个数组。
这个例子列车网络和不同宽度的一维卷积过滤器。每个过滤器的宽度对应的字数过滤器可以看到(n元长度)。网络有多个分支的卷积层,因此可以使用不同的语法长度。
负载Pretrained字嵌入
加载pretrained fastText字嵌入。这个函数需要的文本分析工具箱™模型160亿年fastText英语嵌入标记词金宝app支持包。如果这种支持包没金宝app有安装,那么函数提供一个下载链接。
emb = fastTextWordEmbedding;
加载数据
创建一个表格文本数据的数据存储factoryReports.csv
。读取的数据“描述”
和“类别”
只列。
filenameTrain =“factoryReports.csv”;textName =“描述”;labelName =“类别”;ttdsTrain = tabularTextDatastore (filenameTrain,“SelectedVariableNames”,(textName labelName]);
预览数据存储。
ttdsTrain。ReadSize = 8;预览(ttdsTrain)
ans =8×2表描述类别_______________________________________________________________________ ______________________{的物品是偶尔陷入扫描仪线轴。'}{“机械故障”}{”大声作响,声音是来自汇编活塞。'}{“机械故障”}{有削减权力时开始。'}{“电子失败”}{“炸电容器在汇编程序。'}{“电子失败”}{”融合机跳闸。'}{“电子失败”}{的破裂管道建设代理喷洒冷却剂。'}{“泄漏”}{混合器的保险丝吹。'}{“电子失败”}{事情继续下跌的腰带。'}{}“机械故障”
创建一个自定义转换函数将数据从数据存储读取转换为表包含预测和响应。的transformTextData
函数,列出的例子中,需要读取的数据tabularTextDatastore
对象,并返回一个表的预测和响应。1——预测sequenceLength
——- - - - - -C数组的词向量“嵌入”这个词循证
,在那里C嵌入维数。类反应分类标签一会
。
从训练数据读取标签使用readLabels
函数,列出的例子,并找到独特的类名。
标签= readLabels (ttdsTrain labelName);一会=独特(标签);numObservations =元素个数(标签);
将数据存储使用transformTextData
并指定一个函数序列的长度14。
sequenceLength = 14;tdsTrain =变换(ttdsTrain @(数据)transformTextData(数据、sequenceLength emb,类名)
tdsTrain = TransformedDatastore属性:UnderlyingDatastore:(1×1 matlab.io.datastore。TabularTextDatastore] 金宝appSupportedOutputFormats(“三种”:“csv”“xlsx”“xls”“铺”“parq”“png”“jpg”“jpeg”“tif”“tiff”“wav”“flac”“ogg”“mp4”“m4a格式)转换:{@(数据)transformTextData(数据、sequenceLength emb一会)}IncludeInfo: 0
预览转换后的数据存储。1——预测年代——- - - - - -C数组,年代序列长度和吗C是功能的数量(嵌入维数)。分类标签的响应。
预览(tdsTrain)
ans =8×2表预测反应_________________ _____________{1×14×300单}机械故障{1×14×300单}机械故障{1×14×300单}电子故障{1×14×300单}电子故障{1×14×300单}电子故障{1×14×300单}{1×14×300单}电子泄漏故障{1×14×300单}机械故障
定义网络体系结构
定义分类任务的网络体系结构。
下面的步骤描述了网络体系结构。
指定一个输入1 -的大小年代——- - - - - -C,在那里年代序列长度和吗C是功能的数量(嵌入维数)。
语法长度的2、3、4和5,创建的层块包含一个卷积层,一批标准化层,ReLU层,一层辍学,马克斯池层。
对于每个块,指定大小1 - 200卷积过滤器N和1 -池区域的大小年代,在那里N是语法的长度。
输入层连接到每一块和连接块的输出使用深度连接层。
对输出进行分类,包括一个完全连接层与输出大小Ksoftmax层,一层分类,K类的数量。
首先,在一层数组,指定输入层,第一块unigrams,深度连接层,完全连接层,将softmax层,和分类层。
numFeatures = emb.Dimension;inputSize = [1 sequenceLength numFeatures];numFilters = 200;ngramLengths = (2 3 4 5);numBlocks =元素个数(ngramLengths);numClasses =元素个数(类名);
创建一个层图含有输入层。设置规范化选项“没有”
和图层名称“输入”
。
层= imageInputLayer (inputSize,“归一化”,“没有”,“名字”,“输入”);lgraph = layerGraph(层);
为每个语法长度、创建一个块卷积,批处理规范化,ReLU、辍学,马克斯池层。每一块连接到输入层。
为j = 1: numBlocks N = ngramLengths (j);块= [convolution2dLayer (N [1], numFilters,“名字”,“conv”+ N,“填充”,“相同”)batchNormalizationLayer (“名字”,“bn”+ N) reluLayer (“名字”,“relu”+ N) dropoutLayer (0.2,“名字”,“下降”+ N) maxPooling2dLayer ([1 sequenceLength],“名字”,“马克斯”+ N));lgraph = addLayers (lgraph块);lgraph = connectLayers (lgraph,“输入”,“conv”+ N);结束
查看网络体系结构在一个阴谋。
图绘制(lgraph)标题(“网络架构”)
添加深度连接层,完全连接层,将softmax层,和分类层。
层= [depthConcatenationLayer numBlocks,“名字”,“深度”)fullyConnectedLayer (numClasses“名字”,“俱乐部”)softmaxLayer (“名字”,“软”)classificationLayer (“名字”,“分类”));lgraph = addLayers (lgraph层);图绘制(lgraph)标题(“网络架构”)
马克斯池层连接到深度连接层和视图的阴谋的最后网络体系结构。
为j = 1: numBlocks N = ngramLengths (j);lgraph = connectLayers (lgraph,“马克斯”+ N,“深度/”+ j);结束图绘制(lgraph)标题(“网络架构”)
列车网络的
指定培训选项:
火车mini-batch大小为128。
不推诿不shuffleable因为数据存储的数据。
显示培训进展情节和抑制详细的输出。
miniBatchSize = 128;numIterationsPerEpoch =地板(numObservations / miniBatchSize);选择= trainingOptions (“亚当”,…“MiniBatchSize”miniBatchSize,…“洗牌”,“永远”,…“阴谋”,“训练进步”,…“详细”、假);
列车网络使用trainNetwork
函数。
网= trainNetwork (tdsTrain、lgraph选项);
预测使用新数据
三个新报告的事件类型进行分类。创建一个字符串数组,其中包含新报告。
reportsNew = [“冷却池下面分选机。”“在启动分选机把保险丝烧断了。”“有一些非常响亮的哒哒声来自汇编程序。”];
预处理文本数据使用的预处理步骤作为培训文档。
XNew = preprocessText (reportsNew、sequenceLength emb);
使用训练LSTM网络分类的新序列。
XNew labelsNew =分类(净)
labelsNew =3×1分类泄漏电子机械失败
阅读标签功能
的readLabels
函数创建的一个副本tabularTextDatastore
对象运输大亨
和读取的标签labelName
列。
函数标签= readLabels(运输大亨,labelName) ttdsNew =(运输大亨)复印件;ttdsNew。年代electedVariableNames = labelName; tbl = readall(ttdsNew); labels = tbl.(labelName);结束
文本数据转换函数
的transformTextData
函数读取的数据tabularTextDatastore
对象,并返回一个表的预测和响应。1——预测sequenceLength
——- - - - - -C数组的词向量“嵌入”这个词循证
,在那里C嵌入维数。类反应分类标签一会
。
函数dataTransformed = transformTextData(数据、sequenceLength emb一会)%预处理文件。数据textData = {: 1};% Prepocess文本dataTransformed = preprocessText (textData、sequenceLength emb);%阅读标签。数据标签= {:2};反应=分类(标签、类名);%将数据转换成表。dataTransformed。=反应的反应;结束
文本预处理功能
的preprocessTextData
函数接受文本数据、序列长度和嵌入和执行这些步骤:
在标记文本。
将文本转换为小写的。
将文件转换为序列词使用嵌入指定长度的向量。
重塑这个词向量序列输入到网络。
函数台= preprocessText (textData、sequenceLength emb)文件= tokenizedDocument (textData);文件=低(文件);%将文档转换成embeddingDimension-by-sequenceLength-by-1图像。预测= doc2sequence (emb、文档“长度”,sequenceLength);% 1-by-sequenceLength-embeddingDimension重塑图像的大小。预测= cellfun (@ (X)排列(X,[3 2 1]),预测,“UniformOutput”、假);台=表;资源描述。预测=预测;结束
另请参阅
batchNormalizationLayer
|convolution2dLayer
|layerGraph
|trainingOptions
|trainNetwork
|变换
|doc2sequence
(文本分析工具箱)|fastTextWordEmbedding
(文本分析工具箱)|tokenizedDocument
(文本分析工具箱)|wordcloud
(文本分析工具箱)|wordEmbedding
(文本分析工具箱)
相关的话题
- 使用深度学习分类文本数据(文本分析工具箱)
- 使用自定义Mini-Batch数据存储内存不足的文本数据进行分类(文本分析工具箱)
- 创建简单的文本分类模型(文本分析工具箱)
- 使用主题模型分析文本数据(文本分析工具箱)
- 使用多字短语分析文本数据(文本分析工具箱)
- 训练情绪分类器(文本分析工具箱)
- 使用深度学习序列分类
- 数据存储深度学习
- 深度学习在MATLAB