主要内容

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

此示例显示如何使用深度学习长期短期内存(LSTM)网络对文本数据进行分类。

文本数据自然是连续的。一条文本是一系列单词,这可能会在它们之间具有依赖关系。要学习和使用长期依赖性来对序列数据进行分类,请使用LSTM神经网络。LSTM网络是一种复发性神经网络(RNN),可以在序列数据的时间步长之间学习长期依赖性。

要向LSTM网络输入文本,首先将文本数据转换为数字序列。可以使用将文档映射到数字索引序列的单词编码来实现这一点。为了更好的结果,还包括一个词嵌入层在网络中。单词嵌入将词汇表中的单词映射为数字向量而不是标量索引。这些嵌入捕获单词的语义细节,因此具有相似含义的单词有相似的向量。它们还通过向量运算建立单词之间的关系模型。例如,关系"罗马之于意大利,犹如罗马之于意大利巴黎是法国“由方程式描述意大利- - - - - -罗马+巴黎=法国。

在此示例中培训和使用LSTM网络有四个步骤:

  • 导入并预处理数据。

  • 使用单词编码将单词转换为数字序列。

  • 使用单词嵌入层创建和培训LSTM网络。

  • 使用培训的LSTM网络对新文本数据进行分类。

导入数据

导入工厂报表数据。该数据包含有标签的工厂事件的文本描述。若要将文本数据导入为字符串,请指定文本类型'细绳'

文件名=“factoryReports.csv”;data = readtable(文件名,“TextType”'细绳');头(数据)
ans =.8×5表类别描述紧急解决成本  _____________________________________________________________________ ____________________ ________ ____________________ _____ " 项目是偶尔陷入扫描仪卷。”“机械故障”、“中等”、“重新调整机器”、“组装器的活塞发出响亮的咔嗒咔嗒和砰砰的声音。”“机械故障”“中等”“调整机器”“启动工厂时电源被切断”“电子故障”“高”“完全更换”“16200”“组装器内电容器烧毁”“电子故障”“高”“更换元件”“352”“混频器跳闸保险丝。”“电子故障”“低”“列入观察名单”“55”施工剂中爆管正在喷洒冷却剂。"泄漏" "高" "更换部件" 371 "混合器内保险丝熔断"“电子故障”“低”“更换部件”“东西不断从传送带上掉下来。”“机械故障”“低”“重新调整机

此示例的目标是通过标签对事件进行分类类别要将数据划分为类,请将这些标签转换为类别。

data.category =分类(data.category);

使用直方图查看数据中类的分布。

图表直方图(数据.Category);Xlabel(“班级”)伊拉贝尔(“频率”) 标题(“类分配”

下一步是将其分区成用于培训和验证。将数据分区为培训分区和一个用于验证和测试的备用分区。将持续百分比指定为20%。

本量利= cvpartition(数据。类别,“坚持”, 0.2);dataTrain =数据(训练(cvp):);dataValidation =数据(测试(cvp):);

从分区表中提取文本数据和标签。

textdataTrain = datatrain.description;textdatavalidation = datavalidation.description;ytrain = dataTrain.category;yvalidation = datavalidation.category;

要检查是否正确导入了数据,请使用单词云可视化训练文本数据。

图wordcloud (textDataTrain);标题(“训练数据”

预处理文本数据

创建一个用于标记和预处理文本数据的函数。这个函数PreprocessText.,在示例的末尾列出,执行以下步骤:

  1. 使用授权文本标记化文档

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

  3. 使用下列命令删除标点符号删除标点符号

对训练数据和验证数据进行预处理PreprocessText.功能。

documentsTrain=预处理文本(textDataTrain);documentsValidation=预处理文本(textDataValidation);

查看前几个预处理的培训文件。

documentsTrain (1:5)
ans = 5×1 tokenizedDocument: 9令牌:项目中偶尔陷入扫描仪线轴10令牌:大声作响,声音来自汇编活塞10令牌:削减能力,启动植物5令牌:油炸电容器在汇编程序4令牌:搅拌机绊倒保险丝

将文档转换为序列

要将文档输入到LSTM网络中,使用单词编码将文档转换为数字索引序列。

要创建单词编码,请使用wordEncoding功能。

enc = wordencoding(documentstrain);

下一个转换步骤是填充和截断文档,以便它们都是相同的长度。这培训选项功能为自动提供填充和截断输入序列的选项。但是,这些选项对单词向量的序列不太适合。相反,手动填充并截断序列。如果你左垫并截断词向量序列,这样训练可能会有所改进。

要填充并截断文档,请首先选择目标长度,然后截断的文档长于它和剩余的左键文档。为获得最佳结果,目标长度应短暂而不会丢弃大量数据。要找到合适的目标长度,请查看培训文档长度的直方图。

DocumentLengths = Doclength(DocumentStrain);图表直方图(DocumentLengths)标题(“文档长度”)xlabel(“长度”)伊拉贝尔(“文件数量”

大多数培训文件的代币少于10个。使用这个作为截断和填充的目标长度。

将文档转换为使用数字索引的序列doc2sequence.。要截断或左填充长度为10的序列,请设置“长度”选择10。

sequenceLength=10;XTrain=doc2序列,“长度”,sequencelength);XTrain(1:5)
ans =.5×1单元阵列{1×10-double}{1×10-double}{1×10-double}{1×10-double}

使用相同的选项将验证文档转换为序列。

XValidation = doc2sequence (enc documentsValidation,“长度”,sequencelength);

创建和培训LSTM网络

定义LSTM网络架构。要将序列数据输入网络,请包括序列输入层,并将输入大小设置为1。接下来,包括维度为50的单词嵌入层和与单词编码相同数量的单词。接下来,包括一个LSTM层,并将隐藏单元数设置为80。要将LSTM层用于序列标签分类问题,请将输出模式设置为“最后一次”。最后,添加具有与类数量,Softmax层和分类层相同大小的完全连接的图层。

输入= 1;EmbeddingDimension = 50;numhidendunits = 80;numwords = enc.numwords;numclasses = numel(类别(YTrain));层= [...SequenceInputLayer(InputSize)WordEmbeddingLayer(EmbeddingDimension,NumWords)LSTMLAYER(numhidendunits,'OutputMode'“最后一次”)软连接层(numClasses)
layers=6x1层阵列和层:1''序列输入序列输入1维2''字嵌入层50维和423个唯一字字字嵌入层3''LSTM LSTM 80个隐藏单元4''完全连接4''完全连接层5''Softmax Softmax 6''分类输出交叉输入ROPyex

指定培训选项

指定培训选项:

  • 用亚当求解器训练。

  • 指定迷你批量大小为16。

  • 每个纪元都洗牌数据。

  • 通过设置。监控培训进度“阴谋”选择“训练进步”

  • 属性指定验证数据“验证数据”选项

  • 通过设置抑制verbose输出'verbose'选择错误的

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

选项=培训选项(“亚当”...'minibatchsize'16,...'gradientthreshold'2,...'洗牌'“每个时代”...“验证数据”,{XValidation,YValidation},...“阴谋”“训练进步”...'verbose',假);

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

net=列车网络(XTrain、YTrain、图层、选项);

使用新数据进行预测

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

报告新=[...“冷却液在分拣机下面汇集。”“分拣机在启动时熔断保险丝。”“装配工发出了一些非常响亮的卡嗒卡嗒声。”];

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

documentnew = preprocesstext(eportsnew);

将文本数据转换为序列使用doc2sequence.具有与创建培训序列相同的选项。

XNew=doc2sequence(enc、documentsNew、,“长度”,sequencelength);

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

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

预处理函数

这个函数PreprocessText.执行以下步骤:

  1. 使用授权文本标记化文档

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

  3. 使用下列命令删除标点符号删除标点符号

作用文档= preprocessText(TextData)%标记文本。文档= tokenizeddocument(textdata);%转换为小写。文件=较低(文件);%删除标点符号。文件=侵蚀(文件);结尾

另请参阅

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

相关话题