主要内容

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

此示例显示如何使用转换的数据存储对存储器外部文本数据进行分类。

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

在培训网络时,软件通过填充,截断或分割输入数据创建相同长度的逐个序列。这培训选项功能为填充和截断输入序列提供选项,但是这些选项不太适用于单词向量的序列。此外,此功能不支持自定义数据存储中的填充数据。万博1manbetx相反,您必须手动填充并截断序列。如果你左侧垫子并截断单词向量的序列,然后培训可能改善。

使用深度学习对文本数据进行分类示例手动截断并填充所有文档到相同的长度。此过程为非常短的文档添加了大量填充,并丢弃来自很长的文档的大量数据。

或者,为了防止添加过多的填充或丢弃太多数据,创建一个将更批量输入网络的转换数据存储。在此示例中创建的数据存储批量将Mini-Batch的文档转换为序列或单词索引,以及每个迷你批处理中最长文档的长度的左键。

加载佩带的单词嵌入

数据存储需要嵌入单词以将文档转换为向量序列。加载嵌入使用的预磨词fasttextwordembeddings.。此功能需要文本分析工具箱™模型对于FastText英语160亿令牌字嵌入万博1manbetx支持包。如果未安装此支持万博1manbetx包,则该函数提供了下载链接。

emb = fasttextwordembedding;

加载数据

从数据中创建表格文本数据存储factoryreports.csv.。指定要从中读取数据“描述”“类别”仅限列。

Filenametrain =.“factoryreports.csv”;TextName =.“描述”;labelName =.“类别”;ttdstrain = tabulartextdataStore(filenametrain,'selectedvariamblenames',[textname labelname]);

查看数据存储的预览。

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

转换数据存储

创建自定义转换函数,将从数据存储读取的数据转换为包含预测器和响应的表。这变形文字函数取自读取的数据tabulartextdatastore.对象并返回预测器表和响应表。预测因子是C-经过-S.由嵌入单词给出的单词向量阵列胚胎, 在哪里C是嵌入的维度和S.是序列长度。响应是类上的分类标签。

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

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

由于表格文本数据存储可以在单个读取中读取多行数据,因此可以在转换功能中处理完整的百分比数据。为确保转换功能处理完整的批次数据,将表格文本数据存储的读大小设置为将用于培训的迷你批次大小。

minibatchsize = 64;ttdstrain.readsize = minibatchsize;

要将表格文本数据的输出转换为训练序列,请使用该转换数据存储转变功能。

tdstrain =转换(ttdstrain,@(data)变换文本(数据,emb,classnames))
TDStrain = TranspordedDataStore具有属性:下面的atataStore:[1×1 matlab.io.datastore.tabulartextextdataStore] SupportedOutputFo万博1manbetxrmats:[“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”]变换:{@(数据)变换文本(数据,emb,classNames)} includeinfo:0

预览转换数据存储。预测因子是C-经过-S.阵列,在哪里S.是序列长度和C是功能数量(嵌入尺寸)。答案是分类标签。

预览(TDStrain)
ans =.8×2表预测响应_______________ __________________ {300×11单}机械故障{300×11单}机械故障{300×11单}电子故障{300×11单}电子故障{300×11单}电子失败{300×11单}泄漏{300×11单}电子故障{300×11单}机械故障

创建和训练LSTM网络

定义LSTM网络架构。要将序列数据输入网络,请包括序列输入层并将输入大小设置为嵌入尺寸。接下来,包括具有180个隐藏单元的LSTM层。要使用LSTM层进行序列到标签分类问题,请将输出模式设置为'最后的'。最后,将具有等于类别的输出大小的完全连接的图层,Softmax层和分类层。

numfeatures = emb.dimension;numhidendunits = 180;numclasses = numel(classnames);层= [......sequenceInputlayer(numfeatures)lstmlayer(numhidentunits,'OutputMode''最后的')全连接列(numclasses)softmaxlayer分类层];

指定培训选项。指定求解器'亚当'并且梯度阈值为2.数据存储不支持Shuffling,因此设置万博1manbetx'洗牌', 到'绝不'。每次时代验证网络一次。要监控培训进度,请设置'plots'选择'培训 - 进步'。要抑制详细输出,请设置'verbose'错误的

默认情况下,Trainnetwork.如果有一个可用的,则使用GPU。要手动指定执行环境,请使用'executionenvironment'名称 - 值对参数培训选项。CPU培训可能比GPU培训显着更长。使用GPU的训练需要并行计算工具箱™和支持的GPU设备。万博1manbetx有关支持设备的信息,请参阅万博1manbetx

numiterationsperepoch = bloor(numobservations / minibatchsize);选项=培训选项('亚当'......'maxepochs'15,......'minibatchsize',小匹马,......'gradientthreshold'2,......'洗牌''绝不'......'plots''培训 - 进步'......'verbose',错误的);

使用该网络训练LSTM网络Trainnetwork.功能。

net = trainnetwork(tdstrain,图层,选项);

使用新数据预测

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

eportsnew = [......“冷却液在分拣机下面汇集。”“分拣机在启动时吹熔断。”“汇编者有一些非常响亮的嘎嘎声的声音。”];

使用预处理步骤作为培训文档预处理文本数据。

documentnew = preprocesstext(eportsnew);

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

xnew = doc2sequence(emb,doversidenew);

使用培训的LSTM网络对新序列进行分类。

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

转换文本功能

变形文字函数取自读取的数据tabulartextdatastore.对象并返回预测器表和响应表。预测因子是C-经过-S.由嵌入单词给出的单词向量阵列胚胎, 在哪里C是嵌入的维度和S.是序列长度。对课程的响应是分类标签Classnames.

功能DataTransformed = TransformText(数据,MEM,ClassNames)%预处理文件。TextData = Data {:,1};文档= preprocesstext(textdata);%转换为序列。预测器= doc2sequence(mem,文件);%读取标签。标签=数据{:,2};响应=分类(标签,ClassNames);%将数据转换为表。dataTransformed =表(预测器,响应);结尾

预处理功能

功能PreprocessText.执行以下步骤:

  1. 使用授权文本令人畏缩的鳕文

  2. 将文本转换为小写使用降低

  3. 使用标点符号使用侵蚀

功能文档= preprocesstext(textdata)文档= tokenizeddocument(textdata);文件=较低(文件);文件=侵蚀(文件);结尾

读取标签功能

readlabels.函数创建副本tabulartextdatastore.目的TTDS.并从中读取标签labelName.柱子。

功能标签= readlabels(ttds,labelname)ttdsnew = copy(ttds);ttdsnew.selectedvariablenames = labelName;tbl = readall(ttdsnew);标签= TBL。(LabelName);结尾

也可以看看

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

相关话题