主要内容

基于卷积神经网络的文本数据分类

这个例子展示了如何使用卷积神经网络对文本数据进行分类。

要使用卷积对文本数据进行分类,必须将文本数据转换为图像。为此,垫或截断观察结果是否具有恒定长度S.并将文档转换为长度的单词矢量序列C使用单词嵌入。然后,您可以将文档表示为1-by-S.——- - - - - -C图像(高度1,宽度的图像S.,C频道)。

若要将文本数据从CSV文件转换为图像,请创建tabularTextDatastore对象。转换从tabularTextDatastore对图像对象进行深度学习的调用变换使用自定义转换函数。这变换extdata.函数从数据存储中读取数据并进行预先训练的单词嵌入,并将每个观察结果转换为单词向量数组。

这个例子用不同宽度的一维卷积滤波器训练网络。每个过滤器的宽度对应于过滤器可以看到的单词数(n-gram长度)。该网络具有多个卷积层分支,因此可以使用不同的n-gram长度。

加载佩带的单词嵌入

加载预先训练的fastText单词嵌入。此函数需要Text Analytics Toolbox™模型对于FastText英语160亿令牌字嵌入金宝app支持包。如果未安装此支持金宝app包,则该函数提供了下载链接。

emb = fastTextWordEmbedding;

加载数据

从数据中创建表格文本数据存储factoryreports.csv.。阅读数据“描述”“类别”只列。

Filenametrain =“factoryReports.csv”;textName =“描述”;labelName =“类别”;ttdstrain = tabulartextdataStore(filenametrain,“SelectedVariableNames”, (textName labelName]);

预览数据存储。

ttdsTrain。ReadSize = 8;预览(ttdsTrain)
ans =8×2表说明类别_______________________________________________________________________ ______________________ {“项目是偶尔卡在扫描器卷轴。”} {'机械故障'} {'响亮的嘎嘎声和敲打声来自瓶子活塞。'} {'机械故障'} {'在开始工厂时有削减到电源。} {'电子失败'} {'汇编程序中的油炸电容器。'} {'电子失败'} {'混音器绊倒了保险丝。'{“电子故障”} {“构造代理中的”突发管道喷洒冷却剂“。} {'泄漏'} {'一个熔丝是在混音器中吹来的。} {'电子失败'} {'事情继续滚动腰带。'} {'机械故障'}

创建自定义转换函数,将从数据存储读取的数据转换为包含预测器和响应的表。这变换extdata.函数(列在示例的最后)获取从tabularTextDatastore对象,并返回包含预测器和响应的表。预测因子是1-sequenceLength——- - - - - -C由单词嵌入给出的单词向量数组胚胎,在那里C是嵌入的维度。对课程的响应是分类标签一会

使用培训数据读取标签readlabels.函数,在示例的末尾列出,并找到唯一的类名。

Labels = ReadLabels(TTDStrain,LabelName);ClassNames =独特(标签);numobservations = numel(标签);

使用。转换数据存储变换extdata.函数,并指定序列长度为14。

sequenceLength = 14;tdsTrain = transform(ttdsTrain, @(data) transformTextData(data,sequenceLength,emb,classNames))
UnderlyingDatastore: [1×1 matlab.io.datastore.]TabularTextDatastore] 金宝appSupportedOutputFormats: ["txt" "csv" "xlsx" "xls" "parq" "png" "jpg" "jpeg" "tif" "tiff" "wav" "flac" "ogg" "mp4" "m4a"]转换:{@(data)transformTextData(data,sequenceLength,emb,classNames)} IncludeInfo: 0

预览转换后的数据存储。预测因子是1-S.——- - - - - -C阵列,在哪里S.是序列长度和C是特征的数量(嵌入维数)。这些反应就是分类标签。

预览(TDStrain)
ans =8×2表预测器响应_________________ __________________ {1×14×300 single}机械故障{1×14×300 single}机械故障{1×14×300 single}电子故障{1×14×300 single}电子故障{1×14×300 single}电子故障{1×14×300 single}泄漏{1×14×300 single}电子故障{1×14×300 single}机械故障

定义网络架构

定义分类任务的网络体系结构。

以下步骤描述了网络架构。

  • 指定输入大小为1-by-S.——- - - - - -C,在那里S.是序列长度和C是特征的数量(嵌入维数)。

  • 对于长度为n-gram的2、3、4和5,创建包含卷积层、批处理归一化层、ReLU层、dropout层和max pooling层的层块。

  • 对于每个块,指定200个大小为1-by-的卷积滤波器N将大小为1-的区域汇聚起来S.,在那里N是n元的长度。

  • 将输入层连接到每个块,并使用深度连接层连接块的输出。

  • 要对输出进行分类,包括一个具有输出大小的全连接层K.、softmax层和分类层,其中K.是课程的数量。

首先,在层数组中,指定输入层、组图的第一个块、深度连接层、完全连接层、softmax层和分类层。

numfeatures = emb.dimension;InputSize = [1个Sequencelength NumFeatures];numfilters = 200;ngramlengths = [2 3 4 5];numblocks = numel(ngramlengths);numclasses = numel(classnames);

创建包含输入层的图层图。将归一化选项设置为“没有”层名'输入'

层= imageInputLayer (inputSize,“归一化”“没有”'名称''输入');Lgraph = LayerGraph(层);

对于每个n克长度,创建卷积块,批量归一化,relu,丢弃和最大池池层。将每个块连接到输入层。

为了N = ngramlength (j);block =[卷积2dlayer ([1 N],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);结束

在绘图中查看网络架构。

图绘制(3)标题(“网络架构”

添加深度级联层,完全连接的层,软墨幅层和分类层。

图层= [深度扫描层(numblocks,'名称'“深度”) fullyConnectedLayer (numClasses'名称'“俱乐部”) softmaxLayer ('名称''柔软的') classificationLayer ('名称''分类')];Lgraph = Addlayers(LAGHAGH,层);图绘制(3)标题(“网络架构”

将最大池层连接到深度连接层,并在绘图中查看最终网络架构。

为了N = ngramlength (j);lgraph = connectLayers (lgraph,“最大限度”+ N,“深度/在”+ j);结束图绘制(3)标题(“网络架构”

火车网络

指定培训选项:

  • 迷你批量大小为128的火车。

  • 不要随数据存储而擦拭数据,因为数据存储不是可擦拭的。

  • 显示训练进度图并抑制详细输出。

miniBatchSize = 128;numIterationsPerEpoch =地板(numObservations / miniBatchSize);选择= trainingOptions ('亚当'......'minibatchsize'miniBatchSize,......“洗牌”'绝不'......'plots''培训 - 进步'......“详细”、假);

训练网络使用trainNetwork功能。

网= trainNetwork (tdsTrain、lgraph选项);

使用新数据预测

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

reportsNew = [“冷却剂在分拣机下面聚集。”“分拣机在启动时烧断保险丝。”“装配器发出了一些非常响亮的咔嗒咔嗒声。”];

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

xnew = preprocesstext(eportsnew,sequencelength,mem);

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

labelsnew =分类(net,xnew)
labelsNew =3×1分类泄漏电子故障机械故障

阅读标签功能

readlabels.函数创建副本tabularTextDatastore目的运输大亨并从中读取标签labelName.列。

函数标签= readLabels(ttds,labelName) ttdsNew = copy(ttds);ttdsNew。选择edVariableNames = labelName; tbl = readall(ttdsNew); labels = tbl.(labelName);结束

转换文本数据函数

变换extdata.函数获取从tabularTextDatastore对象,并返回包含预测器和响应的表。预测因子是1-sequenceLength——- - - - - -C由单词嵌入给出的单词向量数组胚胎,在那里C是嵌入的维度。对课程的响应是分类标签一会

函数dataTransformed = transformTextData(数据、sequenceLength emb一会)%预处理文件。数据textData = {: 1};%prepecess文本dataTransformed = preprocessText (textData、sequenceLength emb);%读取标签。数据标签= {:2};反应=分类(标签、类名);%将数据转换为表。dataTransformed。=反应的反应;结束

文本预处理功能

preprocesstextdata.函数接受文本数据、序列长度和单词嵌入,并执行以下步骤:

  1. 在标记文本。

  2. 将文本转换为小写。

  3. 使用嵌入将文档转换为指定长度的字向量序列。

  4. 改变输入到网络中的单词向量序列。

函数tbl = preprocesstext(textdata,sequencelength,mem)文档= tokenizeddocument(textdata);文件=较低(文件);%将文档转换为内嵌按顺序排列的dimension -by- sequenceleng1图像。predictors = doc2sequence(mem,文件,“长度”, sequenceLength);%重塑图像大小为1-ef-sequenceLight-EmbeddingDimension。cellfun(@(X) permute(X,[3 2 1]),predictors,'统一输出'、假);台=表;资源描述。预测=预测;结束

也可以看看

||||||(文本分析工具箱)|(文本分析工具箱)|(文本分析工具箱)|(文本分析工具箱)|(文本分析工具箱)

相关的话题