主要内容

このペ,ジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

畳み込みニュ,ラルネットワ,クを使用したテキストデ,タの分類

この例では,畳み込みニュ,ラルネットワ,クを使用してテキストデ,タを分類する方法を説明します。

畳み込みを使用してテキストデータを分類するには,テキストデータをイメージに変換しなければなりません。これを行うには,観測値をパディングするか切り捨てて一定の長さ年代になるようにし,単語埋め込みを使用してドキュメントを長さCの単語ベクトルのシ,ケンスに変換します。これで,ドキュメントを1 x年代xCのメジ(高さ1,幅年代,チャネルCの@ @メ@ @ジ)で表すことができます。

テキストデタをCSVファルからメジに変換するには,tabularTextDatastoreオブジェクトを作成します。その後,变换をカスタム変換関数と共に呼び出して,tabularTextDatastoreオブジェクトから読み取ったデタを深層学習用のメジに変換します。この例の最後にリストされている関数transformTextDataは,データストアから読み取ったデータと事前学習済みの単語埋め込みを受け取り,各観測値を単語ベクトルの配列に変換します。

この例では,幅が異なる1次元畳み込みフィルタをもネットワクに学習させます。各フィルタ,の幅は,フィルタ,が確認可能な単語の数(n-gramの長さ)に対応します。ネットワクは畳み込み層の複数の分岐をもため,異なるn-gramの長さを使用できます。

事前学習済みの単語埋め込みの読み込み

事前学習済みのfastText単語埋め込みを読み込みます。この関数には,文本分析工具箱™模型快速文本英语160亿令牌词嵌入サポ,トパッケ,ジが必要です。このサポートパッケージがインストールされていない場合,関数によってダウンロード用リンクが表示されます。

emb = fasttextwordem寝料;

デ,タの読み込み

factoryReports.csv内のデ,タから表形式のテキストデ,タストアを作成します。“描述”列と“类别”列のデ,タのみを読み取ります。

filenameTrain =“factoryReports.csv”;textName =“描述”;labelName =“类别”;ttdsTrain = tabularTextDatastore(文件名训练,“SelectedVariableNames”, (textName labelName]);

デ,タストアをプレビュ,します。

ttdsTrain。ReadSize = 8;预览(ttdsTrain)
ans =8×2表类别描述  _______________________________________________________________________ ______________________ {' 项目是偶尔陷于扫描器线轴。'}{'机械故障'}{'巨大的嘎嘎声和砰砰声来自装配活塞。'}{'机械故障'}{'启动工厂时电源有切断。'}{'电子故障'}{'汇编程序中的电容器烧坏。'}{'电子故障'}{'混合器触发保险丝。'}{'电子故障'}{'施工剂中的管道破裂正在喷射冷却剂。'}{'泄漏'}{'混合器中的保险丝熔断。'}{'电子故障'}{'东西继续从传送带上掉下来。'}{'机械故障'}

デ,タストアから読み取ったデ,タを予測子と応答を含む表に変換する,カスタム変換関数を作成します。この例の最後にリストされている関数transformTextDataは,tabularTextDatastoreオブジェクトから読み取ったデ,タを受け取り,予測子と応答のテ,ブルを返します。予測子は単語ベクトルの1 xsequenceLengthxCの配列で,単語埋め込み循证により与えられます。ここで,Cは埋め込み次元です。応答は,一会内のクラスのカテゴリカルラベルです。

この例の最後にリストされている関数readLabelsを使用して学習デ,タからラベルを読み取り,一意のクラス名を検索します。

标签= readLabels(ttdsTrain,labelName);classNames =唯一的(标签);numObservations = numel(标签);

関数transformTextDataを使用し,シ,ケンス長に14を指定して,デ,タストアを変換します。

sequenceLength = 14;tdsTrain = transform(ttdsTrain, @(data) transformTextData(data,sequenceLength,emb,classNames))
tdsTrain = TransformedDatastore带有属性:底层数据存储:[1×1 matlab.io.datastore.]TabularTextDatastore] 金宝appSupportedOutputFormats: ["txt" "csv" "xlsx" "xls" "parquet" "parq" "png" "jpg" "jpeg" "tif" "tiff" "wav" "flac" "ogg" "mp4" "m4a"]转换:{@(数据)transformTextData(data,sequenceLength,emb,classNames)} IncludeInfo: 0

変換されたデ,タストアをプレビュ,します。予測子は1 x年代xCの配列です。ここで,年代はシ,ケンス長,Cは特徴の数(埋め込み次元)です。応答はカテゴリカルラベルです。

预览(tdsTrain)
ans =8×2表预测响应_________________ __________________ {1×14×300单}机械故障{1×14×300单}机械故障{1×14×300单}电子故障{1×14×300单}电子故障{1×14×300单}电子故障{1×14×300单}泄漏{1×14×300单}电子故障{1×14×300单}机械故障

ネットワ,クア,キテクチャの定義

分類タスク用のネットワ,クア,キテクチャを定義します。

ネットワ,クア,キテクチャの手順は以下のとおりです。

  • 1 x年代xCの入力サ@ @ズを指定します。ここで,年代はシ,ケンス長,Cは特徴(埋め込み次元)の数です。

  • 長さ2、3、4、5の语法について,畳み込み層,バッチ正規化層,ReLU層,ドロップアウト層,および最大プーリング層を含む層のブロックを作成。

  • 各ブロックにいて,サズが1行N列の畳み込みフィルタ200個と,サズが1行年代列のプ,リング領域を指定。ここで,Nはn-gramの長さ。

  • 入力層を各ブロックに接続し,深さ連結層を使用してブロックの出力を連結。

  • 出力を分類するために,出力サKの全結合層,ソフトマックス層,および分類層を含める。ここで,Kはクラスの数。

最初に,層配列内で,入力層,ユニグラムの最初のブロック,深さ連結層,全結合層,ソフトマックス層,および分類層を指定します。

numFeatures = emb.Dimension;inputSize = [1 sequenceLength numFeatures];numFilters = 200;ngramlength = [2 3 4 5];numBlocks = nummel (ngramlength);numClasses = numel(classNames);

入力層を含む層グラフを作成します。正規化オプションを“没有”に,層の名前を“输入”に設定します。

层= imageInputLayer(inputSize,“归一化”“没有”“名字”“输入”);lgraph = layerGraph(层);

语法のそれぞれの長さについて,畳み込み,バッチ正規化,ReLU,ドロップアウト,および最大プーリングの各層のブロックを作成します。各ブロックを入力層に接続します。

j = 1:numBlocks N = ngramlength (j);block = [convolution2dLayer([1 N],numFilters,“名字”“conv”+ N,“填充”“相同”) batchNormalizationLayer (“名字”“bn”+ N) reluLayer (“名字”“relu”+ N) dropoutLayer (0.2,“名字”“下降”+N) maxPooling2dLayer([1 sequenclength],“名字”“马克斯”+ N));lgraph = addLayers(lgraph,block);lgraph = connectLayers(“输入”“conv”+ N);结束

ネットワ,クア,キテクチャをプロットで表示します。

图表(lgraph)标题(“网络架构”

深さ連結層,全結合層,ソフトマックス層,および分類層を追加します

层= [depthConcatenationLayer(numBlocks,“名字”“深度”) fullyConnectedLayer (numClasses“名字”“俱乐部”) softmaxLayer (“名字”“软”) classificationLayer (“名字”“分类”));lgraph = addLayers(lgraph,layers);图表(lgraph)标题(“网络架构”

最大プ,リング層を深さ連結層に接続し,最終的なネットワ,クア,キテクチャをプロットで表示します。

j = 1:numBlocks N = ngramlength (j);lgraph = connectLayers(“马克斯”+ N,“深度/”+ j);结束图表(lgraph)标题(“网络架构”

ネットワ,クの学習

学習オプションを指定します。

  • ミニバッチサesc escズを128として学習させます。

  • デ,タストアはシャッフル可能ではないため,デ,タをシャッフルしない。

  • 学習の進行状況のプロットを表示し,詳細出力を非表示にする。

miniBatchSize = 128;numIterationsPerEpoch = floor(numObservations/miniBatchSize);选项= trainingOptions(“亚当”...“MiniBatchSize”miniBatchSize,...“洗牌”“永远”...“阴谋”“训练进步”...“详细”、假);

関数trainNetworkを使用してネットワ,クに学習させます。

net = trainNetwork(tdsTrain,lgraph,options);

新しいデ,タを使用した予測

3プを分類します。新しいレポトを含む字符串配列を作成します。

reportsNew = [“冷却剂在分拣机下面。”“分拣机在启动时炸断保险丝。”“有一些非常响亮的咔嗒声从组装。”];

学習ドキュメントと同じ前処理手順を使用してテキストデ,タを前処理します。

XNew = preprocessText(reportsNew,sequenceLength,emb);

学習済みのLSTMネットワ,クを使用して新しいシ,ケンスを分類します。

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

ラベル読み取り関数

関数readLabelsは,tabularTextDatastoreオブジェクトのコピ运输大亨を作成してlabelName列からラベルを読み取ります。

函数标签= readLabels(ttds,labelName) ttdsNew = copy(ttds);ttdsNew。选择edVariableNames = labelName; tbl = readall(ttdsNew); labels = tbl.(labelName);结束

テキストデ,タの変換関数

関数transformTextDataは,tabularTextDatastoreオブジェクトから読み取ったデ,タを取り,予測子と応答の表を返します。予測子は単語ベクトルの1 xsequenceLengthxCの配列で,単語埋め込み循证により与えられます。ここで,Cは埋め込み次元です。応答は,一会内のクラスのカテゴリカルラベルです。

函数dataTransformed = transformTextData(数据,sequenceLength,emb,classNames)预处理文档。textData = data{:,1};预处理文本dataTransformed = preprocessText(textData,sequenceLength,emb);阅读标签。标签=数据{:,2};responses = categorical(labels,classNames);将数据转换为表。dataTransformed。Responses =响应;结束

テキスト前処理関数

関数preprocessTextDataは,テキストデ,タ,シ,ケンス長,および単語埋め込みを受け取り,次の手順を実行します。

  1. テキストをト,クン化します。

  2. テキストを小文字に変換します。

  3. 埋め込みを使用して,指定された長さの単語ベクトルのシ,ケンスにドキュメントを変換します。

  4. 単語ベクトルシ,ケンスの形状を変更し,ネットワ,クに入力します。

函数tbl = preprocessText(textData,sequenceLength,emb) documents = tokenizedDocument(textData);文档=较低(文档);将文档转换为嵌入尺寸-顺序-长度-1的图像。Predictors = doc2sequence(emb,documents,“长度”, sequenceLength);将图像重塑为大小为1的序列长度嵌入维度。predictors = cellfun(@(X) permute(X,[3 2 1]),predictors,“UniformOutput”、假);TBL =表;资源描述。预测因子=预测因子;结束

参考

||||||(文本分析工具箱)|(文本分析工具箱)|(文本分析工具箱)|(文本分析工具箱)|(文本分析工具箱)

関連するトピック