В этом примере показано, как классифицировать текстовые данные за пределами памяти с помощью нейронной сети для глубокого обучения с помощью пользовательского мини-пакетного 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)