畳み込みニュ,ラルネットワ,クを使用したテキストデ,タの分類
この例では,畳み込みニュ,ラルネットワ,クを使用してテキストデ,タを分類する方法を説明します。
畳み込みを使用してテキストデータを分類するには,入力の時間次元全体で畳み込みを行う1次元畳み込み層を使用します。
この例では,幅が異なる1次元畳み込みフィルタをもネットワクに学習させます。各フィルタ,の幅は,フィルタ,が確認可能な単語の数(n-gramの長さ)に対応します。ネットワクは畳み込み層の複数の分岐をもため,異なるn-gramの長さを使用できます。
デ,タの読み込み
factoryReports.csv
内のデタから表形式のテキストデタストアを作成し,最初のいくかにいてレポトを表示します。
数据=可读数据(“factoryReports.csv”);头(数据)
ans =8×5表类别描述紧急解决成本 _______________________________________________________________________ ______________________ __________ ______________________ _____ {' 项目是偶尔陷于扫描器线轴。'}{'机械故障'}{'中等'}{'重新调整机器'}45{'巨大的嘎嘎声和砰砰声来自装配活塞。'}{'机械故障'}{'中等'}{'重新调整机器'}35{'启动工厂时电源有切断。'}{'电子故障'}{'高'}{'完全替换'}16200{'汇编程序中的烧坏电容器。'}{'电子故障'}{'高'}{'更换组件'}352{'混频器触发熔断器。'}{'电子故障'}{'低'}{'添加到观察列表'}55{'施工剂中的爆裂管道正在喷射冷却剂。'}{'泄漏'}{'高'}{'更换组件'}371{'混合器内保险丝熔断。'}{'电子故障'}{'低'}{'更换组件'}441{'东西继续从皮带上脱落。'}{'机械故障'}{'低'}{'重新调整机器'}38
デ,タを学習区画と検証区画に分割します。デタの80%を学習に使用し,残りのデタを検証に使用します。
cvp = cvpartition(data.Category,Holdout=0.2);dataTrain = data(training(cvp),:);dataValidation = data(test(cvp),:);
テキストデ,タの前処理
テ,ブルの“描述”
列からテキストデ,タを抽出し,この例のテキスト前処理関数の節にリストされている関数preprocessText
を使用して前処理を行います。
documentsTrain = preprocessText(dataTrain.Description);
“类别”
列からラベルを抽出して分类に変換します。
TTrain = categorical(dataTrain.Category);
クラス名と観測値の数を表示します。
classNames =唯一的(TTrain)
一会=4×1分类电子故障泄漏机械故障软件故障
numObservations = numel(TTrain)
numObservations = 384
同じ手順で,検証デ,タを抽出して前処理を行います。
documentsValidation = preprocessText(datavalid . description);TValidation = categorical(datavalid . category);
ドキュメントからシ,ケンスへの変換
ドキュメントをニューラルネットワークに入力するために,単語符号化を使用してドキュメントを数値インデックスのシーケンスに変換します。
ドキュメントから単語符号化を作成します。
enc = worddencoding (documentsTrain);
単語符号化の語彙サ@ @ズを表示します。語彙サesc escズは,単語符号化における一意の単語の数です。
numWords = c. numWords
numWords = 436
関数doc2sequence
を使用して,ドキュメントを整数のシ,ケンスに変換します。
XTrain = doc2sequence(enc,documentsTrain);
学習デ,タから作成した単語符号化を使用して,検証ドキュメントをシ,ケンスに変換します。
XValidation = doc2sequence(enc,documentsValidation);
ネットワ,クア,キテクチャの定義
分類タスク用のネットワ,クア,キテクチャを定義します。
ネットワ,クア,キテクチャの手順は以下のとおりです。
入力サesc escズとして1を指定します。これは,整数シ,ケンス入力のチャネル次元に対応します。
100次元の単語埋め込みを使用して,入力を埋め込みます。
長さ2、3、4、5の语法について,畳み込み層,バッチ正規化層,ReLU層,ドロップアウト層,および最大プーリング層を含む層のブロックを作成。
各ブロックにいて,サズが1行N列の畳み込みフィルタ200個と,グロバル最大プリング層を指定。
入力層を各ブロックに接続し,連結層を使用してブロックの出力を連結。
出力を分類するために,出力サKの全結合層,ソフトマックス層,および分類層を含める。ここで,Kはクラスの数。
ネットワクのハパパラメタを指定します。
embeddingDimension = 100;ngramlength = [2 3 4 5];numFilters = 200;
まず,入力層を含む層グラフ,および100次元の単語埋め込み層を作成します。単語埋め込み層を畳み込み層に接続できるようにするため,埋め込み層の名前を“循证”
に設定します。学習時に畳み込み層による畳み込みによってシケンスの長さが0とならないことをチェックするには,最小长度
オプションを学習デ,タ内で最も短いシ,ケンスの長さに設定します。
minLength = min(docclth (documentsTrain));layers = [sequenceInputLayer(1,MinLength= MinLength) wordEmbeddingLayer(embeddingDimension,numWords,Name=“循证”));lgraph = layerGraph(图层);
语法のそれぞれの長さについて,1次元畳み込み,バッチ正規化,ReLU,ドロップアウト,および1次元グローバル最大プーリングの各層のブロックを作成します。各ブロックを単語埋め込み層に接続します。
numBlocks = nummel (ngramlength);为j = 1:numBlocks N = ngramlength (j);block = [convolution1dLayer(N,numFilters,Name= .“conv”+ N,填充=“相同”) batchNormalizationLayer (Name =“bn”+ N) reluLayer (Name =“relu”+ N) dropoutLayer (0.2, Name =“下降”+ N) globalMaxPooling1dLayer (Name =“马克斯”+ N));lgraph = addLayers(lgraph,block);lgraph = connectLayers(“循证”,“conv”+ N);结束
連結層,全結合層,ソフトマックス層,および分類層を追加します
numClasses = numel(classNames);layers = [concatenationLayer(1,numBlocks,Name= .“猫”) fullyConnectedLayer (numClasses Name =“俱乐部”) softmaxLayer (Name =“软”) classificationLayer (Name =“分类”));lgraph = addLayers(lgraph,layers);
グロ,バル最大プ,リング層を連結層に接続し,ネットワ,クア,キテクチャをプロットで表示します。
为j = 1:numBlocks N = ngramlength (j);lgraph = connectLayers(“马克斯”+ N,“猫/”+ j);结束图表(lgraph)标题(“网络架构”)
ネットワ,クの学習
学習オプションを指定します。
ミニバッチサesc escズを128として学習させます。
検証デ,タを使用してネットワ,クを検証します。
検証損失が最小のネットワ,クを返します。
学習の進行状況のプロットを表示し,詳細出力を非表示にします。
选项= trainingOptions(“亚当”,...MiniBatchSize = 128,...ValidationData = {XValidation, TValidation},...OutputNetwork =“best-validation-loss”,...情节=“训练进步”,...Verbose = false);
関数trainNetwork
を使用してネットワ,クに学習させます。
net = trainNetwork(XTrain,TTrain,lgraph,options);
ネットワ,クのテスト
学習済みネットワ,クを使用して検証デ,タを分類します。
YValidation = category (net,XValidation);
混同チャ,トで予測を可視化します。
图confusionchart (TValidation YValidation)
分類精度を計算します。精度は,正しく予測されたラベルの比率です。
accuracy = mean(TValidation == YValidation)
准确度= 0.9375
新しいデ,タを使用した予測
3プを分類します。新しいレポトを含む字符串配列を作成します。
reportsNew = [“冷却剂在分拣机下面。”“分拣机在启动时炸断保险丝。”“有一些非常响亮的咔嗒声从组装。”];
学習ドキュメントおよび検証ドキュメントと同じ前処理手順を使用してテキストデ,タを前処理します。
documentsNew = preprocessText(reportsNew);XNew = doc2sequence(enc,documentsNew);
学習済みネットワ,クを使用して新しいシ,ケンスを分類します。
YNew = category (net,XNew)
YNew =3×1分类泄漏电子故障机械故障
テキスト前処理関数
関数preprocessTextData
は,テキストデ,タを入力として受け取り,次の手順を実行します。
テキストをト,クン化します。
テキストを小文字に変換します。
函数documents = preprocessText(textData) documents = tokenizedDocument(textData);文档=较低(文档);结束
参考
fastTextWordEmbedding
(文本分析工具箱)|wordcloud
(文本分析工具箱)|wordEmbedding
(文本分析工具箱)|layerGraph
|convolution2dLayer
|batchNormalizationLayer
|trainingOptions
|trainNetwork
|doc2sequence
(文本分析工具箱)|tokenizedDocument
(文本分析工具箱)|变换
関連するトピック
- 使用深度学习分类文本数据(文本分析工具箱)
- 使用自定义小批量数据存储对内存不足的文本数据进行分类(文本分析工具箱)
- 创建简单的文本分类模型(文本分析工具箱)
- 使用主题模型分析文本数据(文本分析工具箱)
- 使用多词短语分析文本数据(文本分析工具箱)
- 训练一个情感分类器(文本分析工具箱)
- 深層学習を使用したシ,ケンスの分類
- 深層学習用のデ,タストア
- Matlabによる深層学習