このペ,ジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
深層学習を使用したテキストデ,タの分類
この例では,深層学習長短期記憶(LSTM)ネットワークを使用してテキストデータを分類する方法を説明します。
テキストデ,タでは必然的にデ,タが順に並んでいます。1。長期的な依存関係を学習して,シーケンスデータの分類に使用するために,LSTMニューラルネットワークを使用します。LSTMネットワークは,再帰型ニューラルネットワーク(RNN)の一種で,シーケンスデータのタイムステップ間の長期的な依存関係を学習できます。
テキストをLSTMネットワークに入力するには,まず,テキストデータを数値シーケンスに変換します。ドキュメントを数値インデックスのシーケンスにマッピングする単語符号化を使用して,これを実現できます。また,より正確な結果を得るため,単語埋め込み層をネットワ,クに含めます。単語埋め込みは,ボキャブラリ内の単語をスカラーインデックスではなく数値ベクトルにマッピングします。これらの埋め込みでは,意味の似ている単語が類似のベクトルを持つように,単語のセマンティックな詳細を取得します。また,ベクトル演算を介して単語間の関係をモデル化します。たとえば,”罗马之于意大利如同巴黎去法国という関係は,方程式意大利-罗马+巴黎=法国で記述されます。
この例では,4のステップでLSTMネットワクに学習させてそれを使用します。
デタをンポトして前処理します。
単語符号化を使用して単語を数値シ,ケンスに変換します。
単語埋め込み層のあるLSTMネットワ,クを作成し,このネットワ,クに学習させます。
学習済みLSTMネットワ,クを使用して新しいテキストデ,タを分類します。
デタのンポト
工場レポトのデタをンポトします。このデタには,出荷時のベントを説明するラベル付きテキストが含まれています。テキストデタを字符串としてンポトするために,テキストタプを“字符串”
に指定します。
文件名=“factoryReports.csv”;数据= readtable(文件名,“TextType”,“字符串”);头(数据)
ans =8×5表类别描述紧急解决成本 _____________________________________________________________________ ____________________ ________ ____________________ _____ " 项目是偶尔陷入扫描仪卷。”“机械故障”“中等”“重新调整机”45“装配活塞发出巨大的嘎嘎声和砰砰声。”“机械故障”“中等”“重新调整机器”“开机时电源有故障。”"电子故障" "高" "完全更换" 16200 "装配器电容器烧坏"“电子故障”“高”“更换部件”“352”“混合器熔断器触发。”"电子故障" "低" "列入观察名单" 55 "爆裂管道中施工剂正在喷洒冷却剂""泄漏" "高" "更换部件" 371 "搅拌机保险丝烧断。"“电子故障”“信号低”“更换部件”“东西继续从传送带上掉下来。”"机械故障" "低" "调整机
この例の目的は,类别
列のラベルによって事象を分類することです。デ,タをクラスに分割するために,これらのラベルを,分类に変換します。
数据。Category = categorical(data.Category);
ヒストグラムを使用してデ,タのクラスの分布を表示します。
图直方图(data.Category);包含(“类”) ylabel (“频率”)标题(“类分配”)
次の手順は,これを学習セットと検証セットに分割することです。デ,タを学習区画と,検証およびテスト用のホ,ルドアウト区画に分割します。ホルドアウトの割合を20%に指定します。
CVP = cvpartition(数据。类别,“坚持”, 0.2);dataTrain = data(training(cvp),:);dataValidation = data(test(cvp),:);
分割した表からテキストデ,タとラベルを抽出します。
textDataTrain = dataTrain.Description;textDataValidation = datavalid . description;YTrain = dataTrain.Category;YValidation = datavalid . 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
を使用します。
enc = worddencoding (documentsTrain);
次の変換ステップは,すべてのドキュメントが同じ長さになるようにパディングと切り捨てを行うことです。関数trainingOptions
には,入力シ,ケンスのパディングと切り捨てを自動的に行うオプションが用意されています。ただし,これらのオプションは,単語ベクトルのシ,ケンスにはあまり適していません。代わりに,シ,ケンスのパディングと切り捨てを手動で行います。単語ベクトルのシ,ケンスの“左パディング”と切り捨てを行うと,学習が改善される可能性があります。
ドキュメントのパディングと切り捨てを行うには,まず,ターゲット長さを選択し,それより長いドキュメントを切り捨て,それにより短いドキュメントの左パディングを行います。最良の結果を得るには,大量のデ,タを破棄せずにタ,ゲット長さを短くする必要があります。適切なタ,ゲット長さを求めるために,学習ドキュメントの長さのヒストグラムを表示します。
documentlength = documentlength (documentsTrain);直方图(documentlength)“文档长度”)包含(“长度”) 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ネットワ,クの作成と学習
LSTMネットワ,クア,キテクチャを定義します。シーケンスデータをネットワークに入力するために,シーケンス入力層を含め,入力サイズを1に設定します。次に,次元が50の単語埋め込み層と,単語符号化と同じ数の単語を含めます。次に,lstm層を含め,隠れユニット数を80に設定します。序列到标签分類問題にLSTM層を使用するには,出力モ,ドを“最后一次”
に設定します。最後に,クラスの数と同じサaaplズの全結合層や,ソフトマックス層と分類層を追加します。
inputSize = 1;embeddingDimension = 50;numHiddenUnits = 80;numWords = c. numWords;numClasses = nummel(类别(YTrain));层= [...sequenceInputLayer(inputSize) wordEmbeddingLayer(embeddingDimension,numWords) lstmLayer(numHiddenUnits,“OutputMode”,“最后一次”fullyConnectedLayer(numClasses) softmaxLayer classificationLayer
2”字嵌入层字嵌入层50维423个唯一单词3”LSTM LSTM 80个隐藏单元4”全连接4全连接层5”Softmax Softmax 6”分类输出crossentropyex
学習オプションの指定
学習オプションを指定します。
亚当ソルバを使用して学習させます。
ミニバッチサesc escズとして16を指定します。
すべてのエポックでデ,タをシャッフルします。
“阴谋”
オプションを“训练进步”
に設定して,学習の進行状況を監視します。検証デ,タを指定するには,
“ValidationData”
オプションを使用します。“详细”
オプションを假
に設定して,詳細出力を非表示にします。
既定では,使用可能なgpuがある場合,trainNetwork
はgpuを使用します。そうでない場合はCPUが使用されます。実行環境を手動で指定するには,trainingOptions
の名前と値のペアの引数“ExecutionEnvironment”
を使用します。CPUでの学習にかかる時間は,gpuでの学習よりも大幅に長くなる可能性があります。GPUを使用して学習させるには并行计算工具箱™が必要です。サポトされているデバスにいては,リリス別のgpuサポト(并行计算工具箱)を参照してください。
选项= trainingOptions(“亚当”,...“MiniBatchSize”, 16岁,...“GradientThreshold”2,...“洗牌”,“every-epoch”,...“ValidationData”{XValidation, YValidation},...“阴谋”,“训练进步”,...“详细”、假);
関数trainNetwork
を使用してLSTMネットワ,クに学習させます。
net = trainNetwork(XTrain,YTrain,图层,选项);
新しいデ,タを使用した予測
3プを分類します。新しいレポトを含む字符串配列を作成します。
reportsNew = [...“冷却剂在分拣机下面。”“分拣机在启动时炸断保险丝。”“有一些非常响亮的咔嗒声从组装。”];
学習ドキュメントと同じ前処理手順を使用してテキストデ,タを前処理します。
documentsNew = preprocessText(reportsNew);
学習シ,ケンスの作成時と同じオプションでdoc2sequence
を使用して,テキストデ,タをシ,ケンスに変換します。
XNew = doc2sequence(enc,documentsNew,“长度”, sequenceLength);
学習済みのLSTMネットワ,クを使用して新しいシ,ケンスを分類します。
labelsNew =分类(net,XNew)
labelsNew =3×1分类泄漏电子故障机械故障
前処理関数
関数preprocessText
は以下のステップを実行します。
tokenizedDocument
を使用してテキストをト,クン化する。较低的
を使用してテキストを小文字に変換する。erasePunctuation
を使用して句読点を消去する。
函数documents = preprocessText(textData)标记文本。documents = tokenizedDocument(textData);%转换为小写字母。文档=较低(文档);删除标点符号。documents = eraspunctuation(文档);结束
参考
fastTextWordEmbedding
(文本分析工具箱)|wordEmbeddingLayer
(文本分析工具箱)|tokenizedDocument
(文本分析工具箱)|lstmLayer
|trainNetwork
|trainingOptions
|doc2sequence
(文本分析工具箱)|sequenceInputLayer
|wordcloud
(文本分析工具箱)
関連するトピック
- 深層学習を使用したテキストの生成
- 使用深度学习逐字生成文本(文本分析工具箱)
- 使用自定义小批量数据存储对内存不足的文本数据进行分类(文本分析工具箱)
- 创建简单的文本分类模型(文本分析工具箱)
- 使用主题模型分析文本数据(文本分析工具箱)
- 使用多词短语分析文本数据(文本分析工具箱)
- 训练一个情感分类器(文本分析工具箱)
- 深層学習を使用したシ,ケンスの分類
- Matlabによる深層学習