이번역페이지는최신내용을담고있지않습니다。최신내용을영문으로보려면여기를클릭하십시오。
이예제에서는딥러닝장단기기억(LSTM)신경망을사용하여텍스트데이터를분류하는방법을보여줍니다。
텍스트데이터는본질적으로순차적입니다。텍스트조각은단어로이루어진시퀀스로서,각단어사이에는종속성이있을수있습니다。장기적인종속성을학습하여이를시퀀스데이터를분류하는데사용하려면LSTM신경망을사용하십시오。LSTM신경망은시퀀스데이터의시간스텝간의장기적인종속성을학습할수있는순환신경망(RNN)의일종입니다。
LSTM신경망에텍스트를입력하려면먼저텍스트데이터를숫자형시퀀스로변환하십시오。이렇게하려면문서를숫자형인덱스시퀀스로매핑하는단어인코딩을사용하면됩니다。더나은결과를위해신경망에단어임베딩계층을포함시킵니다。단어임베딩은단어집에있는단어를스칼라형인덱스가아닌숫자형벡터로매핑합니다。이러한임베딩은비슷한의미를갖는단어들이비슷한벡터를갖도록단어의의미체계정보를캡처합니다。벡터연산을통해단어사이의관계도모델링합니다。예를들어관계”로마와이탈리아의관계는파리와프랑스와관계와같다“는이탈리아- - - - - -로마+파리=프랑스라는식으로설명됩니다。
이예제에서는다음과같은네단계를사용하여LSTM신경망을훈련시키고사용합니다。
데이터를가져오고전처리합니다。
단어인코딩을사용하여단어를숫자시퀀스로변환합니다。
단어임베딩계층을사용하여LSTM신경망을만들고훈련시킵니다。
훈련된LSTM신경망을사용하여새로운텍스트데이터를분류합니다。
공장보고서데이터를가져옵니다。이데이터는공장이벤트에대한텍스트로된설명을포함합니다。텍스트데이터를문자열로가져오도록텍스트유형을“字符串”
형으로지정하십시오。
文件名=“factoryReports.csv”;data = readtable(文件名,“TextType”,“字符串”);头(数据)
ans =8×5表类别描述紧急解决成本 _____________________________________________________________________ ____________________ ________ ____________________ _____ " 项目是偶尔陷入扫描仪卷。”“机械故障”“中等”“调整机”45“装配活塞发出巨大的咔嗒声和撞击声。”“机械故障”“介质”“重新调整机器”35“启动时电源切断。”“电子故障”“高”“全更换”16200“组装中油炸电容器。”"电子故障" "高" "更换部件" 352 "混频器使保险丝跳闸。"“电子故障”“低”“加入观察名单”“55”管道爆裂在施工剂喷洒冷却剂。"泄漏" "高" "更换元件" 371 "混频器保险丝烧断。"“电子故障”“低”“更换部件”441“东西继续从皮带上掉下来。”“机械故障”“低”“重新调整机器
이예제의목표는类别
열의레이블을기준으로이벤트를분류하는것입니다。데이터를클래스별로나누기위해레이블을直言형으로변환합니다。
数据。类别=分类(data.Category);
히스토그램을사용하여데이터의클래스분포를표시합니다。
图直方图(data.Category);包含(“类”) ylabel (“频率”)标题(“类分配”)
다음단계는데이터를훈련세트및검증세트로분할하는것입니다。데이터를훈련파티션,그리고검증과테스트를위한홀드아웃파티션으로분할합니다。홀드아웃백분율을20%로지정합니다。
本量利= cvpartition(数据。类别,“坚持”, 0.2);dataTrain =数据(训练(cvp):);dataValidation =数据(测试(cvp):);
분할된테이블에서텍스트데이터와레이블을추출합니다。
textDataTrain = dataTrain.Description;textDataValidation = dataValidation.Description;YTrain = dataTrain.Category;YValidation = dataValidation.Category;
데이터를올바르게가져왔는지확인하기위해워드클라우드를사용하여훈련텍스트데이터를시각화합니다。
图wordcloud (textDataTrain);标题(“训练数据”)
텍스트데이터를토큰화하고전처리하는함수를만듭니다。이예제의마지막에나오는함수preprocessText
는다음단계를수행합니다。
tokenizedDocument
를사용하여텍스트를토큰화합니다。
较低的
를사용하여텍스트를소문자로변환합니다。
erasePunctuation
을사용하여문장부호를지웁니다。
preprocessText
함수를사용하여훈련데이터와검증데이터를전처리합니다。
documentsTrain = preprocessText (textDataTrain);documentsValidation = preprocessText (textDataValidation);
전처리된처음몇개의훈련문서를표시합니다。
documentsTrain (1:5)
ans = 5×1 tokenizedDocument: 9令牌:项目中偶尔陷入扫描仪线轴10令牌:大声作响,声音来自汇编活塞10令牌:削减能力,启动植物5令牌:油炸电容器在汇编程序4令牌:搅拌机绊倒保险丝
문서를LSTM신경망에입력하려면단어인코딩을사용하여문서를숫자형인덱스로구성된시퀀스로변환하십시오。
단어인코딩을만들려면wordEncoding
함수를사용하십시오。
内附= wordEncoding (documentsTrain);
다음변환단계는문서가모두같은길이가되도록채우고자르는것입니다。trainingOptions
함수는입력시퀀스를자동으로채우고자르는옵션을제공합니다。그러나이러한옵션은단어벡터로구성된시퀀스에적합하지않습니다。이러한옵션을사용하는대신시퀀스를수동으로채우고자릅니다。단어벡터로구성된시퀀스를왼쪽을채우고자르면훈련이향상될수있습니다。
문서를채우고자르려면먼저목표길이를선택하고,목표길이보다긴문서는자르고목표길이보다짧은문서는왼쪽을채웁니다。최상의결과를위해목표길이는다량의데이터가버려지지않을만큼짧아야합니다。적당한목표길이를찾으려면훈련문서의길이를히스토그램으로표시해보십시오。
documentLengths = doclength (documentsTrain);图直方图(documentLengths)标题(“文档长度”)包含(“长度”) ylabel (“文件”)
대부분의훈련문서10개가미만의토큰을갖습니다。이값을자르기와채우기의목표길이로사용합니다。
doc2sequence
를사용하여문서를숫자형인덱스로구성된시퀀스로변환합니다。10이시퀀스의길이가되도록자르거나왼쪽을채우려면“长度”
옵션을10으로설정하십시오。
sequenceLength = 10;XTrain = doc2sequence (enc documentsTrain,“长度”, sequenceLength);XTrain (1:5)
ans =5×1单元阵列{1×10 double} {1×10 double} {1×10 double} {1×10 double} {1×10 double}
동일한옵션을사용하여검증문서를시퀀스로변환합니다。
XValidation = doc2sequence (enc documentsValidation,“长度”, sequenceLength);
LSTM신경망아키텍처를정의합니다。신경망에시퀀스데이터를입력하려면시퀀스입력계층을포함시키고입력크기를1로설정하십시오。50이다음으로,차원이고단어인코딩과동일한단어개수를갖는단어임베딩계층을포함시킵니다。다음으로,LSTM계층을포함시키고은닉유닛의개수를80으로설정합니다。sequence-to-label분류문제에서LSTM계층을사용하려면출력모드를“最后一次”
로설정하십시오。마지막으로,클래스개수와동일한크기를갖는완전연결계층,소프트맥스계층,분류계층을추가합니다。
inputSize = 1;embeddingDimension = 50;numHiddenUnits = 80;numWords = enc.NumWords;numClasses =元素个数(类别(YTrain));层= [...sequenceInputLayer (inputSize) wordEmbeddingLayer embeddingDimension, numWords lstmLayer (numHiddenUnits,“OutputMode”,“最后一次”) fullconnectedlayer (numClasses)软maxlayer分类层]
层x1 = 6层阵列层:1“1维2序列输入序列输入”字嵌入层字嵌入层和50个维度和423个独特的单词3”LSTM LSTM 80隐藏单位4”完全连接4完全连接层5”Softmax Softmax 6”crossentropyex分类输出
다음과같이훈련옵션을지정합니다。
亚当솔버를사용하여훈련시킵니다。
미니배치크기를16으로지정합니다。
매时代마다데이터를섞습니다。
“阴谋”
옵션을“训练进步”
로설정하여훈련진행상황을모니터링합니다。
“ValidationData”
옵션을사용하여검증데이터를지정합니다。
“详细”
옵션을假
로설정하여세부정보가출력되지않도록합니다。
기본적으로trainNetwork
는GPU를사용할수있으면GPU를사용합니다。GPU가없으면CPU를사용합니다。실행환경을수동으로지정하려면trainingOptions
의“ExecutionEnvironment”
이름——값쌍인수를사용하십시오。CPU에서훈련시키면GPU에서훈련시키는것보다시간이상당히오래걸릴수있습니다。GPU를사용하여훈련시키려면并行计算工具箱™와지원되는GPU장치가필요합니다。지원되는장치에대한자세한내용은항목을참조하십시오。
选择= trainingOptions (“亚当”,...“MiniBatchSize”, 16岁,...“GradientThreshold”2,...“洗牌”,“every-epoch”,...“ValidationData”{XValidation, YValidation},...“阴谋”,“训练进步”,...“详细”、假);
trainNetwork
함수를사용하여LSTM신경망을훈련시킵니다。
网= trainNetwork (XTrain、YTrain层,选择);
3개새보고서의이벤트유형을분류합니다。새보고서를포함하는字符串형배열을만듭니다。
reportsNew = [...“冷却剂在分类器下面汇集。”"Sorter在启动时炸掉保险丝。"“装配工发出了非常响亮的咔嗒咔嗒声。”];
훈련문서와동일한전처리단계를사용하여텍스트데이터를전처리합니다。
documentsNew = preprocessText (reportsNew);
훈련시퀀스를만들때와동일한옵션으로doc2sequence
를사용하여텍스트데이터를시퀀스로변환합니다。
XNew = doc2sequence (enc documentsNew,“长度”, sequenceLength);
훈련된LSTM신경망을사용하여새시퀀스를분류합니다。
XNew labelsNew =分类(净)
labelsNew =3×1分类泄漏电子故障机械故障
함수preprocessText
는다음단계를수행합니다。
tokenizedDocument
를사용하여텍스트를토큰화합니다。
较低的
를사용하여텍스트를소문자로변환합니다。
erasePunctuation
을사용하여문장부호를지웁니다。
函数文件= preprocessText (textData)标记文本。文件= tokenizedDocument (textData);%转换成小写。文件=低(文件);%擦掉标点符号。= erasePunctuation文件(文档);结束
fastTextWordEmbedding
|wordEmbeddingLayer
|tokenizedDocument
|lstmLayer
(深度学习工具箱)|trainNetwork
(深度学习工具箱)|trainingOptions
(深度学习工具箱)|doc2sequence
|sequenceInputLayer
(深度学习工具箱)|wordcloud