В этом примере показано, как классифицировать текстовые данные за пределами памяти с помощью нейронной сети для глубокого обучения с помощью пользовательского мини-пакетного datastore.
Мини-пакетный datastore является реализацией datastore с поддержкой чтения данных пакетами. Можно использовать мини-пакетный datastore в качестве источника наборов данных для обучения, валидации, тестирования и предсказания для применений глубокого обучения. Используйте мини-пакетные хранилища данных для чтения данных , которых не помещаютсь в память, или для выполнения определенных операций предварительной обработки при считывании пакетов данных.
При обучении сети программное обеспечение создает мини-пакеты последовательностей той же длины путем заполнения, усечения или разделения входных данных. The trainingOptions
функция предоставляет опции для дополнения и усечения входных последовательностей, однако эти опции плохо подходят для последовательностей векторов слов. Кроме того, эта функция не поддерживает заполнение данных в пользовательском datastore. Вместо этого необходимо дополнить и обрезать последовательности вручную. Если вы оставляете и обрезаете последовательности векторов слов, то обучение может улучшиться.
Пример «Классификация текстовых данных с использованием глубокого обучения» вручную обрезает и заполняет все документы одинаковой длины. Этот процесс добавляет много заполнения к очень коротким документам и отбрасывает много данных из очень длинных документов.
Кроме того, чтобы предотвратить добавление слишком большого количества заполнений или отброс слишком большого количества данных, создайте пользовательский мини-пакетный datastore, который вводит мини-пакеты в сеть. Пользовательский мини-пакет datastore textDatastore.m
преобразует мини-пакеты документов в последовательности или индексы слов и левые панели каждого мини-пакета в длину самого длинного документа в мини-пакете. Для отсортированных данных этот datastore может помочь уменьшить количество заполнения, добавленного к данным, поскольку документы не заполнены до фиксированной длины. Точно так же datastore не отбрасывает никаких данных из документов.
В этом примере используется пользовательский мини-пакет datastore textDatastore.m
. Адаптировать этот datastore к данным можно путем настройки функций. Для примера, показывающего, как создать свой собственный пользовательский мини-пакет datastore, смотрите Разработку Пользовательского мини-пакета Datastore (Deep Learning Toolbox).
Система datastore textDatastore
требуется вложение слова для преобразования документов в последовательности векторов. Загрузите предварительно обученное встраивание слов с помощью fastTextWordEmbedding
. Эта функция требует Text Analytics Toolbox™ Model для fastText English 16 млрд Token Word Embedding пакет поддержки. Если этот пакет поддержки не установлен, то функция предоставляет ссылку на загрузку.
emb = fastTextWordEmbedding;
Создайте datastore, который содержит данные для обучения. Пользовательский мини-пакет datastore textDatastore
считывает предикторы и метки из файла CSV. Для предикторов datastore преобразует документы в последовательности индексов слов, и для ответов datastore возвращает категориальную метку для каждого документа.
Чтобы создать datastore, сначала сохраните пользовательский мини-пакет datastore textDatastore.m
на путь. Дополнительные сведения о создании пользовательских мини-пакетных хранилищ данных см. в разделе Разработка пользовательского мини-пакета Datastore (Deep Learning Toolbox).
Для обучающих данных укажите файл CSV "factoryReports.csv"
и что текст и метки находятся в столбцах "Description"
и "Category"
соответственно.
filenameTrain = "factoryReports.csv"; textName = "Description"; labelName = "Category"; dsTrain = textDatastore(filenameTrain,textName,labelName,emb)
dsTrain = textDatastore with properties: ClassNames: ["Electronic Failure" "Leak" "Mechanical Failure" "Software Failure"] Datastore: [1×1 matlab.io.datastore.TransformedDatastore] EmbeddingDimension: 300 LabelName: "Category" MiniBatchSize: 128 NumClasses: 4 NumObservations: 480
Определите сетевую архитектуру LSTM. Чтобы ввести данные последовательности в сеть, включите входной слой последовательности и установите размер входа равным размерности встраивания. Затем включите слой LSTM с 180 скрытыми модулями. Чтобы использовать слой LSTM для задачи классификации между последовательностями и метками, установите режим выхода равным 'last'
. Наконец, добавьте полносвязный слой с выходным размером, равным количеству классов, слоем softmax и слоем классификации.
numFeatures = dsTrain.EmbeddingDimension; numHiddenUnits = 180; numClasses = dsTrain.NumClasses; layers = [ ... sequenceInputLayer(numFeatures) lstmLayer(numHiddenUnits,'OutputMode','last') fullyConnectedLayer(numClasses) softmaxLayer classificationLayer];
Задайте опции обучения. Задайте решатель, который будет 'adam'
и порог градиента, равный 2. Система datastore textDatastore.m
не поддерживает тасование, поэтому установите 'Shuffle'
, в 'never'
. Для примера, показывающего, как реализовать datastore с поддержкой тасования, смотрите Разработку Пользовательского Мини-Пакетного Datastore (Deep Learning Toolbox). Чтобы контролировать процесс обучения, установите 'Plots'
опция для 'training-progress'
. Чтобы подавить подробный выход, установите 'Verbose'
на false
.
По умолчанию trainNetwork
использует графический процессор, если он доступен. Чтобы задать окружение выполнения вручную, используйте 'ExecutionEnvironment'
Аргумент пары "имя-значение" из trainingOptions
. Обучение на центральном процессоре может занять значительно больше времени, чем обучение на графическом процессоре. Для обучения с использованием графический процессор требуется Parallel Computing Toolbox™ и поддерживаемый графический процессор. Для получения информации о поддерживаемых устройствах см. раздел.
miniBatchSize = 128; numObservations = dsTrain.NumObservations; numIterationsPerEpoch = floor(numObservations / miniBatchSize); options = trainingOptions('adam', ... 'MiniBatchSize',miniBatchSize, ... 'GradientThreshold',2, ... 'Shuffle','never', ... 'Plots','training-progress', ... 'Verbose',false);
Обучите сеть LSTM с помощью trainNetwork
функция.
net = trainNetwork(dsTrain,layers,options);
Классифицируйте тип события трех новых отчетов. Создайте строковые массивы, содержащий новые отчеты.
reportsNew = [ "Coolant is pooling underneath sorter." "Sorter blows fuses at start up." "There are some very loud rattling sounds coming from the assembler."];
Предварительно обработайте текстовые данные, используя шаги предварительной обработки в качестве datastore textDatastore.m
.
documents = tokenizedDocument(reportsNew); documents = lower(documents); documents = erasePunctuation(documents); predictors = doc2sequence(emb,documents);
Классификация новых последовательностей с помощью обученной сети LSTM.
labelsNew = classify(net,predictors)
labelsNew = 3×1 categorical
Leak
Electronic Failure
Mechanical Failure
doc2sequence
| extractHTMLText
| findElement
| htmlTree
| tokenizedDocument
| wordcloud
| wordEmbeddingLayer
| lstmLayer
(Deep Learning Toolbox) | sequenceInputLayer
(Deep Learning Toolbox) | trainingOptions
(Deep Learning Toolbox) | trainNetwork
(Deep Learning Toolbox)