此示例显示如何使用卷积神经网络对文本数据进行分类。
使用卷积分类文本数据,则必须将文本数据转换成图像。要做到这一点,填充或截断的意见有一定长度S.并转换成文件长度的字矢量的序列C使用单词嵌入。然后,您可以将文档表示为1-by-S.-经过-C图像(具有高度1的图像时,宽度S., 和C信道)。
要将文本数据从CSV文件转换为图像,请创建一个tabulartextdatastore.
目的。转换从中读取的数据tabulartextdatastore.
通过呼叫来实现图像的图像转变
使用自定义转换功能。这transformTextData
函数,在示例的末尾列出,取自数据存储读取的数据和预先映射的单词嵌入,并将每个观察转换为单词向量数组。
该示例列举了一个网络,其具有不同宽度的1-D卷积滤波器。每个过滤器的宽度对应过滤器可以看到的单词数(n-gram长度)。网络具有多个卷积层分支,因此它可以使用不同的n克长度。
加载佩带的FastText Word嵌入。此功能需要文本分析工具箱™模型对于fastText英语16亿令牌字嵌入金宝app支持包。如果未安装此支持金宝app包,则该功能提供了下载链接。
emb = fasttextwordembedding;
从数据创建一个表格文本数据存储factoryReports.csv
。阅读从数据“描述”
和“类别”
仅限列。
filenameTrain =“factoryreports.csv”;TextName =.“描述”;labelName =.“类别”;ttdsTrain = tabularTextDatastore(filenameTrain,'selectedvariamblenames',[textname labelname]);
预览数据存储。
ttdstrain.readsize = 8;预览(TTDStrain)
ans =.8×2表说明类别_______________________________________________________________________ ______________________ {“项目是偶尔卡在扫描器卷轴。”} {“机械故障”} {“大声拍击和敲打的声音从汇编活塞的到来。”} {“机械故障”} {“开始的工厂时,有削减的权力。”} {“电子故障”} {“炒汇编电容器。”} {“电子故障”} {“混音器跳闸保险丝”。} {“电子失败”} {“在构造剂突发管喷射冷却剂”。} {“泄漏”} {“A熔丝在混合器熔断。”} {“电子故障”} {“事情继续翻滚带了。”} {'机械故障'}
创建转换数据从数据库中读取到包含预测和响应的表自定义转换功能。这transformTextData
函数,在示例末尾列出,获取从a读取的数据tabulartextdatastore.
对象并返回预测器表和响应表。预测器是1-by-Sequencelength.
-经过-C由嵌入单词给出的单词向量阵列EMB
, 在哪里C是嵌入维。该反应是在中的类分类标签Classnames.
。
使用该训练数据读取标签readLabels
功能,在上市的例子结束,并找到独特的类名。
标签= readLabels(ttdsTrain,标签);类名=独特(标签);numObservations = numel(标签);
使用DataStore使用transformTextData
功能并指定序列长度为14。
Sequencelength = 14;TDStrain = Transform(TTDStrain,@(数据)变换extData(数据,序列),emb,classNames))
TDStrain = TranspordedDataStore具有属性:下面的atataStore:[1×1 matlab.io.datastore.tabulartextextdataStore] SupportedOutputFo金宝apprmats:[“TXT”“CSV”“XLSX”“XLS”“Parquet”“Parq”“PAGG”“JCG”“JPG”“JPG”“JPG”“JPG”“JPG”“JPG”“JPG”“JPG”“JPG”“JPG”“JPG”“JPG”“JPG”“JPG”“JPG”“JPG”“JPG”“JPG”)“tif”“tiff”“wav”“flac”“ogg”“mp4”“m4a”]变换:{@(数据)变换extdata(数据,semencelength,emb,classNames)} includeinfo:0
预览转换的数据存储。预测器是1-by-S.-经过-C阵列,其中S.是序列长度和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逐个的输入大小S.-经过-C, 在哪里S.是序列长度和C是功能数量(嵌入尺寸)。
对于n克长度2,3,4和5,形成包含卷积层,批量归一化层,Relu层,丢弃层和最大池层的层的块。
对于每个块,指定200个卷积滤波器的1-by-N和汇集区域为1-by-S., 在哪里N是n-gram长度。
将输入层连接到每个块,并使用深度级联层连接块的输出。
要对输出进行分类,请包括具有输出大小的完全连接的图层K.,softmax层和分类层,在哪里K.是的类的数量。
首先,在层阵列中,指定输入层,为UNIGRAM的第一块,深度倾斜层,完全连接的层,软MAX层和分类层。
numFeatures = emb.Dimension;inputSize = [1个sequenceLength numFeatures];numFilters = 200;ngramLengths = [1 2 3 4 5];numBlocks = numel(ngramLengths);numClasses = numel(类名);
创建包含输入层的层图。将标准化选项'没有任何'
和图层名称'输入'
。
tallay = imageInputLayer(输入,'正常化'那'没有任何'那'姓名'那'输入');lgraph = layerGraph(层);
对于每一个n-gram中的长度,创建卷积,批标准化,RELU,压差和最大池层的块。每个块连接到输入层。
为了j = 1:numblocks n = n = ngramlengths(j);block = [卷积2dlayer([1 n],numfilters,'姓名'那“conv”+ n,'填充'那'相同的'batchnormalizationlayer('姓名'那“bn”+ n)剥离器('姓名'那“relu”+ n)oppoutlayer(0.2,'姓名'那“降低”+ N)maxPooling2dLayer([1 sequenceLength]'姓名'那“最大限度”+ n)];Lgraph = Addlayers(LGROPL,块);Lgraph = ConnectLayers(LAPHAGE,'输入'那“conv”+ n);结尾
查看网络架构中的情节。
图图(lgraph)称号(“网络架构”)
添加深度级联层,所述完全连接层,所述SOFTMAX层和分类层。
图层= [深度扫描层(numblocks,'姓名'那'深度')全连接列(numcrasses,'姓名'那'fc')softmaxlayer('姓名'那'柔软的'scassificationlayer('姓名'那'分类')];lgraph = addLayers(lgraph,层);图图(lgraph)称号(“网络架构”)
最大池层连接到深度级联层和查看最终网络架构中的曲线图。
为了j = 1:numblocks n = n = ngramlengths(j);Lgraph = ConnectLayers(LAPHAGE,“最大限度”+ n,“深度/中”+ j);结尾图图(lgraph)称号(“网络架构”)
指定培训方式:
列车的128迷你批量大小。
因为数据存储不是shuffleable别支支吾吾的数据。
显示培训进度绘图并抑制冗长输出。
minibatchsize = 128;numiterationsperepoch = bloor(numobservations / minibatchsize);选项=培训选项('亚当'那......'MiniBatchSize',小匹马,......'洗牌'那'绝不'那......“情节”那“训练进度”那......'verbose',错误的);
使用培训网络Trainnetwork.
功能。
net = trainnetwork(tdstrain,lgraph,选项);
对三个新报告的事件类型进行分类。创建包含新报告的字符串数组。
eportsnew = [“冷却液在分拣机下面汇集。”“分拣机在启动时吹熔断。”“汇编者有一些非常响亮的嘎嘎声的声音。”];
使用预处理步骤作为培训文档预处理文本数据。
XNew = preprocessText(reportsNew,sequenceLength,EMB);
使用培训的LSTM网络对新序列进行分类。
labelsNew =分类(净,XNew)
Labelsnew =.3×1分类泄漏电子故障机械故障
这readLabels
函数创建的副本tabulartextdatastore.
目的TTDS.
并读取来自标签标签
柱子。
功能标签= readlabels(ttds,labelname)ttdsnew = copy(ttds);ttdsnew.selectedvariablenames = labelName;tbl = readall(ttdsnew);标签= TBL。(LabelName);结尾
这transformTextData
函数取自读取的数据tabulartextdatastore.
对象并返回预测器表和响应表。预测器是1-by-Sequencelength.
-经过-C由嵌入单词给出的单词向量阵列EMB
, 在哪里C是嵌入维。该反应是在中的类分类标签Classnames.
。
功能DataTransformed = TransformTextData(数据,Sequencelength,EMB,ClassNames)%预处理文件。TextData = Data {:,1};%Prepocess文本dataTransformed =预处理文本(TextData,Sequencelength,EMB);%读取标签。标签=数据{:,2};响应=分类(标签,ClassNames);%将数据转换为表。datatransformed.responses =响应;结尾
这preprocessTextData
函数采用文本数据,序列长度和单词嵌入并执行以下步骤:
授权文本。
将文本转换为小写。
使用嵌入将文档转换为指定长度的字向量的序列。
将单词矢量序列重新插入输入到网络中。
功能TBL = preprocessText(的TextData,sequenceLength,EMB)文档= tokenizedDocument(的TextData);文档=低级(文件);%将文档转换为嵌入式逐个0个图像。预测= doc2sequence(EMB,文档'长度',sequencelength);%整形图像是尺寸1逐sequenceLength-embeddingDimension的。预测器= Cellfun(@(x)置换(x,[3 2 1]),预测器,'UniformOutput',错误的);TBL =表;tbl.predictors =预测因子;结尾
batchNormalizationLayer
|Convolution2Dlayer.
|分层图
|培训选项
|Trainnetwork.
|转变
|doc2sequence.
(文本分析工具箱)|fasttextwordembeddings.
(文本分析工具箱)|令人畏缩的鳕文
(文本分析工具箱)|wordcloud
(文本分析工具箱)|Wordembeddings.
(文本分析工具箱)