このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
この例では,深層学習長短期記憶(LSTM)ネットワークを使用してテキストデータを分類する方法を説明します。
テキストデータでは必然的にデータが順に並んでいます。1つのテキストは単語のシーケンスであり,それらの単語間には依存関係がある可能性があります。長期的な依存関係を学習して,シーケンスデータの分類に使用するために,LSTMニューラルネットワークを使用します。LSTMネットワークは,再帰型ニューラルネットワーク(RNN)の一種で,シーケンスデータのタイムステップ間の長期的な依存関係を学習できます。
テキストをLSTMネットワークに入力するには,まず,テキストデータを数値シーケンスに変換します。ドキュメントを数値インデックスのシーケンスにマッピングする単語符号化を使用して,これを実現できます。また,より正確な結果を得るため,単語埋め込み層をネットワークに含めます。単語埋め込みは,ボキャブラリ内の単語をスカラーインデックスではなく数値ベクトルにマッピングします。これらの埋め込みでは,意味の似ている単語が類似のベクトルを持つように,単語のセマンティックな詳細を取得します。また,ベクトル演算を介して単語間の関係をモデル化します。たとえば。”罗马之于意大利巴黎是法国“という关系は,方程式意大利-罗马+巴黎=法国で记述されます。
この例では,4つのステップでLSTMネットワークに学习させてそれを使用します。
データをインポートして前处理します。
単語符号化を使用して単語を数値シーケンスに変換します。
単语埋め込み层のあるLSTMネットワークを作成し,このネットワークに学习させます。
学習済みLSTMネットワークを使用して新しいテキストデータを分類します。
工场レポートのデータをインポートします。このデータには,出荷时のイベントを说明するラベル付きテキストが含まれています。テキストデータを串としてインポートするために,テキストタイプを“字符串”
に指定します。
filename =.“factoryReports.csv”;数据= readtable(文件名,'TextType'那“字符串”);头(数据)
ans =8×5表说明类别紧急分辨率成本_____________________________________________________________________ ____________________ ____________________ ________ _____“的相关文件偶尔会卡在扫描器卷轴。”“机械故障”,“中等”,“重新调整机” 45“大声剑拔弩张和敲打的声音从汇编活塞都来了。”“机械故障”,“中等”,“重新调整机” 35“有削减电力启动设备时。”“电子故障”“高”“完全替代” 16200“在汇编炒电容器。”“电子故障”“高”“替换组件” 352“混音器跳闸保险丝。”“电子故障”“低”“添加到收藏” 55“在构建代理爆管被喷洒冷却液。”“泄漏”“高”“替换组件” 371“A熔丝在混合器吹”。“电子故障”“低”“替换组件” 441“事情继续翻滚带了。”“机械故障”,“低”,“重新调整机” 38
この例の目的は,类别
列のラベルによって事象を分类することです。データをクラスに分割するために,これらのラベルを分类に変换します。
data.Category =分类(data.Category);
ヒストグラムを使用してデータのクラスの分布を表示します。
图直方图(data.Category);Xlabel(“类”) ylabel (“频率”)标题(“级分配”)
次の手順は,これを学習セットと検証セットに分割することです。データを学習区画と,検証およびテスト用のホールドアウト区画に分割します。ホールドアウトの割合を20%に指定します。
CVP = cvpartition(data.Category,'坚持',0.2);dataTrain =数据(训练(CVP),:);资料验证=数据(测试(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至标签分类问题にLSTM层を使用するには,出力モードを'最后的'
に設定します。最後に,クラスの数と同じサイズの全結合層や,ソフトマックス層と分類層を追加します。
inputSize = 1;embeddingDimension = 50;numHiddenUnits = 80;numWords = enc.NumWords;numClasses =元素个数(类别(YTrain));层= [......sequenceInputLayer (inputSize) wordEmbeddingLayer embeddingDimension, numWords lstmLayer (numHiddenUnits,'输出outputmode'那'最后的')fullyConnectedLayer(numClasses)softmaxLayer classificationLayer]
层x1 = 6层阵列层:1“1维2序列输入序列输入”字嵌入层字嵌入层和50个维度和423个独特的单词3”LSTM LSTM 80隐藏单位4”完全连接4完全连接层5”Softmax Softmax 6”crossentropyex分类输出
学习オプションを指定します。
亚当ソルバーを使用して学習させます。
ミニバッチサイズとして16を指定します。
すべてのエポックでデータをシャッフルします。
'plots'
オプションを“训练进度”
に设定して,学习の进行状况を监视します。
検证データを指定するには,“ValidationData”
オプションを使用します。
“详细”
オプションを错误的
に设定して,详细出力を非表示にします。
既定では,利用可能なGPUがある場合,trainNetwork
はGPUを使用します(并行计算工具箱™,および计算能力3.0以上のCUDA®対応GPUが必要)。そうでない场合はCPUが使用されます。実行环境を手动で指定するには,trainingOptions
の名前と値のペアの引数“执行环境”
を使用します。CPUでの学習にかかる時間は,GPUでの学習よりも大幅に長くなる可能性があります。
选择= trainingOptions ('亚当'那......'MiniBatchSize'16,......“GradientThreshold”2,......“洗牌”那“every-epoch”那......“ValidationData”{XValidation, YValidation},......'plots'那“训练进度”那......“详细”、假);
关节trainNetwork
を使用してLSTMネットワークに学習させます。
网= trainNetwork (XTrain、YTrain层,选择);
3つの新しいレポートの事象タイプを分类します。新しいレポートを含む串配列を作成します。
reportsNew = [......“冷却剂在分拣机下面汇集。”“分类器在启动时烧断保险丝。”“从组装器里传出很响的咔哒声。”];
学习ドキュメントと同じ前处理手顺を使用してテキストデータを前处理します。
documentsNew = preprocessText(reportsNew);
学习シーケンスの作成时と同じオプションでdoc2sequence
を使用して,テキストデータをシーケンスに変換します。
XNew = doc2sequence (enc documentsNew,“长度”,sequenceLength);
学习済みのLSTMネットワークを使用して新しいシーケンスを分类します。
labelsNew =分类(净,XNew)
labelsNew =3×1分类泄漏电子故障机械故障
关节preprocessText
は以下のステップを実行します。
tokenizedDocument
を使用してテキストをトークン化する。
较低的
を使用してテキストを小文字に変換する。
erasePunctuation
を使用して句読点を消去する。
函数文件= preprocessText (textData)标记文本。文件= tokenizedDocument (textData);%转换为小写。文件=低(文件);%擦掉标点符号。= erasePunctuation文件(文档);结尾
lstmLayer
|sequenceInputlayer.
|trainingOptions
|trainNetwork
|doc2sequence
(文本分析工具箱)|fastTextWordEmbedding
(文本分析工具箱)|tokenizedDocument
(文本分析工具箱)|WordCloud.
(文本分析工具箱)|wordEmbeddingLayer
(文本分析工具箱)