主要内容

使用深度学习对内存不足的文本数据进行分类

这个例子展示了如何用深度学习网络使用转换后的数据存储对内存不足的文本数据进行分类。

转换后的数据存储转换或处理从底层数据存储读取的数据。您可以使用转换后的数据存储作为深度学习应用程序的训练、验证、测试和预测数据集的来源。使用转换后的数据存储来读取内存不足的数据或在读取数据批时执行特定的预处理操作。

在训练网络时,该软件通过填充、截断或分割输入数据来创建具有相同长度的小批量序列。的trainingOptions函数提供了填充和截断输入序列的选项,但是,这些选项不适用于单词向量序列。此外,该函数不支持填充自定义数据存储中的数据。金宝app相反,您必须手动填充和截断序列。如果你left-pad并截断字向量的序列,那么训练可能会提高。

使用深度学习对文本数据进行分类例如手动截短和焊盘的所有文件以相同的长度。这个过程从很长的文件,增加了很多的填充,以非常短的文件,并丢弃大量数据。

另外,为了防止添加过多的填充或丢弃过多的数据,可以创建一个经过转换的数据存储,将小批量的数据输入到网络中。本例中创建的数据存储将文档的小批转换为序列或单词索引,并将每个小批中的左填充符转换为小批中最长文档的长度。

加载预先训练的词嵌入

数据存储需要一个词嵌入来将文档转换为向量序列。加载一个预先训练的词嵌入使用fastTextWordEmbedding.此功能需要文本分析工具箱™模型用于快速文本英语160亿令牌词嵌入金宝app支持包。如果没有安装此支金宝app持包,则该函数将提供下载链接。

emb = fastTextWordEmbedding;

加载数据

从中的数据创建一个表格文本数据存储factoryReports.csv.指定从“描述”“类别”只列。

filenameTrain =“factoryReports.csv”;textName =“描述”;labelName =“类别”;ttdsTrain = tabularTextDatastore (filenameTrain,“SelectedVariableNames”, (textName labelName]);

查看数据存储的预览。

预览(ttdsTrain)
ans =8×2表类别描述  _______________________________________________________________________ ______________________ {' 项目是偶尔陷于扫描器线轴。机械故障装配工的活塞发出响亮的咔哒咔哒声和砰砰声。{'机械故障' '启动工厂时电源被切断了。' '电子故障' ' '汇编器中的电容器损坏。' '电子故障' '混频器跳闸保险丝。{' '电子故障' '}' '施工剂喷淋冷却剂的管道爆裂。{'漏'{'混合器里的保险丝烧断了。{' '电子故障' ' '东西继续从传送带上滚下来。{'机械故障'}

变换数据存储

创建自定义转换函数,将从数据存储读取的数据转换为包含预测器和响应的表。的transformText函数接受从对象读取的数据tabularTextDatastore对象,并返回一个包含预测器和响应的表。预测是C——- - - - - -年代由单词嵌入给出的单词向量的数组循证,在那里C是嵌入维和年代为序列长度。响应是对类的分类标签。

要获取类名,请使用readLabels函数,并找到唯一的类名。

标签= readLabels (ttdsTrain labelName);一会=独特(标签);numObservations =元素个数(标签);

由于表格文本数据存储可以在单一的读取读取多行数据,你可以处理在变换功能的全小批量的数据。为了确保变换函数处理一个完整的小批量的数据,表格文本数据存储的读取大小设置为将被用于训练的小批量大小。

miniBatchSize = 64;ttdsTrain。ReadSize = miniBatchSize;

要将表格文本数据的输出转换为用于训练的序列,请使用转变函数。

tdsTrain = transform(ttdsTrain, @(data) transformText(data,emb,classNames))
tdsTrain = TransformedDatastore与属性:UnderlyingDatastore:[1×1 matlab.io.datastore.TabularTextDatastore] SupportedOutput金宝appFormats:[ “TXT” “CSV” “XLSX” “XLS” “镶木”, “parq” “PNG” “JPG” “JPEG”“TIF”, “TIFF” “WAV” “后手” “奥格” “MP4” “M4A”]变换:{@(数据)transformText(数据,EMB,类名)} IncludeInfo:0

预览转换后的数据存储。预测是C——- - - - - -年代数组,年代序列长度是和吗C为特征个数(嵌入维数)。响应是分类标签。

预览(tdsTrain)
ans =8×2表预测器响应_______________ __________________ {300×11 single}机械故障{300×11 single}机械故障{300×11 single}电子故障{300×11 single}电子故障{300×11 single}电子故障{300×11 single}泄漏{300×11 single}电子故障{300×11 single}机械故障

创建和火车LSTM网络

定义LSTM网络架构。要将序列数据输入到网络中,需要包含一个序列输入层,并设置输入大小为嵌入维数。接下来,包含一个带有180个隐藏单元的LSTM层。若要将LSTM层用于序列到标签的分类问题,请将输出模式设置为“最后一次”.最后,添加一个输出大小等于类数的全连接层、一个softmax层和一个分类层。

numFeatures = emb.Dimension;numHiddenUnits = 180;numClasses =元素个数(类名);层= [...sequenceInputLayer numFeatures lstmLayer (numHiddenUnits,“OutputMode”“最后一次”) fulllyconnectedlayer (numClasses) softmaxLayer classificationLayer;

指定培训选项。指定要使用的求解器“亚当”梯度阈值是2。数据存储不支持变换,因此设置金宝app“洗牌”,“永远”.每个epoch验证一次网络。为了监控训练进度,设置“阴谋”选项“训练进步”.要抑制verbose输出,请设置“详细”

默认情况下,trainNetwork如果GPU可用,则使用GPU。要手动指定执行环境,请使用“ExecutionEnvironment”的名称 - 值对参数trainingOptions.在CPU上进行训练所花费的时间要比在GPU上花费的时间长得多。使用GPU的培训需要并行计算工具箱™和支持的GPU设备。金宝app有关支持的设备的信息,请参见金宝appGPU支金宝app持情况(并行计算工具箱)

numIterationsPerEpoch =地板(numObservations / miniBatchSize);选项= trainingOptions(“亚当”...“MaxEpochs”15岁的...“MiniBatchSize”miniBatchSize,...“GradientThreshold”2,...“洗牌”“永远”...“阴谋”“训练进步”...“详细”,错误的);

训练LSTM网络使用trainNetwork函数。

网= trainNetwork (tdsTrain层,选项);

使用新数据进行预测

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

reportsNew = [...“冷却剂在分拣机下面汇集。”“分拣机吹熔丝的启动。”“有一些来自汇编未来很响的声音乱撞。”];

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

documentsNew = preprocessText (reportsNew);

使用。将文本数据转换为嵌入向量序列doc2sequence

XNew = doc2sequence(EMB,documentsNew);

分类用训练LSTM网络的新序列。

XNew labelsNew =分类(净)
labelsNew =3×1分类泄漏电子故障机械故障

文本转换功能

transformText函数接受从对象读取的数据tabularTextDatastore对象,并返回一个包含预测器和响应的表。预测是C——- - - - - -年代由单词嵌入给出的单词向量的数组循证,在那里C是嵌入维和年代为序列长度。中的类的响应是分类标签一会

函数dataTransformed = transformText(数据、emb类名)%预处理文件。的TextData = {数据:,1};文档= preprocessText(的TextData);%转换为序列。预测= doc2sequence (emb、文档);%阅读标签。数据标签= {:2};反应=分类(标签、类名);%数据转换为表格。dataTransformed =表(预测、反应);结束

预处理功能

功能preprocessText执行以下步骤:

  1. 使用标记文本tokenizedDocument

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

  3. 使用擦除标点符号erasePunctuation

函数文档= preprocessText(textData)文档= tokenizedDocument(textData);文件=低(文件);= erasePunctuation文件(文档);结束

阅读标签功能

readLabels函数创建tabularTextDatastore对象运输大亨读标签labelName列。

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

另请参阅

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

相关话题